Blog
⚙️ Environment
Mac 自架本地 AI:Ollama + Open WebUI 完整教學

Mac 自架本地 AI:Ollama + Open WebUI 完整教學

本篇將介紹如何在 Mac 上打造一套完整、穩定、且易於維護的「本地 AI 推論環境」。

整個本地 AI 環境可以理解為由三個部分組成

  1. 模型運行引擎(Ollama)
    • 負責真正執行模型推論,包括 GPT-OSS、Llama 和 DeepSeek 等重量級模型
    • Ollama 對外提供一組 HTTP API(預設 http://localhost:11434),任何應用程式都能透過這個 API 呼叫模型。
  2. 使用者操作介面(Open WebUI)
    • 這是用來與模型互動的網頁 UI
    • 所有聊天、上傳檔案、切換模型、多使用者與 Workflow 等功能都由 Open WebUI 提供
  3. 網路連接層(API Bridge)
    • Open WebUI 會透過環境變數 OLLAMA_BASE_URL 去連接 Ollama 的 API。也就是說
      • 模型運算 → 在 Ollama 執行
      • UI 操作 → 在 Open WebUI 顯示
      • 兩者透過 API 連線 → 形成完整系統

如果你需要從外部連線到本地 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 openwebui

Cloudflare 會產生一個 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 環境

© 2025 Chia-Yu Su All rights reserved.