Tự host ChatGPT riêng với Open WebUI trên VPS: hướng dẫn đầy đủ
Cách tự host ChatGPT riêng bằng Open WebUI trên VPS: Docker, nginx, HTTPS, kết nối API OpenAI hoặc Ollama, làm tay hoặc một cú bấm với ZoPanel.

Ý chính
- Open WebUI là giao diện chat mã nguồn mở, kết nối được API tương thích OpenAI và mô hình Ollama chạy tại chỗ.
- Dùng API thì một VPS khoảng 2 GB RAM là đủ; chạy mô hình tại chỗ cần nhiều RAM hơn và tốt nhất là GPU.
- Tài khoản đầu tiên tạo trên Open WebUI là quản trị viên, nên hãy tạo ngay sau khi cài và khoá đăng ký tự do.
- Cổng Docker publish ra ngoài có thể đi vòng qua UFW; hãy bind 127.0.0.1 và để nginx lo HTTPS.
Để tự host ChatGPT riêng, cách phổ biến nhất hiện nay là cài Open WebUI trên một VPS: một giao diện chat mã nguồn mở giống ChatGPT, chạy trong Docker, đặt sau nginx với tên miền và HTTPS của bạn, rồi kết nối với API của OpenAI (hoặc nhà cung cấp tương thích OpenAI) hay với mô hình chạy tại chỗ qua Ollama. Cả nhóm dùng chung một chỗ, lịch sử chat nằm trên server của bạn, và bạn trả tiền API theo mức dùng thay vì phí thuê bao theo từng người.
Bài này hướng dẫn cách cài thủ công trên Ubuntu 24.04 / Debian 12 (Docker, nginx, SSL, các thiết lập an toàn), cách làm với ZoPanel, và giải thích thẳng những điều cần biết trước: chi phí, quyền riêng tư dữ liệu, chạy mô hình tại chỗ có thực tế không, và giấy phép của Open WebUI.
Open WebUI là gì và vì sao nên tự host?
Open WebUI là giao diện web cho mô hình ngôn ngữ: chat, lưu lịch sử, nhiều người dùng có phân quyền, tải tài liệu lên để hỏi đáp, chọn mô hình cho từng cuộc chat. Nó không phải là mô hình AI; nó là "vỏ" kết nối tới mô hình qua API.
Lý do để tự host:
- Một chỗ dùng chung cho cả nhóm với tài khoản riêng, quản trị viên duyệt người mới.
- Trả theo mức dùng. Bạn dùng API key của chính mình; người dùng ít không tốn phí thuê bao cố định.
- Chọn mô hình tự do. Dùng song song mô hình của OpenAI, các nhà cung cấp tương thích OpenAI, hoặc mô hình mở chạy qua Ollama.
- Lịch sử chat và tài liệu nằm trên server của bạn, không phải trong tài khoản SaaS của từng nhân viên.
Nói rõ một điều về quyền riêng tư: khi dùng API của OpenAI hay nhà cung cấp khác, nội dung bạn gửi vẫn đi tới nhà cung cấp đó và chịu chính sách dữ liệu của họ. Chỉ khi chạy mô hình tại chỗ, dữ liệu mới hoàn toàn không rời server.
Cần VPS cấu hình bao nhiêu để tự host ChatGPT riêng?
| Cách dùng | RAM gợi ý | Ghi chú |
|---|---|---|
| Open WebUI + API (OpenAI hoặc tương thích) | Khoảng 2 GB cho Open WebUI, cộng phần cho hệ thống | Không cần GPU, VPS phổ thông là đủ |
| Open WebUI + mô hình nhỏ chạy bằng CPU qua Ollama | Nhiều hơn đáng kể, tuỳ kích thước mô hình | Chạy được nhưng chậm; hợp để thử nghiệm |
| Mô hình lớn tại chỗ cho cả nhóm | Server có GPU | Chi phí cao hơn nhiều so với VPS thường |
Với phần lớn cá nhân và nhóm nhỏ, cách thực tế là Open WebUI trên VPS 2-4 GB kết nối API. Thêm khoảng 2 vCPU và vài GB ổ đĩa cho dữ liệu chat và tài liệu.
Cách tự host Open WebUI thủ công
Bước 1: Chuẩn bị tên miền và cài Docker
Trỏ bản ghi A của tên miền (ví dụ chat.example.com) về IP của VPS. Rồi cài Docker từ kho chính thức của Docker theo hướng dẫn của Docker:
sudo apt update && sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
sudo tee /etc/apt/sources.list.d/docker.sources >/dev/null <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Trên Debian, thay ubuntu bằng debian trong hai đường dẫn.
Bước 2: Chạy Open WebUI bằng Docker Compose
Tạo thư mục /opt/open-webui và file compose.yaml:
services:
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
restart: unless-stopped
ports:
- "127.0.0.1:3000:8080"
volumes:
- open-webui:/app/backend/data
env_file: .env
volumes:
open-webui:
Tạo file .env với một khoá bí mật cố định (không có khoá cố định, mỗi lần tạo lại container mọi người sẽ bị đăng xuất):
cd /opt/open-webui
echo "WEBUI_SECRET_KEY=$(openssl rand -hex 32)" | sudo tee .env >/dev/null
sudo chmod 600 .env
sudo docker compose up -d
sudo docker compose logs -f # chờ tới khi thấy server đã khởi động
Chú ý dòng 127.0.0.1:3000:8080. Hướng dẫn nhanh của Open WebUI dùng -p 3000:8080, tức publish trên mọi địa chỉ IP. Theo tài liệu của Docker, cổng publish theo cách đó được Docker định tuyến trước khi tới luật của UFW, nên mở cổng 3000 ra internet dù UFW đang chặn. Bind vào 127.0.0.1 để chỉ nginx trên cùng server truy cập được.
Muốn ghim phiên bản ổn định để cập nhật có kiểm soát, thay :main bằng một tag phiên bản cụ thể.
Bước 3: nginx, HTTPS và streaming
sudo apt install -y nginx certbot python3-certbot-nginx
Tạo /etc/nginx/sites-available/open-webui:
server {
listen 80;
server_name chat.example.com;
client_max_body_size 50m; # cho phép tải tài liệu lên (mặc định nginx chỉ 1 MB)
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_buffering off; # để câu trả lời hiện ra dần, không phải chờ hết
proxy_read_timeout 600s; # câu trả lời dài không bị cắt sau 60 giây
}
}
sudo ln -s /etc/nginx/sites-available/open-webui /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d chat.example.com
proxy_buffering off và hỗ trợ WebSocket là hai thứ hay bị quên: thiếu chúng, câu trả lời chỉ hiện ra khi đã xong hoặc gửi tin nhắn bị lỗi.
Bước 4: Tạo tài khoản quản trị và kết nối mô hình
- Mở tên miền ngay sau khi cài và tạo tài khoản đầu tiên. Tài khoản đầu tiên là quản trị viên. Nếu để trang mở công khai, người lạ có thể tạo trước bạn.
- Vào Admin Panel → Settings → Connections, thêm kết nối OpenAI với URL
https://api.openai.com/v1và API key của bạn, hoặc URL của một nhà cung cấp tương thích OpenAI. - Theo tài liệu Open WebUI, sau khi có tài khoản quản trị, đăng ký mới bị tắt; nếu bật lại cho cả nhóm, tài khoản mới ở trạng thái chờ cho tới khi bạn duyệt. Giữ chế độ duyệt này.
- Đặt hạn mức chi tiêu cho API key ở trang của nhà cung cấp, để một vòng lặp hay một người dùng không làm hoá đơn tăng vọt.
Bước 5: Muốn chạy mô hình tại chỗ với Ollama?
Bạn có thể thêm container Ollama vào cùng file compose và trỏ Open WebUI tới nó qua mạng nội bộ của Compose (OLLAMA_BASE_URL=http://ollama:11434). Đừng publish cổng 11434 của Ollama ra internet: API của Ollama không có xác thực. Trên VPS không có GPU, mô hình nhỏ chạy được nhưng chậm, và mô hình lớn cần nhiều RAM hơn hẳn chính Open WebUI. Hãy thử với một mô hình nhỏ trước khi mua server lớn.
Cập nhật và sao lưu
cd /opt/open-webui
sudo docker compose pull && sudo docker compose up -d
Toàn bộ người dùng, lịch sử chat và cài đặt nằm trong volume open-webui. Sao lưu volume này trước mỗi lần cập nhật và theo lịch, ví dụ bằng restic như trong bài backup VPS lên S3.
Tự host Open WebUI với ZoPanel
Trên ZoPanel, Open WebUI có sẵn trong Kho ứng dụng:
- Cài Docker nếu chưa có: Kho ứng dụng → Cài Docker.
- Chọn Open WebUI, nhập tên miền và bấm cài. ZoPanel tạo website cho tên miền, khởi động container và proxy tên miền vào nó; chứng chỉ SSL được cấp tự động khi tên miền đã trỏ về server. Ứng dụng có giới hạn bộ nhớ 2048 MB.
- Ứng dụng được khoá riêng cho bạn cho tới khi thiết lập xong: người khác chỉ thấy trang "đang được thiết lập". Ở tab Docker của app, bấm Mở ứng dụng (chỉ mình tôi), tạo tài khoản quản trị, rồi bấm Đã thiết lập xong — mở công khai. Như vậy không ai giành được tài khoản quản trị đầu tiên.
- Thêm API key ở Admin Panel → Settings → Connections của Open WebUI. Bạn trả tiền trực tiếp cho nhà cung cấp mô hình; ZoPanel không thấy key.
Container chạy với user namespace, chỉ nghe trên 127.0.0.1, có giới hạn RAM và CPU, và bị chặn khỏi mạng nội bộ của server. Hệ quả cần biết: container không gọi được dịch vụ trên loopback hay mạng riêng, nên Open WebUI cài từ Kho ứng dụng dùng API qua internet (OpenAI hoặc nhà cung cấp tương thích), không dùng được Ollama chạy ngay trên cùng server. Cập nhật bằng Cập nhật bản mới ở tab Docker (dữ liệu được giữ), và dữ liệu app nằm trong thư mục mà chỉ root và container đọc được. Xem thêm Kho ứng dụng và lưu trữ S3 và Mỗi ứng dụng dùng để làm gì.
Giấy phép Open WebUI: cần biết gì?
Từ bản v0.6.6 (tháng 4/2025), theo trang giấy phép của Open WebUI, dự án dùng giấy phép kiểu BSD-3 kèm điều khoản thương hiệu: bạn không được sửa, xoá hay che thương hiệu "Open WebUI", trừ khi triển khai có tối đa 50 người dùng trong 30 ngày, có văn bản cho phép, hoặc có giấy phép doanh nghiệp. Với dùng nội bộ thông thường, điều này không ảnh hưởng; nếu bạn định bán dịch vụ chat mang thương hiệu riêng cho nhiều khách, hãy đọc kỹ điều khoản.
Những lỗi thường gặp
- Publish cổng 3000 ra internet và tin rằng UFW đang chặn. Bind 127.0.0.1.
- Để trang mới cài mở công khai, người lạ tạo tài khoản quản trị trước.
- Không đặt
WEBUI_SECRET_KEYcố định, mọi người bị đăng xuất sau mỗi lần cập nhật. - Quên
client_max_body_size, tải tài liệu lên bị lỗi 413. - Không đặt hạn mức chi tiêu API.
- Không sao lưu volume trước khi cập nhật lên bản mới.
Kết luận
Tự host ChatGPT riêng với Open WebUI là một trong những dự án tự host đáng làm nhất: chi phí VPS thấp, cả nhóm có một chỗ chat AI chung, bạn chọn mô hình và giữ lịch sử trên server của mình. Làm tay cần Docker, nginx, SSL và vài thiết lập an toàn dễ quên; với ZoPanel, đó là một ứng dụng trong Kho ứng dụng, kèm khoá thiết lập ban đầu và cách ly container. Bạn có thể bắt đầu với gói Free và chạy Open WebUI bên cạnh website trên cùng VPS.
Câu hỏi thường gặp
Tự host Open WebUI có miễn phí không?
Phần mềm Open WebUI miễn phí. Bạn trả tiền VPS và tiền API theo mức dùng cho nhà cung cấp mô hình (OpenAI hoặc nhà cung cấp khác). Nếu chạy mô hình tại chỗ bằng Ollama thì không tốn phí API, nhưng cần server mạnh hơn.
Open WebUI có dùng được với Claude hoặc DeepSeek không?
Open WebUI kết nối với mọi API tương thích OpenAI. Nhiều nhà cung cấp có điểm cuối tương thích OpenAI; thêm URL và key của họ ở Admin Panel → Settings → Connections. Kiểm tra tài liệu của nhà cung cấp để lấy đúng URL.
Dữ liệu chat có hoàn toàn riêng tư không?
Lịch sử chat, tài khoản và tài liệu lưu trên server của bạn. Nhưng nội dung mỗi câu hỏi vẫn được gửi tới nhà cung cấp API để xử lý, theo chính sách dữ liệu của họ. Chỉ khi chạy mô hình tại chỗ, dữ liệu mới không rời server.
VPS không có GPU có chạy được mô hình AI không?
Chạy được mô hình nhỏ bằng CPU qua Ollama, nhưng chậm và tốn RAM, phù hợp để thử nghiệm. Cho cả nhóm dùng hằng ngày, kết nối API hoặc dùng server có GPU sẽ cho trải nghiệm tốt hơn nhiều.
Làm sao cho nhiều người cùng dùng Open WebUI?
Tạo tài khoản quản trị trước, rồi bật đăng ký mới trong phần quản trị: tài khoản mới ở trạng thái chờ cho tới khi bạn duyệt. Bạn có thể phân nhóm người dùng và giới hạn mô hình mà từng nhóm được dùng.
Đọc tiếp

Cài Flowise trên VPS năm 2026, và việc Flowise ngừng phát triển nghĩa là gì
Hướng dẫn cài Flowise trên VPS bằng Docker và HTTPS, bảo vệ API key, sao lưu flow, và những điều cần biết về việc Flowise hết vòng đời tháng 8/2026.

Cài n8n trên VPS: tự host tự động hoá với Docker, HTTPS và sao lưu
Hướng dẫn cài n8n trên VPS bằng Docker, chạy sau nginx với HTTPS, webhook đúng tên miền, sao lưu workflow và cập nhật an toàn, hoặc cài một chạm bằng ZoPanel.

Chạy ứng dụng Docker trên VPS an toàn: 9 việc cần làm đúng
Cách chạy ứng dụng Docker trên VPS an toàn - cổng chỉ mở nội bộ, user namespace, giới hạn RAM, cách ly mạng, SSL - kèm cấu hình mẫu và cách làm với ZoPanel.