Tuyệt vời! Hướng dẫn này sẽ giúp bạn cài đặt Open WebUI siêu nhẹ, chỉ sử dụng API, trên Ubuntu 24.04 với Docker, sau đó cấu hình Nginx Proxy Manager để truy cập bằng tên miền riêng và tích hợp SSL.
Yêu cầu:
- Một máy chủ/VPS chạy Ubuntu 24.04.
- Quyền truy cập root hoặc người dùng có quyền
sudo
. - Tên miền của bạn đã được trỏ về địa chỉ IP của máy chủ.
- Đã cài đặt Docker và Docker Compose. Nếu chưa, bạn có thể làm theo hướng dẫn chính thức: https://docs.docker.com/engine/install/ubuntu/ và https://docs.docker.com/compose/install/
Phần 1: Cài đặt Open WebUI Siêu Nhẹ (Chỉ dùng API)
Trong hướng dẫn này, chúng ta sẽ sử dụng phiên bản “mini” của Open WebUI chỉ để tương tác với API. Điều này giúp tiết kiệm tài nguyên một cách đáng kể.
Bước 1: Tạo thư mục cấu hình cho Open WebUI
Tạo một thư mục trên máy chủ để lưu trữ file cấu hình của Open WebUI.
sudo mkdir /opt/open-webui
cd /opt/open-webui
Bước 2: Tạo file docker-compose.yml
Tạo file docker-compose.yml
trong thư mục /opt/open-webui
với nội dung sau:
version: '3.8'
services:
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
restart: unless-stopped
ports:
- "8080:8080" # Cổng nội bộ của container sẽ được map ra cổng 8080 trên host
volumes:
- open-webui-data:/app/backend/data # Lưu trữ dữ liệu của Open WebUI
environment:
# Nếu bạn chỉ muốn sử dụng API, hãy đặt biến này.
# Điều này sẽ vô hiệu hóa giao diện người dùng web mặc định và chỉ cho phép truy cập API.
USE_API_ONLY: "true"
# Đặt các biến môi trường khác nếu cần (ví dụ: kết nối đến Ollama, OpenAI, v.v.)
# OLLAMA_BASE_URL: "http://host.docker.internal:11434" # Ví dụ nếu Ollama chạy trên máy host
# OPENAI_API_KEY: "your_openai_api_key"
volumes:
open-webui-data:
Giải thích các phần quan trọng:
image: ghcr.io/open-webui/open-webui:main
: Sử dụng image chính thức của Open WebUI.container_name: open-webui
: Đặt tên cho container để dễ quản lý.restart: unless-stopped
: Đảm bảo container tự động khởi động lại nếu bị dừng (trừ khi bạn dừng nó thủ công).ports: - "8080:8080"
: Map cổng 8080 của máy host tới cổng 8080 của container. Chúng ta sẽ không truy cập trực tiếp cổng này sau khi cấu hình Nginx, nhưng nó cần thiết để Docker có thể chạy dịch vụ.volumes: - open-webui-data:/app/backend/data
: Tạo một volume Docker để lưu trữ dữ liệu của Open WebUI, đảm bảo dữ liệu không bị mất khi container được cập nhật hoặc xóa.environment: USE_API_ONLY: "true"
: Đây là phần quan trọng nhất để làm cho Open WebUI siêu nhẹ và chỉ sử dụng API. Khi biến này được đặt làtrue
, giao diện người dùng web mặc định sẽ bị vô hiệu hóa, chỉ cho phép truy cập các API endpoint.
Bước 3: Khởi chạy Open WebUI
Sử dụng Docker Compose để khởi chạy container Open WebUI.
sudo docker compose up -d
-d
: Chạy container ở chế độ detached (chạy nền).
Bước 4: Kiểm tra trạng thái container
Kiểm tra xem container có đang chạy không.
sudo docker ps
Bạn sẽ thấy một dòng có tên open-webui
với trạng thái Up ...
.
Bước 5: (Tùy chọn) Kiểm tra log
Nếu có vấn đề xảy ra, bạn có thể xem log của container.
sudo docker logs open-webui
Lúc này, Open WebUI đã được cài đặt và chạy. Tuy nhiên, bạn sẽ không truy cập được qua trình duyệt vì nó chỉ mở port API và giao diện web đã bị vô hiệu hóa.
Phần 2: Cài đặt Nginx Proxy Manager
Nginx Proxy Manager là một ứng dụng Docker giúp quản lý Nginx proxy và SSL một cách dễ dàng thông qua giao diện web.
Bước 1: Tạo thư mục cấu hình cho Nginx Proxy Manager
sudo mkdir /opt/nginx-proxy-manager
cd /opt/nginx-proxy-manager
Bước 2: Tạo file docker-compose.yml
cho Nginx Proxy Manager
Tạo file docker-compose.yml
trong thư mục /opt/nginx-proxy-manager
với nội dung sau:
version: '3.8'
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
container_name: nginx-proxy-manager
restart: unless-stopped
ports:
- '80:80' # HTTP
- '443:443' # HTTPS
- '81:81' # Admin Web UI
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
volumes:
data:
letsencrypt:
Giải thích các phần quan trọng:
image: 'jc21/nginx-proxy-manager:latest'
: Sử dụng image chính thức của Nginx Proxy Manager.container_name: nginx-proxy-manager
: Đặt tên cho container.restart: unless-stopped
: Tự động khởi động lại.ports
:80:80
: Map cổng HTTP của host ra cổng 80 của container.443:443
: Map cổng HTTPS của host ra cổng 443 của container.81:81
: Map cổng 81 của host ra cổng 81 của container. Cổng này là giao diện quản lý web của Nginx Proxy Manager.
volumes
:./data:/data
: Lưu trữ cấu hình và dữ liệu của Nginx Proxy Manager../letsencrypt:/etc/letsencrypt
: Lưu trữ chứng chỉ SSL Let’s Encrypt.
Bước 3: Khởi chạy Nginx Proxy Manager
sudo docker compose up -d
Bước 4: Kiểm tra trạng thái container Nginx Proxy Manager
sudo docker ps
Bạn sẽ thấy container nginx-proxy-manager
đang chạy.
Bước 5: Truy cập giao diện quản lý Nginx Proxy Manager
Mở trình duyệt và truy cập địa chỉ: http://your_server_ip:81
- Email:
admin@example.com
- Password:
changeme
Sau khi đăng nhập, bạn nên thay đổi mật khẩu mặc định để đảm bảo an toàn.
Phần 3: Cấu hình Nginx Proxy Manager để truy cập Open WebUI bằng Tên miền và SSL
Bây giờ, chúng ta sẽ cấu hình Nginx Proxy Manager để trỏ tên miền của bạn tới Open WebUI (chỉ API) và tự động cấp/gia hạn chứng chỉ SSL.
Bước 1: Cấu hình Hostname cho Open WebUI
Vì bạn đang sử dụng USE_API_ONLY: "true"
, Open WebUI sẽ không lắng nghe trên cổng 80 hoặc 443 của container. Thay vào đó, nó vẫn lắng nghe trên cổng 8080
bên trong container. Nginx Proxy Manager sẽ là dịch vụ duy nhất trực tiếp nhận request từ bên ngoài qua cổng 80/443 và chuyển tiếp chúng đến Open WebUI.
Quan trọng: Open WebUI ở chế độ USE_API_ONLY
không cung cấp giao diện web trực tiếp cho bạn. Bạn sẽ cần một ứng dụng client khác có thể giao tiếp với API của Open WebUI. Tuy nhiên, để hoàn thành cấu hình proxy, chúng ta vẫn cần một điểm đến. Trong ví dụ này, chúng ta sẽ giả định bạn có một ứng dụng client (ví dụ: một giao diện web đơn giản hoặc một script) lắng nghe trên cổng 8080
của container Open WebUI.
Tuy nhiên, để cấu hình proxy và SSL cho Nginx Proxy Manager, chúng ta sẽ chỉ định your_domain.com
(thay thế bằng tên miền thực của bạn) trỏ tới cổng 8080
của container Open WebUI.
Bước 2: Tạo Proxy Host trong Nginx Proxy Manager
- Truy cập giao diện quản lý Nginx Proxy Manager tại
http://your_server_ip:81
. - Vào mục Proxy Hosts -> Add Proxy Host.
- Details Tab:
- Domain Names: Nhập tên miền bạn muốn sử dụng để truy cập Open WebUI (ví dụ:
open-webui.your_domain.com
hoặcyour_domain.com
). - Scheme:
http
- Forward Hostname / IP: Nhập địa chỉ IP của Docker host của bạn. Vì Open WebUI đang chạy trong Docker trên cùng một máy, bạn có thể sử dụng
host.docker.internal
nếu Docker của bạn hỗ trợ, hoặc nhập địa chỉ IP nội bộ của máy chủ Docker. Cách an toàn và phổ biến nhất là sử dụng địa chỉ IP của máy chủ Docker. Ví dụ:192.168.1.100
(thay bằng IP thật của bạn). - Forward Port:
8080
(Cổng mà Open WebUI đang lắng nghe bên trong container của nó). - Block Common Exploits: Tick chọn (khuyến khích).
- Websockets Support: Tick chọn (quan trọng cho các ứng dụng web hiện đại).
- Domain Names: Nhập tên miền bạn muốn sử dụng để truy cập Open WebUI (ví dụ:
- SSL Tab:
- SSL Certificate: Chọn Request a new SSL Certificate.
- Force SSL: Tick chọn (rất khuyến khích).
- HTTP/2 Support: Tick chọn (khuyến khích).
- HSTS Enabled: Tick chọn (khuyến khích, nhưng hãy chắc chắn rằng bạn hiểu rõ tác động của nó).
- Nhấn Save.
Nginx Proxy Manager sẽ tự động cố gắng lấy chứng chỉ SSL từ Let’s Encrypt cho tên miền bạn đã cung cấp. Nếu quá trình này thành công, bạn sẽ thấy trạng thái SSL là “Valid”.
Bước 3: Kiểm tra truy cập
Sau khi cấu hình hoàn tất, hãy thử truy cập tên miền của bạn qua trình duyệt (ví dụ: https://open-webui.your_domain.com
).
Vì bạn đã cấu hình USE_API_ONLY: "true"
, bạn sẽ không thấy giao diện web của Open WebUI. Thay vào đó, bạn sẽ nhận được phản hồi từ API của nó.
Lưu ý quan trọng về USE_API_ONLY: "true"
:
Việc đặt USE_API_ONLY: "true"
vô hiệu hóa giao diện người dùng web mặc định của Open WebUI. Điều này có nghĩa là bạn không thể sử dụng trình duyệt để “chat” trực tiếp với Open WebUI thông qua giao diện mặc định của nó nữa. Mục đích của cài đặt này là để Open WebUI chỉ đóng vai trò là một backend API mà bạn có thể kết nối từ các ứng dụng khác (ví dụ: một ứng dụng React, một script Python sử dụng thư viện requests
, hoặc một giao diện người dùng web tùy chỉnh mà bạn tự xây dựng).
Nếu bạn muốn có một giao diện người dùng web có thể sử dụng được, bạn cần:
- Xóa hoặc bỏ comment biến
USE_API_ONLY: "true"
trong filedocker-compose.yml
của Open WebUI. - Chỉnh sửa cấu hình Proxy Host trong Nginx Proxy Manager:
- Forward Hostname / IP: Vẫn là địa chỉ IP của Docker host.
- Forward Port: Thay đổi thành
8080
(là cổng mặc định mà giao diện web của Open WebUI sẽ lắng nghe). - Đảm bảo Websockets Support được bật.
- Tắt Force SSL trong Nginx Proxy Manager nếu bạn đang gặp vấn đề ban đầu, sau đó bật lại khi mọi thứ hoạt động.
Tóm tắt lại cách truy cập (với USE_API_ONLY: "true"
)
Với cấu hình USE_API_ONLY: "true"
, bạn đã thiết lập Open WebUI chỉ để cung cấp API. Nginx Proxy Manager đã được cấu hình để đưa lưu lượng truy cập từ tên miền của bạn đến cổng 8080
của container Open WebUI.
- Truy cập API: Các ứng dụng hoặc script của bạn giờ đây có thể gửi yêu cầu HTTP đến
https://your_domain.com/api/v1/...
(tùy thuộc vào cấu trúc API của Open WebUI) để tương tác với mô hình ngôn ngữ. - Giao diện người dùng: Bạn sẽ cần một ứng dụng khách (client) riêng biệt để giao tiếp với API này và hiển thị kết quả. Open WebUI lúc này đóng vai trò là một “nền tảng AI” mà bạn có thể tích hợp vào các ứng dụng khác.
Nếu mục tiêu của bạn là có một giao diện chat web thông thường, thì hãy bỏ USE_API_ONLY: "true"
và cấu hình lại Proxy Host với Forward Port là 8080 (hoặc cổng mà Open WebUI chạy giao diện web mặc định).
Chúc bạn thành công!
Tác giả: Google Gemini 2.5