全部產品
Search
文件中心

Platform For AI:在 PAI-EAS 上部署 Dify 大模型應用平台

更新時間:Feb 05, 2026

與本地部署相比,通過 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。

  1. 規劃一個專用網路。如無,請建立專用網路與交換器

  2. 建立RDS PostgreSQL執行個體:建立成功後,需為其建立一個高許可權帳號,並使用該帳號建立2個資料庫分別用於儲存Dify核心功能資料和外掛程式資料。詳情請參見建立帳號和資料庫

    重要

    建議選擇PostgreSQL 16(使用PostgreSQL 18 存在uuidv7函數衝突問題)。

  3. 建立Redis執行個體:為確保 EAS 容器能夠訪問,必須將 PAI-EAS 服務所在交換器的 IP 網段添加到 Redis 執行個體的白名單中。該資訊可以在 VPC 控制台的交換器詳情頁面擷取。

  4. 建立Elasticsearch執行個體:用於知識庫的向量儲存和全文檢索搜尋引擎。同樣,需確保其與EAS服務在同一VPC中。

二、部署Dify服務

  1. 登入PAI控制台,在頁面上方選擇目標地區,並在右側選擇目標工作空間,然後單擊進入EAS

  2. 推理服务頁簽,單擊部署服务,在场景化模型部署地區,單擊Dify大模型应用平台

  3. 在部署頁面,配置以下關鍵參數。

    • 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記憶體的規格以保證服務穩定運行。

  4. 確認所有配置無誤後,單擊部署。當服務狀態變為運行中時,表示部署成功。

三、驗證服務狀態與訪問

服務部署成功後,可進行狀態檢查和功能驗證。

  • 查看服務日誌

    若服務啟動失敗或運行異常,可在服務詳情頁的執行個體列表中,找到對應的容器組件,單擊其後的日誌按鈕,檢查啟動和作業記錄以定位錯誤原因。 image

  • 訪問 Dify Web 介面 

    在服務詳情頁,單擊右上方的Web应用,進入 Dify 的初始化頁面,完成管理員帳號建立後即可開始使用。

  • 調用 API

    Dify應用建立完成後,訪問API頁面展示的基礎URL為內部服務地址。image若要從公網調用 Dify API,需修改http://******.console.cn-hangzhou.eas.pai-ml.com為PAI-EAS服務調用資訊中的公網調用地址。image

    如下建立API密鑰之後,即可通過API 與應用互動。image

    以下是一個公網 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配置模板

{
    "cloud": {
        "computing": {
            "instances": [
                {
                    "type": "$instance_type"
                }
            ]
        },
        "networking": {
            "security_group_id": "$security_group_id",
            "vpc_id": "$vpc_id",
            "vswitch_id": "$vswitch_id"
        }
    },
    "containers": [
        {
            "image": "eas-registry-vpc.cn-hangzhou.cr.aliyuncs.com/pai-eas/dify:nginx-0.2",
            "port": 80,
            "script": "sh /docker-entrypoint.sh"
        },
        {
            "env": [
                {
                    "name": "MODE",
                    "value": "api"
                },
                {
                    "name": "SECRET_KEY",
                    "value": "$secret_key"
                },
                {
                    "name": "PLUGIN_DIFY_INNER_API_KEY",
                    "value": "$api_key"
                },
                {
                    "name": "PLUGIN_DAEMON_KEY",
                    "value": "$plugin_daemon_key"
                },
                {
                    "name": "STORAGE_TYPE",
                    "value": "local"
                },
                {
                    "name": "STORAGE_LOCAL_PATH",
                    "value": "/mnt/dify/dify"
                },
                {
                    "name": "DB_HOST",
                    "value": "$db_host"
                },
                {
                    "name": "DB_PORT",
                    "value": "$db_port"
                },
                {
                    "name": "DB_DATABASE",
                    "value": "$api_db"
                },
                {
                    "name": "DB_USERNAME",
                    "value": "$db_username"
                },
                {
                    "name": "DB_PASSWORD",
                    "value": "$db_password"
                },
                {
                    "name": "REDIS_HOST",
                    "value": "$redis_host"
                },
                {
                    "name": "REDIS_PORT",
                    "value": "$redis_port"
                },
                {
                    "name": "REDIS_USERNAME",
                    "value": ""
                },
                {
                    "name": "REDIS_PASSWORD",
                    "value": "$redis_password"
                },
                {
                    "name": "REDIS_DB",
                    "value": "0"
                },
                {
                    "name": "CELERY_BROKER_URL",
                    "value": "redis://:$redis_password@$redis_host:$redis_port/1"
                },
                {
                    "name": "VECTOR_STORE",
                    "value": "elasticsearch"
                },
                {
                    "name": "ELASTICSEARCH_HOST",
                    "value": "$elasticsearch_host"
                },
                {
                    "name": "ELASTICSEARCH_PORT",
                    "value": "$elasticsearch_port"
                },
                {
                    "name": "ELASTICSEARCH_USERNAME",
                    "value": "$elasticsearch_username"
                },
                {
                    "name": "ELASTICSEARCH_PASSWORD",
                    "value": "$elasticsearch_password"
                }
            ],
            "image": "eas-registry-vpc.cn-hangzhou.cr.aliyuncs.com/pai-eas/dify:api-0.2",
            "port": 5001,
            "script": "/bin/bash /entrypoint.sh"
        },
        {
            "env": [
                {
                    "name": "MODE",
                    "value": "worker"
                },
                {
                    "name": "SECRET_KEY",
                    "value": "$secret_key"
                },
                {
                    "name": "PLUGIN_DIFY_INNER_API_KEY",
                    "value": "$api_key"
                },
                {
                    "name": "PLUGIN_DAEMON_KEY",
                    "value": "$plugin_daemon_key"
                },
                {
                    "name": "STORAGE_TYPE",
                    "value": "local"
                },
                {
                    "name": "STORAGE_LOCAL_PATH",
                    "value": "/mnt/dify/dify"
                },
                {
                    "name": "DB_HOST",
                    "value": "$db_host"
                },
                {
                    "name": "DB_PORT",
                    "value": "$db_port"
                },
                {
                    "name": "DB_DATABASE",
                    "value": "$api_db"
                },
                {
                    "name": "DB_USERNAME",
                    "value": "$db_username"
                },
                {
                    "name": "DB_PASSWORD",
                    "value": "$db_password"
                },
                {
                    "name": "REDIS_HOST",
                    "value": "$redis_host"
                },
                {
                    "name": "REDIS_PORT",
                    "value": "$redis_port"
                },
                {
                    "name": "REDIS_USERNAME",
                    "value": ""
                },
                {
                    "name": "REDIS_PASSWORD",
                    "value": "$redis_password"
                },
                {
                    "name": "REDIS_DB",
                    "value": "0"
                },
                {
                    "name": "CELERY_BROKER_URL",
                    "value": "redis://:$redis_password@$redis_host:$redis_port/1"
                },
                {
                    "name": "VECTOR_STORE",
                    "value": "elasticsearch"
                },
                {
                    "name": "ELASTICSEARCH_HOST",
                    "value": "$elasticsearch_host"
                },
                {
                    "name": "ELASTICSEARCH_PORT",
                    "value": "$elasticsearch_port"
                },
                {
                    "name": "ELASTICSEARCH_USERNAME",
                    "value": "$elasticsearch_username"
                },
                {
                    "name": "ELASTICSEARCH_PASSWORD",
                    "value": "$elasticsearch_password"
                }
            ],
            "image": "eas-registry-vpc.cn-hangzhou.cr.aliyuncs.com/pai-eas/dify:api-0.2",
            "script": "/bin/bash /entrypoint.sh"
        },
        {
            "env": [
                {
                    "name": "SERVER_KEY",
                    "value": "$plugin_daemon_key"
                },
                {
                    "name": "DIFY_INNER_API_KEY",
                    "value": "$api_key"
                },
                {
                    "name": "PLUGIN_STORAGE_TYPE",
                    "value": "local"
                },
                {
                    "name": "PLUGIN_STORAGE_LOCAL_ROOT",
                    "value": "/mnt/dify/dify_plugin"
                },
                {
                    "name": "DB_HOST",
                    "value": "$db_host"
                },
                {
                    "name": "DB_PORT",
                    "value": "$db_port"
                },
                {
                    "name": "DB_DATABASE",
                    "value": "$plugin_daemon_db"
                },
                {
                    "name": "DB_USERNAME",
                    "value": "$db_username"
                },
                {
                    "name": "DB_PASSWORD",
                    "value": "$db_password"
                },
                {
                    "name": "REDIS_HOST",
                    "value": "$redis_host"
                },
                {
                    "name": "REDIS_USERNAME",
                    "value": ""
                },
                {
                    "name": "REDIS_PASSWORD",
                    "value": "$redis_password"
                },
                {
                    "name": "REDIS_DB",
                    "value": "0"
                },
                {
                    "name": "REDIS_PORT",
                    "value": "$redis_port"
                }
            ],
            "image": "eas-registry-vpc.cn-hangzhou.cr.aliyuncs.com/pai-eas/dify:plugin-daemon-0.2",
            "port": 5002,
            "script": "/bin/sh /app/entrypoint.sh"
        },
        {
            "image": "eas-registry-vpc.cn-hangzhou.cr.aliyuncs.com/pai-eas/dify:web-0.2",
            "port": 3000,
            "script": "/bin/sh /app/web/entrypoint.sh"
        },
        {
            "image": "eas-registry-vpc.cn-hangzhou.cr.aliyuncs.com/pai-eas/dify:sandbox-0.2",
            "port": 8194,
            "script": "/main"
        },
        {
            "image": "eas-registry-vpc.cn-hangzhou.cr.aliyuncs.com/pai-eas/dify:squid-0.2",
            "port": 3128,
            "script": "sh /docker-entrypoint.sh"
        }
    ],
    "generate_token": false,
    "labels": {
        "EnableTrace": "true"
    },
    "metadata": {
        "cpu": 8,
        "enable_webservice": true,
        "instance": 1,
        "memory": 16000,
        "name": "dify_test",
        "workspace_id": "$workspace_id"
    },
    "storage": [
        {
            "mount_path": "/mnt/dify",
            "oss": {
                "path": "$oss_path",
                "readOnly": false
            }
        }
    ]
}

部署時,需將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_usernamedb_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,只能重建執行個體。

image

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

可能原因:

  1. VPC網路問題:請確認redis所在的網路與EAS的一致。

    image.jpeg

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

    image.jpeg

    image.jpeg

Elasticsearch連不上

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

image.jpeg

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.