與本地部署相比,通過 PAI-EAS 部署 Dify,可以利用其託管服務和Auto Scaling能力,使團隊能夠專註於應用邏輯開發,而無需自我維護底層環境,從而加速從原型到生產的迭代過程。
工作原理
本方案利用 PAI-EAS 作為 Dify 應用的託管平台,並通過掛載外部依賴的方式構建一個完整的服務。整體架構由 PAI-EAS 服務執行個體和外部雲端服務組成,它們通過 VPC 網路進行安全高效的通訊。
架構核心組件包括:
PAI-EAS 服務:作為核心計算平台,EAS 以多容器的方式運行 Dify 的所有服務元件,包括 Web 介面、API 後端、非同步任務 Worker 和外掛程式沙箱等。EAS 負責服務的生命週期管理、資源調度和網路設定。
ApsaraDB for PostgreSQL (RDS):儲存使用者、對話、知識庫、工作流程以及外掛程式等配置的資料資訊,將資料庫與應用分離,確保了資料的持久性和獨立性。
ApsaraDB for Redis:提供高效能緩衝和訊息佇列功能。用於緩衝熱點資料、管理工作階段狀態,並通過 Celery Broker 實現 Dify 各組件間的非同步任務分發。
Elasticsearch:用作向量資料庫和全文檢索搜尋引擎。在 RAG(檢索增強產生)情境中,負責知識庫文檔的儲存、索引和高效檢索。
Object Storage Service:提供持久化檔案儲存體。用於存放 Dify 應用的外掛程式、上傳的知識庫檔案以及其他需要持久化的資料,確保服務在更新或重啟後資料不丟失。
工作流程如下:
使用者通過 EAS 提供的 Web 服務地址訪問 Dify 介面。所有請求首先由 Nginx 容器路由到 Dify-Web 或 Dify-API 容器。API 服務在處理商務邏輯時,會與後端的 PostgreSQL、Redis 和 Elasticsearch 進行資料互動。非同步任務(如文檔索引)則通過 Redis 投遞給 Worker 容器執行。所有需要持久化的檔案均讀寫至掛載的 OSS 路徑。
一、準備依賴資源
部署 Dify 前,必須先準備好其運行所需的外部依賴服務。確保所有這些資源與將要部署的PAI-EAS 服務處於同一地區(Region)和同一 VPC 網路中,以避免網路連接問題。
RDS PostgreSQL 和 Elasticsearch執行個體一旦建立,不支援切換 VPC。建立時必須選擇與 PAI-EAS 服務相同的 VPC。
規劃一個專用網路。如無,請建立專用網路與交換器。
建立RDS PostgreSQL執行個體:建立成功後,需為其建立一個高許可權帳號,並使用該帳號建立2個資料庫分別用於儲存Dify核心功能資料和外掛程式資料。詳情請參見建立帳號和資料庫。
重要建議選擇PostgreSQL 16(使用PostgreSQL 18 存在uuidv7函數衝突問題)。
建立Redis執行個體:為確保 EAS 容器能夠訪問,必須將 PAI-EAS 服務所在交換器的 IP 網段添加到 Redis 執行個體的白名單中。該資訊可以在 VPC 控制台的交換器詳情頁面擷取。
建立Elasticsearch執行個體:用於知識庫的向量儲存和全文檢索搜尋引擎。同樣,需確保其與EAS服務在同一VPC中。
二、部署Dify服務
登入PAI控制台,在頁面上方選擇目標地區,並在右側選擇目標工作空間,然後單擊進入EAS。
在推理服务頁簽,單擊部署服务,在场景化模型部署地區,單擊Dify大模型应用平台。
在部署頁面,配置以下關鍵參數。
OSS:選擇一個OSS Bucket並指定一個路徑,用於持久化儲存知識庫檔案、外掛程式資料等。會分別在路徑下產生dify和dify_plugin兩個檔案夾。
PostgreSQL数据库配置:
主机地址:填寫RDS PostgreSQL執行個體的內網地址。可以前往雲資料庫RDS PostgreSQL控制台頁面,在RDS PostgreSQL執行個體的資料庫連接頁面查看。
端口:預設為5432,根據實際連接埠填寫。
数据库-核心数据:請填寫已建立的資料庫名稱,用於持久化儲存所有與應用、使用者、對話、知識庫、工作流程、模型配置等核心功能相關的資料。
数据库-插件:請填寫已建立的資料庫名稱,用於持久化儲存與plugin外掛程式運行狀態、配置和中繼資料等相關資訊。
账号、密码:填寫建立以上資料庫時使用的高許可權帳號和密碼。
Redis配置:
主机地址:填寫Redis執行個體的內網地址。前往Redis控制台,在執行個體資訊頁面的串連資訊地區擷取。
端口:預設為6379,根據實際連接埠填寫。
账号、密码:填寫Redis執行個體的帳號密碼。
Elasticsearch配置:
主机地址:填寫Elasticsearch執行個體的內網地址。前往Elasticsearch控制台,進入執行個體詳情頁,在基本資料地區擷取。
端口:預設為9200,根據實際連接埠填寫。
账号、密码:填寫Elasticsearch執行個體的登入名稱(預設為elastic)和密碼。若忘記密碼,可重設。
资源规格:選擇用於部署服務的 EAS 執行個體規格。推薦使用至少8CPU+16GB記憶體的規格以保證服務穩定運行。
確認所有配置無誤後,單擊部署。當服務狀態變為運行中時,表示部署成功。
三、驗證服務狀態與訪問
服務部署成功後,可進行狀態檢查和功能驗證。
查看服務日誌
若服務啟動失敗或運行異常,可在服務詳情頁的執行個體列表中,找到對應的容器組件,單擊其後的日誌按鈕,檢查啟動和作業記錄以定位錯誤原因。

訪問 Dify Web 介面
在服務詳情頁,單擊右上方的Web应用,進入 Dify 的初始化頁面,完成管理員帳號建立後即可開始使用。
調用 API
Dify應用建立完成後,訪問API頁面展示的基礎URL為內部服務地址。
若要從公網調用 Dify API,需修改http://******.console.cn-hangzhou.eas.pai-ml.com為PAI-EAS服務調用資訊中的公網調用地址。
如下建立API密鑰之後,即可通過API 與應用互動。

以下是一個公網 API 呼叫樣本,用於向聊天機器人應用發送訊息:
curl -X POST 'http://xxxx.your_aliyun_account_id.cn-hangzhou.pai-eas.aliyuncs.com/v1/chat-messages' \ --header 'Authorization: Bearer app-xxxxxxxxxxxxx' \ --header 'Content-Type: application/json' \ --data-raw '{ "inputs": {}, "query": "介紹一下 Dify 的主要功能", "response_mode": "blocking", "user": "test-user-001" }'
四、通過 JSON 配置進行進階部署
對於需要自動化或深度自訂的部署情境,可使用 JSON 設定檔。在 EAS 服務部署頁面,可切換到 JSON 部署,並填入以下模板。此模板完整定義了 Dify 所需的全部容器、環境變數、儲存掛載和網路設定。
部署時,需將JSON模板中的預留位置(以`$`開頭)替換為實際值。詳細參數說明請參見JSON部署。
在metadata部分,必須設定
"enable_webservice": true以開放 Web 存取連接埠。在storage部分,將
$oss_path替換為實際的OSS路徑,例如 "oss://your-bucket-name/dify-data/"這是Dify API和外掛程式使用的路徑,會分別在下面產生dify和dify_plugin兩個檔案夾。在containers部分,部分需替換值的環境變數說明如下,更多參見Dify環境變數說明。
PostgreSQL資料庫配置
db_host:PostgreSQL資料庫執行個體地址。
db_port:預設5432。
api_db:Dify 核心功能資料庫。持久化儲存所有與應用、使用者、對話、知識庫、工作流程、模型配置等核心功能相關的資料。
plugin_daemon_db:Dify外掛程式資料庫。持久化儲存與plugin運行狀態、配置和中繼資料相關的資訊。
db_username、db_password:兩個資料庫共用一個使用者名稱和密碼。
Redis 配置
使用者與 AI 進行即時對話時,Redis 能夠協助不同服務元件之間進行即時訊息傳遞和通訊。
redis_host:Redis執行個體的串連地址。
redis_port:預設6379。
redis_password:建立Redis執行個體時設定的密碼。
Elasticsearch 配置
用於儲存向量資料庫和全文檢索搜尋引擎。
elasticsearch_host:Elasticsearch執行個體的串連地址。
elasticsearch_port:預設9200。
elasticsearch_username:預設 elastic。
elasticsearch_password:建立Elasticsearch執行個體時配置的密碼。密碼如忘記,可重設執行個體訪問密碼。
安全密鑰
Dify 運行需多個密鑰以保障內部通訊和資料安全。可使用
openssl rand -base64 42命令產生這些密鑰。secret_key:用於安全地簽名工作階段 Cookie 並在資料庫上加密敏感資訊的密鑰。
api_key:內部訪問API需要使用的key,防止外部惡意攻擊。
plugin_daemon_key:內部訪問plugin_daemon需要使用的key,防止外部惡意攻擊。
常見問題
資料庫執行個體連不上
[2025-09-13 00:46:28] [/bin/sh]: 2025/09/12 16:46:28 /app/internal/db/pg/pg.go:34
[2025-09-13 00:46:28] [/bin/sh]: [error] failed to initialize database, got error failed to connect to `host=pgm-xxxxxxxxxx.pg.rds.aliyuncs.com user=dify database=postgres`: dial error (timeout: dial tcp 10.0.0.230:5432: connect: connection timed out)
[2025-09-13 00:46:28] [/bin/sh]: 2025/09/12 16:46:28 init.go:95: [PANIC]failed to init dify plugin db: failed to connect to `host=pgm-xxxxxxxxxx.pg.rds.aliyuncs.com user=dify database=postgres`: dial error (timeout: dial tcp 10.0.0.230:5432: connect: connection timed out)
[2025-09-13 00:46:28] [/bin/sh]: panic: [PANIC]failed to init dify plugin db: failed to connect to `host=pgm-xxxxxxxxxx.pg.rds.aliyuncs.com user=dify database=postgres`: dial error (timeout: dial tcp 10.0.0.230:5432: connect: connection timed out)需要確認RDS是否和EAS處在同一個VPC網路之中。RDS PostgreSQL不支援切換VPC,只能重建執行個體。

Redis連不上
dify-api中的redis client連不上redis server
[2025-09-13 00:28:21] [/bin/sh]: File "/app/api/.venv/lib/python3.12/site-packages/redis/utils.py", line 188, in wrapper
[2025-09-13 00:28:21] [/bin/sh]: return func(*args, **kwargs)
[2025-09-13 00:28:21] [/bin/sh]: ^^^^^^^^^^^^^^^^^^^^^
[2025-09-13 00:28:21] [/bin/sh]: File "/app/api/.venv/lib/python3.12/site-packages/redis/connection.py", line 1530, in get_connection
[2025-09-13 00:28:21] [/bin/sh]: connection.connect()
[2025-09-13 00:28:21] [/bin/sh]: File "/app/api/.venv/lib/python3.12/site-packages/redis/connection.py", line 379, in connect
[2025-09-13 00:28:21] [/bin/sh]: self.connect_check_health(check_health=True)
[2025-09-13 00:28:21] [/bin/sh]: File "/app/api/.venv/lib/python3.12/site-packages/redis/connection.py", line 389, in connect_check_health
[2025-09-13 00:28:21] [/bin/sh]: raise TimeoutError("Timeout connecting to server")
[2025-09-13 00:28:21] [/bin/sh]: redis.exceptions.TimeoutError: Timeout connecting to server
[2025-09-13 00:28:22] time="2025-09-12T16:28:22Z" level=info msg="program stopped with status:exit status 1" program=/bin/sh可能原因:
VPC網路問題:請確認redis所在的網路與EAS的一致。

白名單設定問題:確認redis是否增加了白名單配置。需要添加EAS所在交換器的IP組。IP網段可從交換器頁面尋找。


Elasticsearch連不上
可能原因:VPC網路問題。需要確認Elasticsearch是否和EAS處在同一個VPC網路之中。

dify-api所需要的資料庫不存在
dify啟動時會串連兩張表,dify-api所需要的核心資料庫以及dify-plugin所需要的外掛程式庫。
[2025-09-13 01:33:20] [/bin/sh]: File "/app/api/.venv/lib/python3.12/site-packages/sqlalchemy/engine/default.py", line 625, in connect
[2025-09-13 01:33:20] [/bin/sh]: return self.loaded_dbapi.connect(*cargs, **cparams) # type: ignore[no-any-return] # NOQA: E501
[2025-09-13 01:33:20] [/bin/sh]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[2025-09-13 01:33:20] [/bin/sh]: File "/app/api/.venv/lib/python3.12/site-packages/psycopg2/__init__.py", line 122, in connect
[2025-09-13 01:33:20] [/bin/sh]: conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
[2025-09-13 01:33:20] [/bin/sh]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[2025-09-13 01:33:20] [/bin/sh]: File "/app/api/.venv/lib/python3.12/site-packages/psycogreen/gevent.py", line 32, in gevent_wait_callback
[2025-09-13 01:33:20] [/bin/sh]: state = conn.poll()
[2025-09-13 01:33:20] [/bin/sh]: ^^^^^^^^^^^
[2025-09-13 01:33:20] [/bin/sh]: sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) FATAL: database "dify_core" does not exist
[2025-09-13 01:33:20] [/bin/sh]:目前部署使用的Dify社區版1.7.1中,外掛程式庫會被自動建立;但核心資料庫不會被自動建立,需要手動建立。
marketplace.dify.ai連不上
原因是EAS容器預設無法訪問公網,需要EAS訪問公網或內網資源。
[2025-09-13 00:00:00] [/bin/sh]: 2025-09-12 16:00:00,847.847 WARNING [Dummy-1] [ssrf_proxy.py:81] - Request to URL https://marketplace.dify.ai/api/v1/plugins/download?unique_identifier=langgenius/tongyi:0.0.46@8e73008929dbc3934936493d442fab4c34ef016ae817b144b45da278ba76580e failed on attempt 1: timed out
[2025-09-13 00:00:02] [/bin/sh]: 2025-09-12 16:00:02,046.046 WARNING [Dummy-2] [ssrf_proxy.py:81] - Request to URL https://marketplace.dify.ai/api/v1/plugins/download?unique_identifier=langgenius/tongyi:0.0.46@8e73008929dbc3934936493d442fab4c34ef016ae817b144b45da278ba76580e failed on attempt 1: timed out
[2025-09-13 00:00:06] [/bin/sh]: 2025-09-12 16:00:06,416.416 WARNING [Dummy-1] [ssrf_proxy.py:81] - Request to URL https://marketplace.dify.ai/api/v1/plugins/download?unique_identifier=langgenius/tongyi:0.0.46@8e73008929dbc3934936493d442fab4c34ef016ae817b144b45da278ba76580e failed on attempt 2: timed out
[2025-09-13 00:00:07] [/bin/sh]: 2025-09-12 16:00:07,614.614 WARNING [Dummy-2] [ssrf_proxy.py:81] - Request to URL https://marketplace.dify.ai/api/v1/plugins/download?unique_identifier=langgenius/tongyi:0.0.