# Open WebUI

> Cài Open WebUI từ Kho ứng dụng, tạo tài khoản admin, kết nối OpenAI, Anthropic hay nhà cung cấp API khác, quản lý người dùng và sao lưu hội thoại.

Source: https://zopanel.net/vi/docs/app-open-webui  
Updated: 2026-10-09

Open WebUI là giao diện chat AI tự host, kiểu ChatGPT. Ứng dụng có nhiều người dùng, lịch sử hội thoại, tải tài liệu lên, thiết lập riêng cho từng model và làm việc với mọi API tương thích OpenAI. Dùng Open WebUI khi bạn hoặc cả nhóm cần một ứng dụng chat riêng trên tên miền của mình, trả phí theo lượng dùng bằng API key riêng thay vì thuê bao theo đầu người. Open WebUI không tự chạy model; trên ZoPanel, ứng dụng kết nối tới nhà cung cấp model qua internet.

## Yêu cầu

| Mục | Giá trị |
| --- | --- |
| Image | `ghcr.io/open-webui/open-webui:0.11` |
| Giới hạn RAM | 2048 MB, 1 CPU. Hộp thoại cài cảnh báo ứng dụng cần khoảng 2 GB RAM trở lên. |
| Dung lượng trống để cài | khoảng 7,9 GB (image khoảng 4,7 GB) |
| Tên miền | tên miền hoặc subdomain đã trỏ về server, ví dụ `chat.example.com` |
| API key | của ít nhất một nhà cung cấp (OpenAI, Anthropic, DeepSeek, OpenRouter…). Bạn trả phí trực tiếp cho nhà cung cấp. |

Server phải có Docker (**Kho ứng dụng → Cài Docker**). Khách hàng cần gói hosting cho phép ứng dụng Docker và còn trống 2048 MB trong **RAM (MB)** cho ứng dụng; xem [Kho ứng dụng và lưu trữ S3](/vi/docs/apps).

## Cài đặt

1. Trỏ bản ghi A của tên miền về server.
2. Mở **Kho ứng dụng** và bấm **Cài đặt** trên thẻ **Open WebUI**.
3. Điền hộp thoại:

   | Trường | Nhập gì |
   | --- | --- |
   | **Tên miền** | ví dụ `chat.example.com`, không gồm `http://` |
   | **Chủ sở hữu** | Chỉ quản trị viên thấy: tài khoản hosting sở hữu ứng dụng |
   | **SSL miễn phí (Let's Encrypt)** | Giữ bật |

4. Bấm **Cài đặt** và theo dõi log tác vụ.

Không có trường nào cần điền thêm khi cài; API key được nhập bên trong Open WebUI. ZoPanel đặt sẵn:

| Biến | Giá trị |
| --- | --- |
| `WEBUI_URL` | `https://<tên miền>` |
| `WEBUI_SECRET_KEY` | khoá ngẫu nhiên ký phiên đăng nhập, nên phiên vẫn giữ sau khi khởi động lại hay cập nhật |
| `ENABLE_OLLAMA_API` | `false`: container không tới được Ollama chạy trên cùng server (xem mục Giới hạn mạng) |

Lần khởi động đầu mất từ một tới hai phút hoặc lâu hơn: Open WebUI chuẩn bị database và tải các model dùng cho tìm kiếm tài liệu. Trong lúc đó, website hiện trang "busy" và tự tải lại.

## Tạo tài khoản admin khi khoá thiết lập đang bật

Tài khoản đầu tiên tạo trong Open WebUI sẽ thành quản trị viên, nên ZoPanel giữ bản cài mới ở chế độ riêng tư. Khách truy cập thấy trang "This app is being set up".

1. Mở **Website**, chọn tên miền và vào tab **Docker**.
2. Khi trạng thái là `running`, bấm **Mở ứng dụng (chỉ mình tôi)**.
3. Bấm **Get started** và tạo tài khoản (tên, email, mật khẩu). Tài khoản này có vai trò **Admin**.
4. Cấu hình nhà cung cấp (mục tiếp theo) và chế độ đăng ký.
5. Quay lại tab **Docker**, bấm **Đã thiết lập xong — mở công khai**.

## Kết nối nhà cung cấp model

1. Trong Open WebUI, mở **Admin Panel → Settings → Connections**.
2. Ở mục **OpenAI API**, bấm **+** để thêm kết nối.
3. Nhập base URL và API key của nhà cung cấp, rồi lưu:

   | Nhà cung cấp | Base URL |
   | --- | --- |
   | OpenAI | `https://api.openai.com/v1` |
   | Anthropic (endpoint tương thích OpenAI) | `https://api.anthropic.com/v1` |
   | DeepSeek | `https://api.deepseek.com/v1` |
   | OpenRouter | `https://openrouter.ai/api/v1` |

4. Mở cuộc chat mới và chọn model trong danh sách. Nếu danh sách trống, kiểm tra lại key và URL.

Key được lưu trong database của Open WebUI trên server của bạn. Hãy đặt hạn mức chi tiêu ở trang quản lý của từng nhà cung cấp: hội thoại của mọi người dùng đều tính vào key của bạn.

Để giảm RAM và CPU, có thể để nhà cung cấp tạo embedding cho tài liệu thay vì model cục bộ: vào **Admin Panel → Settings → Documents**, đổi embedding engine sang nhà cung cấp tương thích OpenAI.

## Người dùng và đăng ký

- Việc cho đăng ký và vai trò mặc định của người mới nằm trong **Admin Panel → Settings → General**. Với vai trò mặc định **Pending**, tài khoản mới chưa chat được cho tới khi admin duyệt.
- Duyệt người dùng trong **Admin Panel → Users**: đổi vai trò từ **pending** sang **user** (hoặc **admin**).
- Muốn chỉ người được mời mới dùng, hãy tắt đăng ký và tự thêm người dùng trong **Admin Panel → Users**.
- **Groups** và quyền truy cập theo từng model quyết định ai thấy model nào.

Kiểm tra các thiết lập này trước khi mở công khai: cách Open WebUI xử lý đăng ký đã thay đổi qua các phiên bản.

## Dữ liệu nằm ở đâu

```text
/var/lib/zopanel-apps/<instance>/data/
```

`<instance>` là tên miền với dấu chấm thay bằng dấu gạch ngang (`chat.example.com` → `chat-example-com`). Thư mục được gắn vào `/app/backend/data` trong container, chứa database SQLite `webui.db` (người dùng, hội thoại, thiết lập, kết nối API), file đã tải lên, vector database cho tài liệu và cache model đã tải về. Chỉ root và container đọc được.

## Sao lưu

Sao lưu website của ZoPanel **không** gồm `/var/lib/zopanel-apps`; ứng dụng được sao lưu bằng thẻ **Sao lưu** trong tab **Docker** của website.

Để sao lưu Open WebUI, bấm **Sao lưu ngay** trong thẻ **Sao lưu** ở tab **Docker** của website. Quản trị viên còn đặt được **Lịch** (**Tắt**, **Mỗi ngày** hoặc **Mỗi tuần**; mặc định tắt) và số bản **Giữ lại** (1–60, mặc định 7), rồi bấm **Lưu**. Mỗi bản sao lưu nén `/var/lib/zopanel-apps/<instance>/` thành `/var/backups/zopanel-apps/<instance>/YYYYMMDD-HHMMSS.tar.gz`, trong thư mục chỉ root đọc được và không tính vào dung lượng đĩa của tài khoản. Container được tạm dừng (pause, không phải stop) trong vài giây sao chép, nên database SQLite nhất quán. Các bản cũ vượt quá số **Giữ lại** bị xoá, và khi một lần sao lưu theo lịch thất bại, quản trị viên nhận cảnh báo **Sao lưu thất bại**. File nén gồm cả `data/cache` chứa các model đã tải về, nên có thể khá lớn.

Để khôi phục, quản trị viên bấm **Khôi phục** cạnh một bản sao lưu. Open WebUI được dừng và dữ liệu được thay bằng nội dung file nén; dữ liệu hiện tại được giữ riêng tới khi ứng dụng khôi phục khởi động được, và được đặt lại nếu nó không khởi động. Mọi thay đổi sau thời điểm sao lưu sẽ mất. Mỗi bản sao lưu còn có nút xoá (chỉ quản trị viên), và xoá ứng dụng kèm file của nó cũng xoá luôn các bản sao lưu. Khách hàng có thể bấm **Sao lưu ngay** và xem danh sách; việc đặt lịch và khôi phục do nhà cung cấp thực hiện. Mỗi người dùng cũng có thể tự xuất hội thoại của mình trong **Settings → Chats**.

Các file nén vẫn ở trên cùng máy chủ. Hãy chép những bản quan trọng ra ngoài (ví dụ bằng `scp` hoặc `rclone` từ `/var/backups/zopanel-apps/<instance>/`) và lưu ở dạng mã hoá, vì chúng chứa API key của nhà cung cấp. Để khôi phục trên máy chủ khác, cài Open WebUI với cùng tên miền ở đó, chép file nén vào `/var/backups/zopanel-apps/<instance>/` trên máy chủ mới rồi bấm **Khôi phục** trong thẻ **Sao lưu** của nó.

## Cập nhật

Quản trị viên bấm **Cập nhật bản mới** ở tab **Docker**. ZoPanel kéo image `0.11` mới nhất, tạo lại container, giữ nguyên dữ liệu và secret key. Dòng phiên bản lớn hơn đến cùng các bản cập nhật ZoPanel. Open WebUI chuyển đổi database khi khởi động, nên hãy sao lưu trước (**Sao lưu ngay**); không thể hoàn tác cập nhật bằng cách kéo image cũ. Khách hàng nhờ nhà cung cấp cập nhật.

## Giới hạn mạng

Mỗi container bị chặn khỏi loopback (`127.0.0.1`) và mạng nội bộ của server, khỏi địa chỉ link-local và khỏi các container khác. Trên chính server, container chỉ tới được cổng 80, 443, 25, 465, 587 và DNS. Với Open WebUI:

- **Không dùng được Ollama trên cùng server**, dù qua `localhost`, bridge của Docker hay IP công khai của server (cổng 11434 bị đóng với container). Đó là lý do ZoPanel tắt Ollama API.
- Cũng không dùng được Ollama, vLLM hay server model khác trong mạng nội bộ (`10.x`, `172.16–31.x`, `192.168.x`, dải VPN).
- API công khai thì dùng được: OpenAI, Anthropic, DeepSeek, OpenRouter, Groq, Mistral, hoặc server model trên máy khác có địa chỉ công khai. Nếu tự chạy server model, hãy bảo vệ nó bằng API key hoặc reverse proxy trước khi mở ra internet.
- Tìm kiếm web, tải trang web và công cụ lấy dữ liệu từ URL chỉ tới được internet công khai.

## Xử lý sự cố

| Vấn đề | Cách xử lý |
| --- | --- |
| Ngay sau khi cài thấy "This website is very busy right now" | Ứng dụng vẫn đang khởi động. Chờ một hai phút, trang tự tải lại. |
| Khách truy cập thấy "This app is being set up" | Bấm **Đã thiết lập xong — mở công khai** ở tab **Docker**. |
| Danh sách model trống | Kiểm tra kết nối trong **Admin Panel → Settings → Connections** (base URL kết thúc bằng `/v1`, key hợp lệ, tài khoản còn tiền). |
| Kết nối tới `localhost`, `host.docker.internal` hay IP nội bộ thất bại | Bị chặn có chủ đích; hãy dùng endpoint công khai. |
| Người dùng mới thấy trạng thái "pending" | Duyệt họ trong **Admin Panel → Users**. |
| Tải file lớn lên bị lỗi | Request qua nginx bị giới hạn theo dung lượng upload của website (mặc định 256 MB). Tăng **Upload tối đa (MB)** trong tab **Công cụ** → **Dung lượng upload** của website. |
| `not enough disk space: this app needs about 7.9 GB free…` | Giải phóng dung lượng rồi cài lại. |
| `Open WebUI needs 2048 MB of memory; your plan has … MB…` | Nhờ nhà cung cấp tăng **RAM (MB)** hoặc gỡ bớt ứng dụng. |
| Container dừng hoặc khởi động lại khi tải nặng | Đã chạm giới hạn 2048 MB. Dùng nhà cung cấp cho embedding và tránh kho tài liệu cục bộ quá lớn. |

Xem **Log ứng dụng** ở tab **Docker** để đọc lỗi từ ứng dụng.

## Xem thêm

- [Từng ứng dụng dùng để làm gì](/vi/docs/app-catalog)
- [Kho ứng dụng và lưu trữ S3](/vi/docs/apps)
- [Flowise](/vi/docs/app-flowise)
- [OpenClaw](/vi/docs/app-openclaw)
- [Gói hosting và giới hạn](/vi/docs/packages-limits)
- Chính thức: [Tài liệu Open WebUI](https://docs.openwebui.com), [Anthropic: tương thích OpenAI SDK](https://docs.anthropic.com/en/api/openai-sdk)
