第 10 章

本地環境建構

整本教學的 Dify 都跑在本機——這一章就來看看引擎室裡發生了什麼:Docker 如何組裝出 Dify、怎麼安裝與升級、環境變數怎麼客製,最後用 Ollama 把「模型」也搬回自己的電腦,實現完全離線的 AI 環境。

本章目標

要學什麼
建構並理解 Dify 的本地環境
學會的技能
Docker 安裝 Dify、內部容器結構、版本升級、環境變數客製化、Ollama 本地 LLM 串接
能做出什麼
資料完全不出門的封閉式 AI 環境、公司內部專用 AI 系統

10.1Docker 三分鐘理解

Dify 由十多個服務組成(網頁、API、資料庫、向量庫……),要是手動安裝會非常痛苦。Docker 把每個服務連同它需要的環境打包成獨立的「容器」——像一個個標準化的貨櫃;Docker Compose 則是碼頭調度表,一個指令把所有貨櫃按正確順序啟動、接好網路。

10.2安裝 Dify(我們這台機器就是這樣裝的)

  1. 安裝前提安裝 Docker Desktop(macOS/Windows)與 Git。
  2. 取得 Dify 原始碼
    git clone https://github.com/langgenius/dify.git
    cd dify/docker
  3. 準備環境設定檔
    cp .env.example .env
  4. 啟動!
    docker compose up -d
    第一次會下載映像檔(數 GB,視網速幾分鐘到幾十分鐘)。完成後打開 http://localhost/install,就是第 2 章的起點。

10.3內部結構:12 個容器各司其職

docker ps 看看我們這台機器上實際運行的容器(Dify 1.15.0):

NAMES                    IMAGE                                       STATUS
docker-nginx-1           nginx:latest                                Up 3 hours
docker-worker-1          langgenius/dify-api:1.15.0                  Up 2 hours
docker-api_websocket-1   langgenius/dify-api:1.15.0                  Up 3 hours
docker-worker_beat-1     langgenius/dify-api:1.15.0                  Up 3 hours
docker-api-1             langgenius/dify-api:1.15.0                  Up (healthy)
docker-plugin_daemon-1   langgenius/dify-plugin-daemon:0.6.3-local   Up 3 hours
docker-db_postgres-1     postgres:15-alpine                          Up (healthy)
docker-redis-1           redis:6-alpine                              Up (healthy)
docker-sandbox-1         langgenius/dify-sandbox:0.2.15              Up (healthy)
docker-web-1             langgenius/dify-web:1.15.0                  Up 3 hours
docker-weaviate-1        semitechnologies/weaviate:1.27.0            Up 3 hours
docker-ssrf_proxy-1      ubuntu/squid:latest                         Up 3 hours
容器角色對應章節
nginx大門:所有 http://localhost 的請求先到這裡再轉發
web你看到的整個網頁介面全部
api / api_websocket核心後端:應用邏輯、API 端點第 9 章的 API 就是它處理的
worker / worker_beat背景工人:文件索引、批次任務、排程第 3 章的文件處理、第 5 章的批次執行
db_postgres主資料庫:應用、對話、日誌全存這
redis快取與任務佇列
weaviate向量資料庫:知識庫的向量索引第 3 章
sandbox程式碼沙箱:安全執行 Code 節點的 Python/JS第 6 章捌之型
plugin_daemon插件守護程序:模型供應商與工具插件的運行環境第 2、4 章裝的插件都住這
ssrf_proxy安全代理:HTTP 節點的對外請求經它過濾第 6 章的天氣 API 請求

10.3.1版本升級

cd dify/docker
docker compose down        # 停止(資料保留在 volumes,不會消失)
git pull origin main       # 更新原始碼
cp .env.example .env.new   # 比對新增的環境變數後合併回 .env
docker compose pull        # 拉新映像
docker compose up -d       # 重新啟動
注意
升級前務必:① 匯出重要應用的 DSL(第 5 章);② 備份 docker/volumes 目錄(所有資料的家)。跨大版本升級先讀官方 Release Notes。

10.4環境變數:Dify 的兩百多個旋鈕

設定檔 docker/.env 控制一切——我們這台機器的 .env 就有 224 個設定項。常用的幾類:

變數作用
EXPOSE_NGINX_PORT對外埠號(預設 80,被占用就改它)
SECRET_KEY加密金鑰,正式環境務必換成隨機值
UPLOAD_FILE_SIZE_LIMIT上傳檔案大小上限(知識庫大檔案要調)
VECTOR_STORE向量庫選擇(weaviate/qdrant/milvus…)
MAIL_TYPE寄信設定(邀請成員、重設密碼用)

修改後執行 docker compose down && docker compose up -d 生效。原則:只改你理解的項目,改前備份 .env

10.5Ollama:連模型都在自己電腦上

到目前為止,只有「模型」這一環還在雲端(Claude API)。Ollama 讓你在本機跑開源模型,實現 100% 離線:

  1. 安裝 Ollama
    brew install ollama        # macOS(或到 ollama.com 下載安裝器)
    ollama serve               # 啟動服務
  2. 下載模型
    ollama pull qwen3:8b           # 中文能力佳的開源模型
    ollama pull nomic-embed-text   # Embedding 模型——第 3 章高品質索引就靠它
    8B 等級模型建議 16GB 以上記憶體。
  3. 讓 Docker 裡的 Dify 連得到 OllamaDify 在容器內,localhost 指的是容器自己。macOS/Windows 用特殊主機名:
    http://host.docker.internal:11434
  4. 在 Dify 註冊「集成 → 模型供應商 → 安裝模型提供程式」找到 Ollama(第 2 章圖 2-6 的清單裡就有它)→ 填模型名稱 qwen3:8b 與上面的 Base URL → 儲存。Embedding 模型同法註冊 nomic-embed-text
  5. 切換使用「系統模型設定」把推理模型換成 Ollama 的模型、Embedding 設為 nomic-embed-text——回到第 3 章把知識庫升級成「高品質」索引,體驗完整的向量檢索。
重點
完全本地化後:文件不出門(知識庫在本機)、對話不出門(模型在本機)、日誌不出門(資料庫在本機)——處理機敏資料的終極安心配置。代價是模型能力低於頂級雲端模型,實務上常見「內部機敏流程用 Ollama、對品質要求高的用雲端 API」的混搭。

10.6本章回顧・全書終點

十章走完,你已經從「第一次打開 Dify」走到「能建聊天機器人、RAG、Agent、工作流、聊天流,能用 API 整合、能自己部署維運」。接下來的路:把你工作中真實的課題丟進來——課題驅動開發,正是第 1 章說的起點,也是精進的唯一捷徑。祝創造愉快!