最近在研究提供給內網使用的LLM,因為已經在本機玩過Ollama還蠻容易上手,量化模型也做得不錯(沒有GPU也可以跑Gemma1B,但記憶體要夠大)。

可惜Ollama預設只有提供CLI可以操作,沒有其他介面,但還好Ollama也有提供API存取(http://xxx:11434)。也就是說可以自行實作前端介面(我一開始也是這樣想)來串接ollama API,但考慮到時間和人力成本,很快就轉換方向搜尋合適的前端框架可以快速串接Ollama。

果不其然! 很快就找到Open WebUI,有以下幾個優點
1.介面和ChatGPT相當類似,使用者容易上手
2.串接本地端Ollama相當簡單,只要指定後端Ollama的URL和PORT,一行整合!
3.預設提供帳號管理,模型管理
4.其他好用功能!

基本架構大致完成,後端LLM框架為Ollama,前端網頁框架為Open WebUI,兩者透過預設的Web API來串接,為了達到在不同主機上遷移以及日後擴充的需求,兩者皆以Docker Compose來部署。

為了方便部署和PoC,先把前後端都架設在同一台筆電(ThinkPad L14 Gen 4),64G記憶體,無GPU。因為前後端是透過web api串接,日後要更換或擴充都容易進行。

筆電系統環境是Ubuntu 22.04,主機ip為192.168.2.159,已安裝Docker / Docker compose

透過docker安裝後端框架Ollama

1.先在家目錄建立ollama資料夾(~/ollama)方便管理相關檔案

2.在~/ollama資料夾建立docker-compose.yml,如下

services:
ollama:
image: ollama/ollama:latest
container_name: ollama
restart: unless-stopped
ports:
- "11434:11434"
volumes:
- ollama-data:/root/.ollama

volumes:
ollama-data:


3.啟動ollama,在~/ollama目錄中輸入
docker compose up -d

4.完成啟動之後就能下載想要測試的模型到本地端,ollama models提供模型清單可以使用,這裡以gemma3:1b做為範例來下載模型,輸入
docker compose exec ollama ollama pull gemma3:1b

5.下載完成後輸入以下指令透過CLI來互動
docker compose exec ollama ollama run gemma3:1b

6.最後開啟瀏覽器輸入http://192.168.2.159:11434,看到 Ollama is running 就代表可以透過Web API提供服務了。

透過Docker安裝前端框架Open WebUI

1.先在家目錄建立open-webui資料夾(~/open-webui)方便管理

2.在~/open-webui資料夾建立docker-compose.yml,如下

services:
openwebui:
image: ghcr.io/open-webui/open-webui:main
ports:
- "3000:8080" #對外介面為3000 Port
environment:
- OLLAMA_BASE_URL=http://192.168.2.159:11434 # 指向 Ollama api
- WEBUI_AUTH=Ture # (選用) 單一用戶模式,關閉多帳號驗證
volumes:
- openwebui-data:/app/backend/data # 資料持久化
restart: unless-stopped
volumes:
openwebui-data:


3.啟動Open-webui,在~/open-webui目錄中輸入
docker compose up -d

4.啟動完成後打開瀏覽器輸入http://192.168.2.159:3000,就能看到Open-webui的首頁

可以看到上方有個gemm3:1b模型,這就是從後端Ollama下載的模型,對後端模型的變更都會更新到Open-WebUI 介面。

因為在docker-compose.yml已把帳號驗證關閉,所以現在進入網頁的使用者都是admin,可以先啟用帳號驗證避免不需要的麻煩,修改open-webui的docker-compose.yml(第一位登入的使用者就是admin)

    environment:
# 允許使用者自行註冊(官方變數名稱)
- ENABLE_SIGNUP=True
# 顯示登入表單(可選,預設 True)
- ENABLE_LOGIN_FORM=True
# 新帳號預設為 Pending,需管理員核准
- DEFAULT_USER_ROLE=pending
- OLLAMA_BASE_URL=http://192.168.2.159:11434
# 啟用認證
- WEBUI_AUTH=True
#- WEBUI_SIGNUP_ENABLED=True # (可選) 允許使用者自行註冊


完成後記得停止Open-WebUI(docker compose down),再啟動Open-WebUI(docker compose up -d)
(如果發現admin無法正常登入,就先刪掉volumes再重新啟動看看)

第一位使用者(admin)登入完成之後,後續使用者都必須先申請帳號並核准後才能登入使用。

當然Open-WebUI還有許多功能,比如說RAG,網路搜尋,模型管理等等,後續再更新吧