Ollama¶
Overview¶
Ollama 係一個開放原始碼嘅大型語言模型(LLM)執行工具,專為喺本地或自架伺服器上運行開放權重模型而設計。Oracle Cloud Free Tier 嘅 Ampere A1(ARM64)執行個體常見配置提供 4 OCPU 同 24GB RAM,足以運行 7B 至 13B 級別嘅模型。透過呢個 wiki 記載嘅 Docker Compose 架設,Ollama 會以容器形式運行,並由 Open WebUI 提供網頁介面。
呢個部署方案嘅重點係「自架、隱私保障、低成本」。因為 Ollama 完全喺自己控制嘅 Oracle Cloud 伺服器內執行,對話數據唔會離開自家網絡。配合 Cloudflare Tunnel,主機更可以完全唔開放任何對外 Port,大幅降低被掃描同攻擊嘅風險。
Architecture¶
整套服務由兩個容器組成:
- Ollama:負責模型推理,容器內部開放
11434Port,但冇映射去 Host。模型資料存放喺 Volumeollama_data,即使容器更新後,模型仍然保留。 - Open WebUI:提供視覺化對話介面,原身支援 ARM64。容器內部使用
8080Port,經OLLAMA_BASE_URL=http://ollama:11434連去 Ollama 容器。用戶資料存放喺 Volumeopen-webui_data。
兩個容器都連接喺自訂網絡 cf_network,並分配固定 IP:Ollama 係 172.21.0.29,Open WebUI 係 172.21.0.9。 Cloudflare Tunnel 可以直接經 Docker 網絡轉發流量到 Open WebUI 嘅 8080 Port,唔需要靠 Host Port Mapping。
Internet → Cloudflare Tunnel → http://172.21.0.9:8080 (Open WebUI) → http://ollama:11434 (Ollama)
Deployment¶
首先要有 Oracle Cloud Linux 執行個體,並安裝好 Docker Engine 同 Docker Compose Plugin。亦要預先建立 Cloudflare Tunnel,或者用同一網絡內另一個容器執行。
因為 compose 檔使用固定 IP,需要手動建立帶有 Subnet 嘅 Docker 網絡:
docker network create --driver bridge --subnet 172.21.0.0/24 cf_network
然後建立 docker-compose.yml。以下係本部署採用嘅重點設定:
version: '3.8'
services:
# Ollama 推理引擎 (原生支援 ARM64)
ollama:
image: ollama/ollama:latest
container_name: ollama
restart: unless-stopped
volumes:
# 持久化模型資料,避免 Watchtower 更新時遺失
- ollama_data:/root/.ollama
networks:
cf_network:
ipv4_address: 172.21.0.29
# 安全守則:不映射 Host Port
# ports:
# - "11434:11434"
environment:
- OLLAMA_NUM_PARALLEL=1 # 限制並發處理請求數為 1
- OLLAMA_MAX_LOADED_MODELS=1 # 限制最多同時載入 1 個模型
deploy:
resources:
limits:
memory: 12G
# Open WebUI 視覺化對話介面 (原生支援 ARM64)
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: open-webui
restart: unless-stopped
environment:
# 指向同一網域內的 Ollama 容器
- OLLAMA_BASE_URL=http://ollama:11434
# 關閉註冊功能,提升安全性
- ENABLE_SIGNUP=False
volumes:
- open-webui_data:/app/backend/data
networks:
cf_network:
ipv4_address: 172.21.0.9
# 安全守則:不映射 Host Port,由 Cloudflare Tunnel 反代至容器內部 8080
# ports:
# - "8080:8080"
volumes:
ollama_data:
open-webui_data:
networks:
# 連接現有的 Cloudflare Tunnel 網路
cf_network:
external: true
啟動服務:
docker compose up -d
之後喺 Cloudflare Tunnel 後端加入:
http://172.21.0.9:8080
就可以透過網域訪問 Open WebUI。
Configuration¶
OLLAMA_NUM_PARALLEL=1 同 OLLAMA_MAX_LOADED_MODELS=1 係兩個重要環境變數。 Oracle Cloud 免費方案雖然有 24GB RAM,但唔係無限資源。限制並發請求數量同模型載入數量,可以避免 Ollama 因為記憶體耗盡而被 OOM Killer 終止。
deploy.resources.limits.memory: 12G 係另外一層保護。即使模型突然佔用大量記憶體,Docker 都會強制限制喺 12GB 以內,留低資源俾 Open WebUI 同系統運作。
ENABLE_SIGNUP=False 確保 Open WebUI 唔會開放公開註冊。只有管理員帳號或者經 Cloudflare Access 控制嘅用戶先可以使用。若果需要高安全性,可以將 Cloudflare Access 做埋 SSO 認證。
Volume 設定同樣重要。 ollama_data 保存模型檔案;open-webui_data 保存聊天記錄、用戶設定同管道資料。就算容器被 Watchtower 更新,資料都唔會遺失。
Operations¶
日常操作可以用以下指令:
# 查看日誌
docker compose logs -f ollama
docker compose logs -f open-webui
# 進入 Ollama 容器
docker exec -it ollama bash
# 下載模型
docker exec -it ollama ollama pull llama3.1
# 列出已下載模型
docker exec -it ollama ollama list
# 刪除模型
docker exec -it ollama ollama rm llama3.1
如果使用 Watchtower 自動更新,建議同時監察 docker stats 同日誌。更新後若發現記憶體使用異常,可以手動 docker compose restart ollama。
備份方面,可以備份整個 Volume:
docker run --rm -v ollama_data:/data -v $(pwd):/backup alpine tar czf /backup/ollama_data.tar.gz -C /data .
同樣方式可以備份 open-webui_data。還原時只要解壓返去 Volume 目錄再重啟容器即可。
FAQ¶
點解唔映射 Host Port?
呢個係安全設計。既然 Cloudflare Tunnel 可以直接連到容器內部 8080 或 11434,Host 就無需要開放任何 Port,減少被網絡掃描工具發現嘅機會。
Open WebUI 連唔到 Ollama?
檢查兩個容器係咪喺同一 Docker Network,以及 OLLAMA_BASE_URL 是否正確。可以試下 docker exec -it open-webui curl http://ollama:11434。另外要確認 Ollama 容器已經成功啟動。
Oracle Cloud 免費機夠唔夠力?
夠用,但要揀啱模型。7B 至 13B 模型配合 OLLAMA_NUM_PARALLEL=1 同 12G 記憶體限制,喺 Ampere ARM64 上可以流暢運行。較大規模模型例如 34B 或以上,可能需要更高配置。
點解要用兩個容器?
Ollama 本質上係 API 引擎,直接操作冇網頁介面。Open WebUI 負責提供使用者友善介面,同時可以集中管理聊天歷史。兩者分離,日後亦可以將 Ollama API 接去其他工具,例如 LiteLLM。
Related Links¶
- docker
- litellm
- Open WebUI
- cloudflare-tunnel
- oracle-cloud
- Self-Hosted LLM
Source¶
Coverage auto (container scan)