項目地址:GitHub - open-webui/open-webui: User-friendly AI Interface (Supports Ollama, OpenAI API, ...)
選擇了docker部署
如果 Ollama 在您的計算機上,請使用以下命令
docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
參數詳解
1.?-d
- 含義:此參數表示以 “分離”(detached)模式運行容器。即容器在后臺運行,不會將容器的標準輸出和錯誤輸出直接顯示在終端中。
- 作用:使得用戶在啟動容器后可以繼續在當前終端執行其他命令,而無需等待容器運行結束。
2.?-p 3000:8080
- 含義:該參數用于進行端口映射,格式為?
主機端口:容器端口
。這里將主機的?3000
?端口映射到容器內部的?8080
?端口。 - 作用:外部客戶端可以通過訪問主機的?
3000
?端口來間接訪問容器內部運行在?8080
?端口上的服務。
3.?--add-host=host.docker.internal:host-gateway
- 含義:向容器的?
/etc/hosts
?文件中添加一條主機記錄。host.docker.internal
?是一個自定義的主機名,host-gateway
?代表 Docker 主機的 IP 地址。 - 作用:在容器內部,當使用?
host.docker.internal
?這個主機名時,會解析到 Docker 主機的 IP 地址,方便容器與主機進行通信。
4.?-v open-webui:/app/backend/data
- 含義:此為掛載卷(volume)的操作。
open-webui
?是一個 Docker 卷的名稱,/app/backend/data
?是容器內部的目標路徑。 - 作用:將名為?
open-webui
?的 Docker 卷掛載到容器內的?/app/backend/data
?目錄。這樣容器內該目錄的數據會被存儲在 Docker 卷中,實現數據的持久化,即使容器被刪除,數據也不會丟失。
5.?--name open-webui
- 含義:為新創建的容器指定一個名稱,這里將容器命名為?
open-webui
。 - 作用:方便后續對容器進行管理和操作,例如使用?
docker stop open-webui
?可以停止該容器,使用?docker logs open-webui
?可以查看容器的日志。
6.?--restart always
- 含義:設置容器的重啟策略為?
always
。即無論容器因何種原因停止(如正常退出、異常崩潰等),Docker 都會自動嘗試重新啟動該容器。 - 作用:確保容器在各種情況下都能保持運行狀態,提高服務的可用性。
7.?ghcr.io/open-webui/open-webui:main
- 含義:指定要使用的 Docker 鏡像。
ghcr.io
?是 GitHub Container Registry 的域名,open-webui/open-webui
?是鏡像的名稱,main
?是鏡像的標簽。 - 作用:從 GitHub Container Registry 拉取?
open-webui/open-webui
?鏡像的?main
?版本,并基于該鏡像創建并啟動容器。
如果 Ollama 位于其他服務器上,請使用以下命令:
要連接到另一臺服務器上的 Ollama,請將 更改為服務器的 URL:OLLAMA_BASE_URL
docker run -d -p 3000:8080 -e OLLAMA_BASE_URL=https://example.com -v open-webui:/app/backend/data --name open-webui --restart always ghcr.io/open-webui/open-webui:main
部署完成后可直接訪問 ip+3000端口
解決訪問過程中的一些問題
首次加載緩慢白屏等問題
問題原因 接口?api/models 調用加載模型列表緩慢,訪問了默認配置的地址不斷的嘗試最后失敗了
進入管理員面板
OpenAI API默認?chart gpt的訪問鏈接 刪除掉
Ollama API默認鏈接 刪除掉
再次訪問就快很多了,要注意如果配置了一個校驗鏈接不通的地址又會出現這個情況
配置nginx方向代理后,頁面靜態資源訪問404、WebSocket后端服務器鏈接失敗問題
基于寶塔面板的配置
server
{listen 80;server_name chart.xxx.com;index index.php index.html index.htm default.php default.htm default.html;root /www/wwwroot/chart.xxx.com;#ERROR-PAGE-START 錯誤頁配置,可以注釋、刪除或修改error_page 404 /404.html;#反向代理到open webuilocation / {proxy_pass http://127.0.0.1:3000;}#需要配置開啟代理到WebSocket后端服務器 不然訪問時候WebSocket鏈接失敗location /ws {# 允許客戶端發起跨域請求add_header 'Access-Control-Allow-Origin' '*';add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';# 代理到WebSocket后端服務器proxy_pass http://127.0.0.1:3000;# 啟用WebSocket支持proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "Upgrade";proxy_set_header Host $host;# 可選:設置代理超時時間proxy_read_timeout 86400;}#禁止訪問的文件或目錄location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md){return 404;}#如果存在靜態資源訪問配置 緩存啥的#需要配置代理到內部的open webui 服務 不然訪問404location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${proxy_pass http://127.0.0.1:3000;expires 30d; #這是一個用于設置緩存過期時間的指令error_log /dev/null;access_log /dev/null;}#如果存在靜態資源訪問配置緩存#需要配置代理到內部的open webui 服務 不然訪問404location ~ .*\.(js|css)?${proxy_pass http://127.0.0.1:3000;expires 12h; #這是一個用于設置緩存過期時間的指令error_log /dev/null;access_log /dev/null;}
}