Linux 伺服器

Ollama + Open WebUI 本地部署大模型:純 CPU 伺服器配置選擇、安裝、HTTPS 與 API 呼叫

7 個步驟 10 分鐘閱讀 32 次閱讀 0
本文目錄

不需要 GPU,也能在自己的伺服器上執行類似 ChatGPT 的私有 AI 助手。Ollama 可以下載並執行 Qwen、Llama、Gemma 等開放權重語言模型,並提供簡潔的 API;Open WebUI 則在此基礎上提供聊天介面,支援多使用者、對話歷史和文件上傳。由於一切都在你的伺服器上執行,提示詞和文件不會離開伺服器。本文介紹如何選擇伺服器配置、安裝 Ollama、挑選適合在 CPU 上執行的模型、配置 Open WebUI 與 HTTPS,以及在自己的應用中呼叫 API。

Ollama API 沒有任何身份驗證。切勿將 11434 埠暴露到公網;請讓它只監聽本機或位於防火牆之後,並且只通過 HTTPS 和帳號登入對外發布 Open WebUI。暴露在公網上的 Ollama 伺服器正遭到大量掃描和濫用。

步驟 1:選擇合適的伺服器配置

使用 CPU 推理時,記憶體大小決定能載入哪些模型,CPU 核心數量和速度決定回答的生成速度。量化模型(Ollama 預設的 Q4 版本)大致需要以下記憶體:

模型規模模型所需記憶體推薦伺服器配置典型用途
1–4B 引數約 1–3 GB4 核、8 GB 記憶體分類、簡短回答、測試
7–8B 引數約 5–6 GB8 核以上、16 GB 記憶體聊天助手、內容摘要、內部知識庫
14B 引數約 9–10 GB16 核以上、32 GB 記憶體推理和寫作能力更強,但在 CPU 上較慢

在現代多核 CPU 上,7–8B 模型每秒大約只能輸出幾個詞:供小團隊或後臺任務使用沒有問題,但無法支撐數百名使用者同時使用。如果使用量較大,請選擇核心數和記憶體更多的獨立伺服器,而不是小型 VPS,並避免在同一台機器上執行其他佔用大量記憶體的服務。

步驟 2:安裝 Ollama

curl -fsSL https://ollama.com/install.sh | sh

systemctl status ollama --no-pager
ollama --version
ss -lntp | grep 11434        # should show 127.0.0.1:11434

安裝程式會建立 ollama 系統使用者,以及一個監聽 127.0.0.1:11434 的 systemd 服務。模型儲存在 /usr/share/ollama/.ollama/models,請確保該磁碟有足夠空間(一個 7B 模型約 4–5 GB)。

步驟 3:下載並測試模型

# Strong multilingual model, good at Chinese and English
ollama pull qwen2.5:7b

# Smaller and faster alternative
ollama pull llama3.2:3b

ollama run qwen2.5:7b "Explain in three sentences what a reverse proxy is."
ollama list        # downloaded models
ollama ps          # loaded models and how much memory they use

可以在 ollama.com 的模型庫中瀏覽其他模型和規格。建議先從 3B 或 7B 模型開始,確認速度後,只有在回答質量不夠時再換更大的模型。

步驟 4:安裝 Open WebUI

Open WebUI 執行在 Docker 中(參見 Docker 安裝教程)。容器需要訪問宿主機上的 Ollama,因此要讓 Ollama 監聽所有網絡卡,同時確保防火牆阻止外部訪問 11434 埠。

# Let Ollama accept connections from Docker containers
mkdir -p /etc/systemd/system/ollama.service.d
cat > /etc/systemd/system/ollama.service.d/override.conf <<'EOF2'
[Service]
Environment="OLLAMA_HOST=0.0.0.0:11434"
EOF2
systemctl daemon-reload && systemctl restart ollama

# Allow Docker networks to reach Ollama, block everyone else (ufw: rules are matched in order)
ufw allow from 172.16.0.0/12 to any port 11434 proto tcp
ufw deny 11434/tcp
# firewalld: simply do not open 11434; Docker's own zone already lets containers reach the host

# Start Open WebUI, reachable only from the server itself until Nginx is in front
docker run -d --name open-webui --restart always \
  -p 127.0.0.1:3000:8080 \
  --add-host=host.docker.internal:host-gateway \
  -e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
  -v open-webui:/app/backend/data \
  ghcr.io/open-webui/open-webui:main

從另一台機器確認 http://YOUR_SERVER_IP:11434 無法訪問。如果能夠訪問,請先修復防火牆再繼續。

步驟 5:通過 HTTPS 釋出 Open WebUI

將 ai.example.com 這樣的子域名解析到伺服器,申請證書(參見使用 Certbot 或 acme.sh 申請免費 SSL 證書),然後反向代理到容器。Open WebUI 通過 WebSocket 流式輸出回答,因此需要保留 Upgrade 請求頭,並設定較長的讀取超時時間。

server {
    listen 443 ssl;
    http2 on;
    server_name ai.example.com;

    ssl_certificate     /etc/letsencrypt/live/ai.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/ai.example.com/privkey.pem;
    client_max_body_size 50m;      # document uploads

    location / {
        proxy_pass         http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection "upgrade";
        proxy_set_header   Host $host;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_read_timeout 600s;
    }
}

開啟網站並立即註冊第一個帳號,該帳號會成為管理員。然後在管理員設定中關閉新使用者註冊,或者設為需要管理員稽核,並由你親自為團隊成員建立帳號。

步驟 6:在應用中呼叫 API

Ollama 既提供原生 API,也提供 OpenAI 相容介面,因此很多工具和 SDK 只需修改 base URL 即可使用。可以在同一台伺服器上呼叫,也可以從你的其他伺服器通過內網或 SSH 隧道呼叫。

# Native API
curl http://127.0.0.1:11434/api/generate -d '{
  "model": "qwen2.5:7b",
  "prompt": "Write a short product description for a Tokyo VPS.",
  "stream": false
}'

# OpenAI-compatible API (base URL http://127.0.0.1:11434/v1, any API key)
curl http://127.0.0.1:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model":"qwen2.5:7b","messages":[{"role":"user","content":"Hello"}]}'

Dify、n8n 等工作流工具可以將 Ollama 作為模型提供方接入,參見 Dify、n8n 與 AI Agent 伺服器配置要求。

步驟 7:效能調優

  • 保持模型常駐記憶體:預設情況下,模型空閒 5 分鐘後會被解除安裝。在 override 檔案中設定 Environment="OLLAMA_KEEP_ALIVE=1h",可以避免首次回答過慢。
  • 並行請求:OLLAMA_NUM_PARALLEL=2 允許兩個請求共用一個已載入的模型;每增加一個並行槽位,都需要更多記憶體。
  • 上下文長度:處理長文件需要更大的上下文視窗,也會佔用更多記憶體。僅在需要時調大。
  • 預留空閒記憶體:一旦伺服器開始使用 swap,回答就會變得極慢。可以用 ollama ps 和 free -h 檢查。

常見問題

純 CPU 伺服器真的能用嗎?

能用。使用 3B–8B 模型做內部工具、文件問答、寫稿、翻譯和批次任務都沒有問題。如果有大量併發使用者或要執行更大的模型,則需要更多的 CPU 核心和記憶體,或者使用 GPU 硬體。

哪個模型的中文效果最好?

Qwen(通義千問)系列使用了大量中英文語料訓練,是很好的預設選擇。建議先試用 qwen2.5:7b,再用你自己的實際問題與其他模型進行對比。

資料會離開伺服器嗎?

不會。Ollama 和 Open WebUI 在本地處理提示詞和文件,只有下載模型和更新時才會訪問網際網路。

如果按以上步驟操作後問題仍未解決,請提交工單聯絡 IMIDC 7×24 技術支援,並附上伺服器 IP、系統版本、CPU 和記憶體配置、所用模型以及完整報錯資訊,方便工程師快速定位。

這篇文章有幫助嗎?

相關教程