本地環境建構
整本教學的 Dify 都跑在本機——這一章就來看看引擎室裡發生了什麼:Docker 如何組裝出 Dify、怎麼安裝與升級、環境變數怎麼客製,最後用 Ollama 把「模型」也搬回自己的電腦,實現完全離線的 AI 環境。
本章目標
- 要學什麼
- 建構並理解 Dify 的本地環境
- 學會的技能
- Docker 安裝 Dify、內部容器結構、版本升級、環境變數客製化、Ollama 本地 LLM 串接
- 能做出什麼
- 資料完全不出門的封閉式 AI 環境、公司內部專用 AI 系統
10.1Docker 三分鐘理解
Dify 由十多個服務組成(網頁、API、資料庫、向量庫……),要是手動安裝會非常痛苦。Docker 把每個服務連同它需要的環境打包成獨立的「容器」——像一個個標準化的貨櫃;Docker Compose 則是碼頭調度表,一個指令把所有貨櫃按正確順序啟動、接好網路。
10.2安裝 Dify(我們這台機器就是這樣裝的)
- 安裝前提安裝 Docker Desktop(macOS/Windows)與 Git。
- 取得 Dify 原始碼
git clone https://github.com/langgenius/dify.git cd dify/docker
- 準備環境設定檔
cp .env.example .env
- 啟動!
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 章);② 備份
升級前務必:① 匯出重要應用的 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% 離線:
- 安裝 Ollama
brew install ollama # macOS(或到 ollama.com 下載安裝器) ollama serve # 啟動服務
- 下載模型
ollama pull qwen3:8b # 中文能力佳的開源模型 ollama pull nomic-embed-text # Embedding 模型——第 3 章高品質索引就靠它
8B 等級模型建議 16GB 以上記憶體。 - 讓 Docker 裡的 Dify 連得到 OllamaDify 在容器內,
localhost指的是容器自己。macOS/Windows 用特殊主機名:http://host.docker.internal:11434
- 在 Dify 註冊「集成 → 模型供應商 → 安裝模型提供程式」找到 Ollama(第 2 章圖 2-6 的清單裡就有它)→ 填模型名稱
qwen3:8b與上面的 Base URL → 儲存。Embedding 模型同法註冊nomic-embed-text。 - 切換使用「系統模型設定」把推理模型換成 Ollama 的模型、Embedding 設為
nomic-embed-text——回到第 3 章把知識庫升級成「高品質」索引,體驗完整的向量檢索。
重點
完全本地化後:文件不出門(知識庫在本機)、對話不出門(模型在本機)、日誌不出門(資料庫在本機)——處理機敏資料的終極安心配置。代價是模型能力低於頂級雲端模型,實務上常見「內部機敏流程用 Ollama、對品質要求高的用雲端 API」的混搭。
完全本地化後:文件不出門(知識庫在本機)、對話不出門(模型在本機)、日誌不出門(資料庫在本機)——處理機敏資料的終極安心配置。代價是模型能力低於頂級雲端模型,實務上常見「內部機敏流程用 Ollama、對品質要求高的用雲端 API」的混搭。
10.6本章回顧・全書終點
- Dify = 12 個 Docker 容器的協奏曲;
docker compose up -d一鍵啟動。 - 升級三步:down → pull → up;資料都在 volumes,記得備份。
.env的兩百多個變數控制一切客製化。- Ollama 補上最後一塊拼圖:模型也本地化,實現全封閉 AI 環境。
十章走完,你已經從「第一次打開 Dify」走到「能建聊天機器人、RAG、Agent、工作流、聊天流,能用 API 整合、能自己部署維運」。接下來的路:把你工作中真實的課題丟進來——課題驅動開發,正是第 1 章說的起點,也是精進的唯一捷徑。祝創造愉快!