Mac 自架本地 AI:Ollama + Open WebUI 完整教學
本篇將介紹如何在 Mac 上打造一套完整、穩定、且易於維護的「本地 AI 推論環境」。
整個本地 AI 環境可以理解為由三個部分組成
- 模型運行引擎(Ollama)
- 負責真正執行模型推論,包括 GPT-OSS、Llama 和 DeepSeek 等重量級模型
- Ollama 對外提供一組 HTTP API(預設
http://localhost:11434),任何應用程式都能透過這個 API 呼叫模型。
- 使用者操作介面(Open WebUI)
- 這是用來與模型互動的網頁 UI
- 所有聊天、上傳檔案、切換模型、多使用者與 Workflow 等功能都由 Open WebUI 提供
- 網路連接層(API Bridge)
- Open WebUI 會透過環境變數
OLLAMA_BASE_URL去連接 Ollama 的 API。也就是說- 模型運算 → 在 Ollama 執行
- UI 操作 → 在 Open WebUI 顯示
- 兩者透過 API 連線 → 形成完整系統
- Open WebUI 會透過環境變數
如果你需要從外部連線到本地 AI,也可加入 Cloudflare Tunnel,外部使用者可透過 HTTPS 安全連線,而不需要暴露本地端 Port。
架構圖
基本架構(Ollama + Open WebUI)
完整架構(加入 Cloudflare Tunnel)
接下來將逐步帶你完成整個環境的建置。
安裝步驟
安裝 Homebrew
如果你尚未安裝 Homebrew,執行
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"安裝並啟動 Ollama(本地模型引擎)
使用 Homebrew 安裝
brew install ollama啟動背景服務
brew services start ollama查看狀態
brew services list安裝模型
建議先安裝常用模型
ollama pull gpt-oss:20b查看已安裝模型
ollama list安裝 Docker
至 Docker 官網安裝 Docker Desktop (opens in a new tab)
使用 Docker 安裝 Open WebUI
執行以下指令以 port 8787 啟動
docker run -d \
-p 8787:8080 \
-e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
-v openwebui:/app/backend/data \
--restart=always \
--name openwebui \
ghcr.io/open-webui/open-webui:main開啟網頁
http://localhost:8787安裝 Cloudflare Tunnel
透過 Homebrew 安裝 cloudflared
brew install cloudflared登入 Cloudflare
cloudflared login建立 Tunnel
執行
cloudflared tunnel create openwebuiCloudflare 會產生一個 tunnel-id.json
~/.cloudflared/<tunnel-id>.json將網域綁定至 Tunnel
例如 ai.jacksu.tw
cloudflared tunnel route dns openwebui ai.jacksu.tw建立 cloudflared 設定檔
建立
nano ~/.cloudflared/config.yml加入
tunnel: <你的-tunnel-id>
credentials-file: /Users/jack/.cloudflared/<tunnel-id>.json
ingress:
- hostname: ai.jacksu.tw
service: http://localhost:8787
- service: http_status:404建立 LaunchAgent 讓 Cloudflare Tunnel 背景執行
建立 .plist
nano ~/Library/LaunchAgents/com.jacksu.cloudflared.openwebui.plist加入
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.jacksu.cloudflared.openwebui</string>
<key>ProgramArguments</key>
<array>
<string>/opt/homebrew/bin/cloudflared</string>
<string>tunnel</string>
<string>run</string>
<string>openwebui</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>KeepAlive</key>
<true/>
<key>StandardOutPath</key>
<string>/Users/jack/Library/Logs/cloudflared-openwebui.log</string>
<key>StandardErrorPath</key>
<string>/Users/jack/Library/Logs/cloudflared-openwebui.log</string>
</dict>
</plist>啟動 LaunchAgent
啟動後就會自動背景運作
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.jacksu.cloudflared.openwebui.plist查看狀態
launchctl list | grep cloudflared完成
完成後,你就擁有一套完整的本地 AI 環境
- 本地模型引擎(Ollama)
- 完整 WebUI(Docker)
- 永遠運作的 Cloudflare Tunnel
- 能從外網使用的 自架 AI 平台 (opens in a new tab)