在 PAI-EAS 上部署 Dify 大模型应用平台
与本地部署相比,通过 PAI-EAS 部署 Dify,可以利用其托管服务和弹性伸缩能力,使团队能够专注于应用逻辑开发,而无需自行维护底层环境,从而加速从原型到生产的迭代过程。
工作原理
本方案利用 PAI-EAS 作为 Dify 应用的托管平台,并通过挂载外部依赖的方式构建一个完整的服务。整体架构由 PAI-EAS 服务实例和外部云服务组成,它们通过 VPC 网络进行安全高效的通信。
架构核心组件包括:
PAI-EAS 服务:作为核心计算平台,EAS 以多容器的方式运行 Dify 的所有服务组件,包括 Web 界面、API 后端、异步任务 Worker 和插件沙箱等。EAS 负责服务的生命周期管理、资源调度和网络配置。
云数据库 PostgreSQL 版 (RDS):存储用户、对话、知识库、工作流以及插件等配置的数据信息,将数据库与应用分离,确保了数据的持久性和独立性。
云数据库 Redis 版:提供高性能缓存和消息队列功能。用于缓存热点数据、管理会话状态,并通过 Celery Broker 实现 Dify 各组件间的异步任务分发。
Elasticsearch:用作向量数据库和全文搜索引擎。在 RAG(检索增强生成)场景中,负责知识库文档的存储、索引和高效检索。
对象存储 OSS:提供持久化文件存储。用于存放 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核心功能数据和插件数据。详情请参见创建账号和数据库。
创建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容器默认无法访问公网,需要网络配置。
[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.