SSD Nodes Learn Hosting plans →
指南 Matt Connor作者: Matt Connor · 已更新 2026-08-30

VPS 用 Docker Compose 自架 Dify 完整教學

Dify 會啟動 6 個容器,建議準備 4 GB RAM。啟動前替換 .env 內每個 secret,並先到 /install 建立管理員帳號,避免遭他人搶先設定。

Dify 是什麼,以及你即將執行的內容

Dify 是可自行代管的平台,用於建置以大型語言模型為基礎的應用程式。你會取得用於設計聊天應用程式、代理程式與檢索管線的 Web 介面、可從自有程式碼呼叫這些功能的 API,以及集中管理提示、資料集和模型金鑰的位置。小型團隊可以使用這類工具,讓所有人建立在同一個共用的私有基礎上,而不是把 API 金鑰分散在各個指令碼中。如果你仍不熟悉 agent、tool call 和 retrieval pipeline 等術語,先從頭理解這些概念,會讓 Dify 的建置介面看起來像熟悉的控制項,而不是一整面沒有標示的開關。

自行執行 Dify 代表需要執行多個元件。Dify 以一組 Docker 容器提供:API server、background worker、Web frontend、Postgres 資料庫、Redis 快取和向量資料庫,並透過 Docker Compose 串接。這比單一二進位檔複雜,但 Compose 會處理元件之間的連線;只要 VPS 還有數 GB 的可用 RAM,通常就能順暢執行。如果該 VPS 還要執行其他服務,應依實測數據規劃規模,而不是依照宣稱的數據,因為PhotoPrism 和 Immich 的實際 RAM 下限遠高於其公布的最低需求,而共用同一台主機的相片伺服器會先耗盡 Dify 的資料庫和向量儲存空間。CPU 競爭也會造成相同問題:將 Jellyfin 媒體庫重新設計成 90 年代錄影店在只瀏覽封面時幾乎不需要資源,但有人開始進行轉碼後,Dify 的 worker 就會排在其後等待。Dify 的容器數量不會因你在平台上建置的應用程式數量而增加,這種成本成長方式比OpenBot 中每個 AI 協作者都有自己的容器和瀏覽器更平緩,而且每增加一名協作者,記憶體下限都會再次上升。

由於 Dify 會保存你的模型 API 金鑰,以及你為檢索功能載入的私有文件,因此從啟用服務的第一刻起,就應將執行 Dify 的主機視為敏感系統。本指南會先安裝 Dify,再依照處理機密資訊的服務所需方式強化其安全性。

必要條件

您需要一台執行 Ubuntu 24.04 且已安裝 Docker 與 Docker Compose plugin 的 VPS,並使用具備 sudo 權限的使用者,或屬於 docker 群組的使用者。如果您不熟悉 Docker,VPS 上 Docker Compose 的基本操作涵蓋本指南所需的安裝方式與核心指令。建議準備一個已指向該伺服器的網域名稱,因為 Dify 前端應使用 TLS,而不是直接使用裸 IP 位址。

步驟 1:取得 Dify 及其 Compose 檔案

Dify 將 Docker 設定放在主儲存庫中。複製儲存庫,然後進入 docker 目錄:

git clone https://github.com/langgenius/dify.git
cd dify/docker
cp .env.example .env

.env 檔案包含完整設定。開始任何操作前,先閱讀此檔案。首先應處理的是密碼與 secret 設定,包括 SECRET_KEY、Postgres 密碼及 Redis 密碼。範例檔案使用預留值;保留這些預設值,是自架 Dify 遭到入侵最常見的原因。請產生真正的 secret key:

openssl rand -base64 42

將產生的值貼到 SECRET_KEY,並為檔案中的每個密碼欄位設定強度足夠且唯一的值。

步驟 2:啟動

啟動整個堆疊:

docker compose up -d

第一次執行會拉取數個映像檔並初始化資料庫,因此請等待約 1 分鐘。確認容器狀態正常:

docker compose ps

每個服務都應讀取 running。Dify 預設會透過隨附的 nginx 容器,在連接埠 80 提供 Web 介面。第一次造訪 http://YOUR_SERVER/install 時,請建立管理員帳戶。請立即完成此操作,避免其他人先連線到該連接埠。管理員帳戶建立前,任何載入該頁面的人都能註冊該帳戶並取得執行個體的控制權。

步驟 3:不要直接暴露服務。先配置 TLS 與防火牆

大多數快速安裝會在這裡停止,而多數事件也從這裡開始。Dify 自帶的 nginx 會在 port 80 以未加密方式監聽所有網路介面。您不應讓管理員登入資訊與模型金鑰透過純 HTTP 傳輸,也不應讓外部連線到內部服務。

使用預設拒絕的防火牆限制主機,只允許 SSH 與 Web 流量:

sudo ufw default deny incoming
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

請注意,只涵蓋 IPv4 的防火牆可能會讓相同的埠在 IPv6 上保持開放,形成許多自架服務管理者容易忽略的 IPv6 防火牆漏洞。請確認兩種網路協定都已套用過濾規則。

TLS 的最佳做法,是將 Dify 的 Web 埠綁定至 loopback,並在前方執行使用 Let's Encrypt 憑證的反向代理,讓公開網際網路上唯一可見的服務是透過 HTTPS 通訊的代理。Dify 的 .env 可讓您變更暴露的埠;請將其設定為綁定至 127.0.0.1,再將代理指向該位置。在 VPS 上安全執行 AI agent 中的加固概念同樣適用於此:讓會變動的元件留在 loopback,只公開必要服務,並由單一強化入口處理 TLS。若某項工具的介面只供您自己使用,且完全不需要憑證,請略過代理,改用 SSH tunnel 連線;自架 open-kritt security scanner 便是將其 dashboard 綁定至 loopback,再轉送到您的筆電,而不是直接發布。若整個團隊都需要使用 Dify,但不希望服務暴露於公開網際網路,overlay network 可將這個做法擴展到單一筆電之外:將伺服器的私有子網路公布至您的 tailnet,讓每台核准的裝置都能透過私有位址連線至 builder,同時防火牆仍只允許 SSH。若您透過 coding agent 而非手動方式管理此主機,請在交付金鑰前先決定允許它在無人監督下執行多少操作,因為 您為 Claude Code 留下的權限模式會決定它在重寫 .env 或重新啟動堆疊前是否先詢問。如果您讓一個工作階段持續查看容器日誌,另一個工作階段同時編輯代理設定,這兩個工作階段可以在同一台主機上互相傳遞文字,就不必每次重新啟動堆疊時在終端機之間反覆複製輸出。

步驟 4:維持修補更新

Dify 更新速度快,更新內容也包含安全性修正。更新方式是在 docker 目錄執行 pull 並重新啟動:

git pull
docker compose pull
docker compose up -d

進行主要版本升級前,請先閱讀版本資訊。Dify 偶爾會在不同版本之間變更 .env schema,而未設定的新變數可能導致容器無法啟動。

步驟 5:備份無法重新產生的資料

Dify 伺服器上有兩項資料無法替代:儲存應用程式、使用者與設定的 Postgres 資料庫,以及儲存上傳文件和向量索引的磁碟區。兩者都位於 docker 目錄下的 Docker 磁碟區中。請依排程建立快照,並將快照複製到伺服器之外。這些快照會在單一檔案中包含所有模型金鑰和上傳文件,因此在將它們移出伺服器前先加密,理由與Vaultwarden 備份成為原本穩固的密碼伺服器弱點相同。模型 API 金鑰可以重新簽發,但你花費一週建立的應用程式無法重新取得。相同的原則也適用於任何狀態必須在執行該代理程式的機器故障後繼續保留的代理程式:讓 KiroCrew 以持續執行的容器運作,關鍵在於建立記憶與排程的快照,否則下一次重新開機就會消失。

如果你希望在這裡建立的代理程式能搜尋自有資料集以外的即時網頁,將代理程式連線至自行託管的 SearXNG 執行個體,可讓查詢流量留在你控制的硬體上。不過,啟用前應先了解因此開啟的提示注入攻擊面。若需要更具自主性且能執行程式碼的代理程式,請參閱自行託管 Agent Zero在 VPS 上建立自己的 AI 代理程式則涵蓋所有這些代理程式所需的基礎。

FAQ

自架 Dify 需要哪些系統需求?

Dify 以 Docker Compose stack 的形式執行,約包含半打容器。因此,VPS 至少應有 2 GB 可用 RAM,建議 4 GB,並配備數個 CPU 核心,以及足以儲存上傳文件和向量索引的磁碟空間。記憶體壓力主要來自資料庫和向量儲存區,而不是 Dify 本身。

直接在 port 80 對外公開 Dify 是否安全?

不安全。Dify 內建的 Web server 監聽未加密的 HTTP,且會處理管理員登入和模型 API keys。請在前方配置具備 Let's Encrypt 憑證的 reverse proxy,將 Dify 自身的 port 綁定至 loopback,僅讓 HTTPS proxy 對外提供服務。同時配置涵蓋 IPv4 和 IPv6 的預設拒絕防火牆。

如何更新自架的 Dify?

docker 目錄中執行 git pull,接著執行 docker compose pulldocker compose up -d,以抓取新映像並重新啟動。請先閱讀 release notes,因為 Dify 有時會在版本之間新增 .env 變數;缺少必要變數可能導致容器無法啟動。

安裝 Dify 後第一件事應該做什麼?

前往 /install,立即建立管理員帳戶。在該帳戶建立之前,任何能連線至該頁面的使用者都可以取得管理權。請在容器狀態正常後立即完成設定,並在對全世界開放防火牆之前完成。