本文档由 AI 自动翻译。如有任何不准确之处,请参考 英文原版。
配置文件
Docker Compose 从三类文件中读取 Dify 的设置。docker/.env:作用于整个部署的设置(如 Compose profile 和对外发布的端口)以及共享凭据。新部署从docker/.env.example复制创建此文件。.defaults文件(位于docker/envs/下):自带的默认值,由各服务自动加载。不要修改这些文件:每次发布新版本都会更新它们。- 本地
.env文件(位于docker/envs/下):你的覆盖值,作用于加载这些文件的服务。Git 会忽略这些文件,因此检出新版本后,它们仍保留在原处。
api/.env 和 web/.env.local 中设置,中间件容器的变量则写在 docker/middleware.env 中。
设置变量
找到对应文件
docker/envs/ 下的本地 .env 文件中,以下两类则写在 docker/.env 中:- Compose 在加载任何服务文件之前读取的设置,如
COMPOSE_PROFILES和VECTOR_STORE。 - 共享凭据,确保用到同一凭据的所有服务拿到相同的值:
PLUGIN_DAEMON_KEY和PLUGIN_DIFY_INNER_API_KEY:分别使用不同的强密钥。DIFY_AGENT_API_TOKEN和DIFY_AGENT_LOCAL_SANDBOX_AUTH_TOKEN:分别使用不同的强密钥。SANDBOX_API_KEY和CODE_EXECUTION_API_KEY:设为相同的值。两者不一致时,代码执行节点和模板转换节点会失败并返回 HTTP 401。
docker/envs/ 中搜索变量名,再按搜索结果处理:- 搜到一个
.defaults文件:编辑其第一条注释中写明的本地文件。该文件尚不存在时,先将.defaults文件复制为该文件名。 - 搜到多个
.defaults文件:编辑所有用到该变量的服务都会加载的那个本地文件,否则各服务拿到的值会不一致。 - 搜到
.env.example模板(如envs/security.env.example):将其复制为去掉.example后缀的同名文件。跳过envs/middleware.env.example,只有源码开发使用的独立 中间件栈 才会读取它。
docker/.env 和本地文件设置了同一变量时,以 docker/.env 中的值为准,例外情况详见 优先级。修改设置值
CELERY_WORKER_AMOUNT= 这样的空赋值仍会用空值覆盖默认值;写在 docker/.env 中的空赋值还会让本地文件中的值失效。优先级
同一变量在多处设置时,服务最终使用哪个值,取决于该服务是否加载docker/.env:
- 加载 docker/.env 的服务
- 其他服务
docker/.env- 该服务的本地
.env文件 - 该服务的
.defaults文件 - 程序内置的默认值
.defaults 文件中 Container variable mappings 注释下的变量,始终从另一项设置取值。直接设置它们不会生效,写在 docker/.env 中也一样;需要修改时,改它们取值的那项设置。- 运行 Compose 的 Shell 中导出的变量:对于
${...}形式的值,它优先于docker/.env - Compose 文件中该服务的
environment:条目(如MODE: api):它优先于所有环境变量文件
通用变量
这些 URL 变量用于配置 Dify 各服务的访问地址。 对于 Nginx 后的单域名部署(默认 Docker Compose 配置),这些变量可以留空,系统会从请求中自动检测。当使用自定义域名、多域名部署或反向代理时,需要配置这些变量。CONSOLE_API_URL
默认值:(空) Dify 后端 API 的公开 URL。如果你使用 OAuth 登录(GitHub、Google)、Notion 集成或任何需要 OAuth 的插件,请设置此变量;这些功能需要绝对回调 URL 才能在授权后将用户重定向回来。此变量还决定是否使用安全(仅 HTTPS)Cookie。 示例:https://api.console.dify.ai
SERVER_CONSOLE_API_URL
默认值:http://api:5001
Web 前端容器在服务端发起请求时所使用的 Console API 地址,经由 Docker 内部网络直接访问,而非通过你的公网域名。此变量仅由 Web 前端容器使用,不影响 Python 后端;浏览器端请求仍使用 CONSOLE_API_URL。若留空,则回退到 CONSOLE_API_URL。仅当 API 服务的内部访问地址不同时才需修改。
CONSOLE_WEB_URL
默认值:(空) Dify 控制台前端的公开 URL。用于构建所有系统邮件(邀请、密码重置、通知)中的链接,以及 OAuth 登录后将用户重定向回控制台。如果未设置CONSOLE_CORS_ALLOW_ORIGINS,此变量也作为默认的 CORS 允许来源。
如果为空,邮件链接将无法正常工作;即使在单域名部署中,使用邮件功能时也需要设置此变量。
示例:https://console.dify.ai
SERVICE_API_URL
默认值:(空) 在 Dify 控制台中展示给开发者的 API Base URL,即他们复制到代码中用于调用 Dify API 的 URL。如果为空,将从当前请求自动检测(例如http://localhost/v1)。当你的服务器可通过多个地址访问时,设置此变量以确保 URL 一致。
示例:https://api.dify.ai
APP_API_URL
默认值:(空) Web 应用前端(已发布应用)的后端 API URL。此变量仅由 Web 前端容器使用,不影响 Python 后端。如果为空,Docker 镜像默认使用http://127.0.0.1:5001。
示例:https://api.app.dify.ai
APP_WEB_URL
默认值:(空) 已发布 Web 应用的公开访问 URL。工作流中的 人工输入节点 需要此变量;邮件通知中的表单链接以{APP_WEB_URL}/form/{token} 格式构建。如果为空,人工输入邮件将不包含有效的表单链接。
示例:https://app.dify.ai
TRIGGER_URL
默认值:http://localhost
Webhook 和集成触发端点的公开访问 URL。外部系统使用此地址来调用你的工作流。Dify 构建触发回调 URL 格式为 {TRIGGER_URL}/triggers/webhook/{id} 并在控制台中展示。
要使触发器能从外部系统正常工作,此变量必须指向它们可以访问的公共域名或 IP 地址。
FILES_URL
默认值:(空;回退到CONSOLE_API_URL)
文件预览和下载链接的基础 URL。Dify 为所有文件(上传的文档、工具输出、工作空间 Logo)生成签名的限时 URL,并提供给前端和多模态模型使用。
如果你使用文件处理插件,或希望文件 URL 使用专用域名,请设置此变量。如果 FILES_URL 和 CONSOLE_API_URL 都为空,文件预览将无法工作。
示例:https://upload.example.com 或 http://<your-ip>:5001
INTERNAL_FILES_URL
默认值:(空;回退到FILES_URL)
Docker 网络内部服务间通信使用的文件访问 URL(例如插件守护进程、PDF/Word 提取器)。这些内部服务可能无法通过 Nginx 或公共域名访问外部的 FILES_URL。
如果为空,内部服务使用 FILES_URL。当内部服务无法访问外部 URL 时,请设置此变量。
示例:http://api:5001
FILES_ACCESS_TIMEOUT
默认值:300(5 分钟)
签名文件 URL 的有效时长(秒)。超过此时间后 URL 将被拒绝,文件需要重新请求。对于长时间运行的流程可以增大此值;对于更严格的安全要求可以减小此值。
ENABLE_COLLABORATION_MODE
默认值:true
启用工作流画布的实时协作功能:多人同时编辑、画布评论以及 @ 提及。
如果用户通过 localhost 以外的主机访问 Dify,将 NEXT_PUBLIC_SOCKET_URL 设置为浏览器可访问的 WebSocket URL(参见 CORS 配置)。默认值 ws://localhost 仅适用于本地访问场景。
如需禁用协作功能,将此值设为 false。使用 Docker Compose 时,还需从 COMPOSE_PROFILES 中移除 collaboration,否则专用的 api_websocket 容器会持续运行但无任何流量。
如果使用自己的反向代理,需在 /socket.io/ 路径上转发 Upgrade 与 Connection 请求头(Dify 自带的 nginx 模板已包含此配置)。多 API 副本部署需启用会话保持(sticky sessions)。
如果协作者编辑大型工作流时编辑器反复断开重连,可调高 WEBSOCKET_MAX_HTTP_BUFFER_SIZE。
系统编码
服务器配置
日志
常规
SECRET_KEY
默认值:(空;自动生成并保存在配置的存储中) 为认证令牌和文件 URL 签名,并加密系统级 OAuth 客户端凭据。 此变量为空时,Dify 会复用配置的存储中.dify_secret_key 文件内的密钥;如果密钥不存在,则生成并保存一个。使用自带的文件系统存储时,宿主机路径为 docker/volumes/app/storage/.dify_secret_key。
非空的 SECRET_KEY 优先于已存储的密钥。如需自行提供密钥,生成一个高强度随机值,并在首次启动前设置:
PASSWORD_PEPPER
默认值:(空) 服务端密钥,Dify 会将其混入成员的登录密码。这样即使数据库泄露,仅凭其中的数据也无法破解密码。留空则一切照旧。 如需启用,请在首次安装时、创建管理员账户之前设置此变量。取值应为高熵随机值,例如用以下命令生成:docker/envs/core-services/api.env 中设置。不要写在 docker/.env 中,因为 Compose 也会把该文件中的变量传给 Worker、插件守护进程、Agent 后端、Web 前端和代码沙箱。源码部署则在 api/.env 中设置。
已有账户的部署若要启用,事后需确保每位成员都能重新登录:
- 在 API 容器中运行
flask reset-password,逐个重置账户密码。完整命令详见 重置管理员密码。 - 让成员通过「忘记密码」邮件自行重置密码,前提是已配置 邮件发送。
- 如果启用了
ENABLE_EMAIL_CODE_LOGIN,成员也可改用邮件验证码登录。
KEY_PROVIDER_TYPE
默认值:local
决定 Dify 把加密存储凭证(模型供应商 API 密钥、工具凭证等工作空间机密)所用的密钥保存在哪里:
-
local:为每个工作空间生成一对 RSA 密钥,私钥保存在STORAGE_TYPE对应的存储后端中。 -
azure-keyvault:将每个工作空间的 RSA 密钥保存在 Azure Key Vault 中,私钥不会离开 Key Vault。Dify 通过DefaultAzureCredential(托管身份、环境变量或 Azure CLI 登录)完成认证。
INIT_PASSWORD
默认值:(空) 首次安装时的可选安全门控。设置后,/install 页面在创建管理员账户前需要输入此密码,防止服务器暴露时被未授权设置。安装完成后此变量不再生效。最大长度:30 个字符。
令牌与请求限制
容器启动配置
仅在使用 Docker 镜像或 Docker Compose 启动时生效。MODE
默认值:按服务而定(Docker Compose 中为api、worker 或 beat)
决定 dify-api 镜像在容器启动时运行的进程。自带的 Compose 文件在各服务的 environment 中设置 MODE,该值优先于 env 文件中的值。可选值:
api(空值或无法识别的值同样生效):API 服务worker:Celery 任务消费进程beat:定时任务调度进程job:执行一条 Flask CLI 命令后退出migration:配合MIGRATION_ENABLED=true,完成数据库迁移后退出
API 工具配置
数据库配置
数据库默认使用 PostgreSQL,也支持 OceanBase、MySQL 和 seekdb。首次启动前选定数据库:更换数据库类型时,Dify 不会迁移已存储的数据。 要使用自带的 MySQL 和 Weaviate 启动全新部署,在docker/.env 中设置:
weaviate 替换为它的 profile。
首次启动前设置自定义的 DB_PASSWORD。之后如需修改密码,先在数据库服务器上修改,再相应更新 DB_PASSWORD。
连接池
这些变量控制 Dify 管理数据库连接池的方式。默认配置适用于大多数部署。PostgreSQL 性能调优
这些变量作为启动参数传递给 PostgreSQL 容器,配置的是数据库服务器,而非 Dify 应用。MySQL 性能调优
这些变量作为启动参数传递给 MySQL 容器,配置的是数据库服务器,而非 Dify 应用。Redis 配置
配置这些变量以将 Dify 连接到你的 Redis 实例。Dify 支持三种部署模式:单机(默认)、哨兵和集群。Redis SSL 配置
仅在REDIS_USE_SSL=true 时适用。当 Celery broker URL 使用 rediss:// 协议时,这些设置也适用于 Celery broker。
Redis 哨兵模式
哨兵提供自动主节点发现和故障转移以实现高可用。与集群模式互斥。Redis 集群模式
集群模式提供跨多个 Redis 节点的自动分片。与哨兵模式互斥。Redis 连接健壮性配置
以下变量用于调节 Redis 连接的客户端重试、超时和健康检查行为。默认值较为保守;在网络延迟较高的云或广域网环境中,建议适当增大超时值。Celery 配置
配置用于数据集索引、邮件发送和定时任务的后台任务队列。CELERY_BROKER_URL
默认值:redis://:difyai123456@redis:6379/1
Celery 消息代理的 Redis 连接 URL。
直连格式:
CORS 配置
控制前端的跨域访问策略。Dify CLI 与编程 API
/openapi/v1/* 是面向用户的编程 API,Dify CLI(difyctl)等客户端通过 OAuth Bearer Token 访问。该接口默认关闭:将 OPENAPI_ENABLED 和 ENABLE_OAUTH_BEARER 都设为 true 后,CLI 才能连接你的部署。
文件存储配置
配置 Dify 存储上传文件、数据集文档和加密密钥的位置。每种存储类型有各自的凭证变量,仅配置你使用的那种。STORAGE_TYPE
默认值:opendal
选择文件存储后端。支持的值:opendal、s3、azure-blob、aliyun-oss、google-storage、huawei-obs、volcengine-tos、tencent-cos、baidu-obs、oci-storage、supabase、clickzetta-volume、local(已弃用;内部使用 OpenDAL 的文件系统方案)。
OpenDAL(默认)
OpenDAL(默认)
OPENDAL_<SCHEME>_* 的环境变量并传递给 OpenDAL。例如,使用 OPENDAL_SCHEME=s3 时,设置 OPENDAL_S3_ACCESS_KEY_ID、OPENDAL_S3_SECRET_ACCESS_KEY 等。fs 方案:S3
S3
Azure Blob
Azure Blob
Google Cloud Storage
Google Cloud Storage
阿里云 OSS
阿里云 OSS
腾讯云 COS
腾讯云 COS
OCI Object Storage
OCI Object Storage
华为 OBS
华为 OBS
火山引擎 TOS
火山引擎 TOS
百度 OBS
百度 OBS
Supabase
Supabase
ClickZetta Volume
ClickZetta Volume
CLICKZETTA_* 连接参数。归档存储
用于归档工作流运行日志的独立 S3 兼容存储。archive-workflow-runs 维护命令将超过指定期限的工作流运行打包为按月的 Parquet 归档包;由归档生成的 CSV 导出文件暂存于导出存储桶。
向量数据库配置
配置向量数据库。知识库的嵌入存放在向量数据库中,用于相似性搜索。VECTOR_STORE
默认值:weaviate
选择新建知识库使用的向量数据库。已有知识库仍使用建立索引时所在的数据库。
支持的值:weaviate、oceanbase、seekdb、qdrant、milvus、myscale、relyt、pgvector、pgvecto-rs、chroma、opensearch、oracle、tencent、elasticsearch、elasticsearch-ja、analyticdb、couchbase、vikingdb、opengauss、tablestore、vastbase、tidb_vector、tidb_on_qdrant、baidu、lindorm、huawei_cloud、upstash、matrixone、clickzetta、alibabacloud_mysql、iris、hologres。
以下自带提供商各有一个同名的 Compose profile:weaviate、qdrant、oceanbase、seekdb、couchbase、pgvector、pgvecto-rs、vastbase、chroma、iris、oracle、milvus、opensearch、opengauss、myscale、matrixone、elasticsearch 和 elasticsearch-ja。使用其他提供商或外部服务器时,不要启用自带服务的 profile。连接设置写在该提供商的本地 .env 文件中;没有本地文件的提供商,则写在 envs/core-services/api-worker.env 中。
要切换到另一个自带提供商:
保留已有知识库所用的提供商
COMPOSE_PROFILES 中保留原提供商的 profile。如果原提供商不是 Weaviate,还要把它的 .defaults 文件复制为本地 .env 文件,例如将 qdrant.defaults 复制为 qdrant.env。elasticsearch-ja 与 elasticsearch 共用同一个 elasticsearch.env。只有当前选中的提供商的默认值会自动加载,不复制的话,已有知识库会失去连接。选择新提供商
docker/.env 中设置 VECTOR_STORE,并将新提供商的 profile 加入 COMPOSE_PROFILES,然后运行 docker compose up -d。OCEANBASE_* 设置,因此 Dify 同一时间只能连接其中一个。在这两者之间切换时,请迁移已有知识库,而不是同时保留两者。
如需将已有知识库的数据迁移到新提供商,详见 向量数据库迁移。
如需修改提供商的连接设置,按 设置变量 操作。对于保存了用户密码的提供商,先在数据库中修改密码,再更新对应的客户端设置。
Weaviate
Weaviate
OceanBase / seekdb
OceanBase / seekdb
OCEANBASE_* 变量。将 VECTOR_STORE 设为 oceanbase 或 seekdb,即可加载对应提供商的连接默认值。Qdrant
Qdrant
Milvus
Milvus
MyScale
MyScale
Couchbase
Couchbase
Hologres
Hologres
PGVector
PGVector
Vastbase
Vastbase
VASTBASE_USER 和 VASTBASE_PASSWORD 保持默认值即可:它们与 docker-compose.yaml 中的 VB_USERNAME 和 VB_PASSWORD 一致。连接外部服务器时,将二者设为该服务器的凭据。PGVecto.RS
PGVecto.RS
AnalyticDB
AnalyticDB
TiDB Vector
TiDB Vector
MatrixOne
MatrixOne
Chroma
Chroma
Oracle
Oracle
AlibabaCloud MySQL
AlibabaCloud MySQL
Relyt
Relyt
OpenSearch
OpenSearch
envs/vectorstores/opensearch.env 中设置 OPENSEARCH_VERIFY_CERTS=false,因为该镜像自带的是演示证书。生产环境和外部服务器应使用客户端信任的证书,并保持证书验证开启。腾讯云向量数据库
腾讯云向量数据库
Elasticsearch
Elasticsearch
VECTOR_STORE=elasticsearch 还是 VECTOR_STORE=elasticsearch-ja,都从 elasticsearch.defaults 复制创建 envs/vectorstores/elasticsearch.env,在其中自定义连接。百度向量数据库
百度向量数据库
VikingDB
VikingDB
Lindorm
Lindorm
OpenGauss
OpenGauss
华为云搜索
华为云搜索
Upstash Vector
Upstash Vector
TableStore
TableStore
ClickZetta
ClickZetta
InterSystems IRIS
InterSystems IRIS
知识库配置
标注导入
模型配置
多模态配置
NGINX_CLIENT_MAX_BODY_SIZE(默认 100M)限制。如果你将任何上传限制增大到超过 100 MB,还需要相应增大 NGINX_CLIENT_MAX_BODY_SIZE,否则 Nginx 会以 413 错误拒绝上传。Sentry 配置
Sentry 提供错误跟踪和性能监控。每个服务有各自的 DSN 以分离错误报告。Notion 集成配置
将 Dify 连接到 Notion 作为知识库数据源。在 https://www.notion.so/my-integrations 获取集成凭证。邮件配置
Dify 发送邮件用于账户邀请、密码重置、登录验证码和人工输入节点通知。配置三个支持的提供商之一。邮件链接需要设置CONSOLE_WEB_URL,参见 通用变量。
Resend
Resend
SMTP
SMTP
SMTP_USE_TLS=true、SMTP_OPPORTUNISTIC_TLS=false,端口 465)、STARTTLS(SMTP_USE_TLS=true、SMTP_OPPORTUNISTIC_TLS=true,端口 587)或明文(SMTP_USE_TLS=false,端口 25)。SendGrid
SendGrid
其他配置
控制台功能
认证与账户
默认情况下,用户以邮箱和密码登录,新账户通过工作空间邀请或初始设置向导创建。以下开关可放宽或收紧这一策略。LLMOps 追踪投递
应用运行的追踪数据由后台任务投递给所配置的 LLMOps 供应商(Langfuse、LangSmith、Arize/Phoenix 等)。使用 Docker Compose 部署时,在docker/envs/core-services/api-worker.env 中设置这些变量。
索引
新用户默认配置
工作流生成
令牌与邀请
所有令牌过期变量控制存储在 Redis 中的一次性令牌的有效时长。过期后用户必须请求新令牌。代码执行沙箱
以下设置决定 API 和 Worker 如何连接沙箱,以运行代码执行节点、模板转换节点、Jinja2 提示词和内置 Code 工具。代码与模板输出限制
API 和 Worker 进程按这些限制检查代码执行节点和模板转换节点返回的输出,这些变量在envs/core-services/api-worker.env 中设置。沙箱服务不会读取它们。
工作流运行时
工作流存储仓库
这些变量选择处理工作流执行数据的后端实现。默认的SQLAlchemy 仓库将所有内容存储在数据库中。也可使用其他实现(例如 Celery、Logstore)实现不同的存储策略。
工作流日志清理
HTTP 请求节点
这些变量配置工作流中用于调用外部 API 的 HTTP 请求节点。Webhook
SSRF 防护
Dify 的所有出站 HTTP 请求(HTTP 节点、图片下载等)都通过代理路由,该代理阻止对内部/私有 IP 范围的请求,防止服务端请求伪造(SSRF)攻击。Agent 配置
Web 前端服务
这些变量仅由 Next.js Web 前端容器使用,不影响 Python 后端。NEXT_PUBLIC_ENABLE_FEATURE_PREVIEW
默认值:true
启用 Go to Anything 命令面板中的 /create 和 /refine 命令,这两个命令可根据自然语言描述生成和修改 Workflow 与 Chatflow 应用。设为 false 即可隐藏它们。
新版 Agent
新 Agent 在 Docker Compose 部署中以额外服务运行:一个 Agent 后端、一个沙箱,以及供沙箱使用的专用出站代理。设置好DIFY_AGENT_LOCAL_SANDBOX_AUTH_TOKEN 后,它们都会随 docker compose up 启动。该功能默认启用,且大部分设置会从现有的 Compose 配置中自动推导,因此通常只需关注下面这几个变量。
DIFY_AGENT_SERVER_SECRET_KEY
默认值:(自带默认值中的开发密钥,生产环境必须替换) Agent 后端的根密钥,用于派生内部令牌所需的密钥。这些令牌包括沙箱内 Agent 回调后端时用于认证的 Bearer 令牌。 自带的默认值是一个公开的开发密钥。任何知道该密钥的人都能伪造这些令牌,因此生产环境使用前务必替换。 值必须是不带填充的 base64url 文本,且解码后恰好为 32 字节;值格式错误时,Agent 后端将拒绝启动。 可用以下命令生成:DIFY_AGENT_API_TOKEN
默认值:(自带默认值中的开发令牌,生产环境必须替换) Dify API 和 Worker 调用 Agent 后端运行接口时出示的 Bearer 令牌。在docker/.env 中设置,确保 API、Worker 和 Agent 后端使用相同的值。
自带的默认值是一个公开的开发令牌。任何能访问 Agent 后端且知道该令牌的人都能发起运行,因此生产环境使用前务必替换为自己的随机值。
DIFY_AGENT_LOCAL_SANDBOX_AUTH_TOKEN
默认值:(空;运行时后端 为默认的local 时必填)
Agent 后端向内置沙箱证明身份时使用的共享密钥。没有令牌时,这两个服务一启动就会退出并反复重启,所以要在启动 Dify 之前设置好。
生成一个令牌:
docker/.env 中设置此值,确保 Agent 后端和内置沙箱(local_sandbox)使用相同的值。它替代了旧变量 DIFY_AGENT_SHELLCTL_AUTH_TOKEN:此变量未设置或为空时,Compose 仍会从 docker/.env 中读取旧变量。
只在 envs/core-services/dify-agent.env 中设置的值不会生效。如果你的令牌设在那里,将其移到 docker/.env,然后在 dify/docker 中运行 docker compose up -d。
NEXT_PUBLIC_ENABLE_AGENT_V2
默认值:true(Docker Compose)
在 Web 界面中显示新 Agent:主导航中的 Agents 项,以及 Workflow 应用节点选择器中的新 Agent 节点。它取代了旧设置 ENABLE_AGENT_V2,后者在当前 Compose 文件下不再起作用。
在 docker/envs/core-services/web.env 中将其设为 false,可隐藏新 Agent 并回退到经典 Agent 节点;改回 true 即可重新显示。无论哪种情况,都要重建 web 容器,然后强制刷新浏览器:
NEXT_PUBLIC_ENABLE_AGENT_V2_IN_CHATFLOW
默认值:false
设为 true 后,Chatflow 应用的节点选择器中也会出现新 Agent 节点。仅在 NEXT_PUBLIC_ENABLE_AGENT_V2 为 true 时生效。
UPLOAD_SKILL_FILE_SIZE_LIMIT
默认值:50
Skill 包(.zip 或 .skill)的最大大小,单位为 MB。无论将包上传到 Agent,还是导入 Skill 库,都受此限制。超过限制时会返回大小错误。
若将其提高到 100 以上,还需同步提高 NGINX_CLIENT_MAX_BODY_SIZE,否则 Nginx 会以 413 错误拒绝上传。
此变量只限制打包后的文件。包内的内容另有上限,以字节为单位设置:
Agent 包与应用包限制
这些限制适用于所有应用包(.ifpkg),不只针对 Agent:所有类型的应用默认都导出为这种格式。导出和导入时都会检查这些限制,无论包是以文件上传还是从 URL 导入。只要超出任一限制,整个导出或导入就会失败,需先调高超出的那项限制再重试。
上传超过 100 MB 的包时,还需调高 NGINX_CLIENT_MAX_BODY_SIZE,否则 Nginx 会先拒绝请求。
包内附带的每个 Skill 还须符合 Skill 限制:
- 导入时,超出
UPLOAD_SKILL_FILE_SIZE_LIMIT的 Skill 会导致整个导入失败;超出某项SKILL_PACKAGE_*限制的 Skill 则会被跳过,导入完成时给出警告。要导入该 Skill,调高它超出的限制后重新导入包。 - 导出时,超出某项
SKILL_PACKAGE_*限制的 Skill 会导致整个导出失败,调高该限制后才能导出。
AGENT_BACKEND_BASE_URL
默认值:http://agent_backend:5050
API 访问 Agent 后端所用的地址。在 Docker Compose 中保持默认值即可。
其余变量用于配置打包的服务,或从现有的 Compose 配置中推导,通常无需改动。
DIFY_AGENT_RUNTIME_BACKEND
默认值:local
选择 Agent 沙箱的运行位置:
local:使用内置沙箱容器。e2b:每个 Agent 的沙箱运行在一台 E2B 云虚拟机中,隔离性比内置容器更强。openshell:通过你自行运维的 NVIDIA OpenShell 网关,让沙箱运行在你自己的基础设施上。
DIFY_AGENT_STUB_API_BASE_URL 与 DIFY_AGENT_SANDBOX_FILES_BASE_URL)都在 envs/core-services/dify-agent.env 中设置。
每种远程后端各有一组专用变量:
E2B
E2B
docker/docker-compose.e2b.yaml 叠加文件用于测试 E2B,会使用一个独立的空 PostgreSQL 数据卷,不要将其应用到已有部署。OpenShell
OpenShell
openshell 前,需准备好以下各项:- OpenShell 网关,版本不低于 0.0.106,且
agent_backend容器能访问到它。 - 网关凭证:Bearer 令牌、mTLS 客户端证书对,或两者兼有。Compose 未内置证书挂载,需自行将证书文件以只读方式挂载到
agent_backend,并确保 UID 1001 可读取。 - 网关可用来启动沙箱的运行时镜像。
- 一个共享卷,用于存放 Agent 跨对话保留的长期文件。该卷需在 Compose 之外创建,以免被
docker compose down -v删除。如果部署要服务彼此不信任的租户,请为每个租户分别准备 OpenShell 工作空间和卷。多个租户共用一个卷时,无法可靠地阻止一个租户访问另一个租户的长期文件。 - 沙箱回连 Dify 的网络路径:
- 沙箱可访问的回调地址。
- 通往 Agent 后端
/agent-stub路径的路由。基础 Compose 文件没有发布 Agent 后端的 5050 端口。这个端口同时承载启动 Agent 运行的 API,所以不要整个暴露,只暴露/agent-stub路径,比如通过反向代理。
- 参照 OpenShell 配置指南 搭建网关并完成上述准备,包括构建运行时镜像、初始化共享卷、挂载证书、Kubernetes 配置和冒烟测试。
- 在
envs/core-services/dify-agent.env中将DIFY_AGENT_RUNTIME_BACKEND设为openshell,并填写下表中的变量。 - 运行
docker compose up -d重建 Agent 后端。必填值缺失或格式有误时,Agent 后端会拒绝启动。 - 运行一个 Agent,确认配置无误。Agent 后端要等到 Agent 运行时,或在 Agent 的构建对话中点击 应用 时,才会首次连接网关。因此端点、凭证或镜像配置有误,要到那时才会暴露出来,表现为运行失败或 应用 失败。
DIFY_AGENT_OPENSHELL_EGRESS_ALLOW。Agent 轨迹导出
想在已有的追踪后端中查看 Agent 做了什么,可开启轨迹导出。开启后,Agent 后端会通过 OTLP/HTTP 把 Agent 运行的追踪数据(包括模型请求和工具调用)发送到 OpenTelemetry 收集器。部署中所有工作空间的运行都发往同一个收集器。 每个 span 都带有所属工作空间、应用、Agent、终端用户、对话、工作流运行和节点的 ID,因此可按dify.app_id、dify.conversation.id 等属性,把追踪数据筛选到单个应用或单个对话。即使关闭内容导出,这些 ID 也会导出。
轨迹导出独立于 API 和 Worker 的 OpenTelemetry 插桩。
LLMOps 追踪投递 则会影响它。LLMOps 追踪投递需要应用开发者在每个应用中单独配置 Langfuse 等供应商。在其中开启 Agent 追踪后,已由所在应用追踪的运行只发往该应用的追踪供应商,其余 Agent 运行仍进入收集器。
按以下步骤开启轨迹导出:
-
在
docker/envs/core-services/dify-agent.env中,将DIFY_AGENT_TRAJECTORY_ENABLED设为true,将DIFY_AGENT_TRAJECTORY_OTLP_TRACES_ENDPOINT设为收集器的 traces URL。凭证(如有)写在DIFY_AGENT_TRAJECTORY_OTLP_HEADERS中。 Agent 后端不读取api-worker.env,因此这些变量写在其中不会生效。 -
运行
docker compose up -d重建 Agent 后端。任一值无效时,Agent 后端都无法启动,修正之前 Agent 运行会一直失败。 -
让 Agent 执行一个会调用工具的任务,然后在追踪后端中查找服务名为
dify-agent-trajectory的工具调用 span。
数据库服务
这些变量直接在 Docker Compose 中配置数据库与 Redis 容器。标注「中间件栈」的行只适用于 源码部署 所启动的那套栈,在其middleware.env 中设置;完整的 Compose 栈将这些服务保留在内部网络中。
沙箱服务
sandbox 服务负责运行代码执行节点、模板转换节点、Jinja2 提示词和内置 Code 工具。
如需替换默认 API 密钥,在 docker/.env 中将 SANDBOX_API_KEY 和 CODE_EXECUTION_API_KEY 设为同一个强密钥,然后运行 docker compose up -d。两者不一致时,代码执行节点和模板转换节点会失败并返回 HTTP 401。
保持 SANDBOX_ENABLE_NETWORK=true。即使代码不发起任何网络调用,Dify 每次在沙箱中运行代码时也都会请求网络权限。设为 false 后,上述功能都会失败,并报错 network is disabled, please enable it in the configuration。
沙箱中的代码无法直接访问互联网:对外的 HTTP 和 HTTPS 请求都要经过 SSRF 代理。但它仍可直接连接同一内部网络(ssrf_proxy_network)中的 API、Worker、插件守护进程等服务。如果代码不得访问这些服务,需自行隔离沙箱的网络。
Nginx 反向代理
CONSOLE_API_URL、CONSOLE_WEB_URL)更新为使用 https://。Certbot 配置
RESPECT_XFORWARD_HEADERS_ENABLED
默认值:Docker Compose 部署为true,源码部署为 false
开启后,Dify 会读取 API 前面那一层代理发来的 X-Forwarded-For 请求头,从中获取每个访问者的 IP 地址。
Docker Compose 部署位于 Cloudflare、负载均衡器或其他代理之后时,保持开启,并 配置自带的 Nginx 信任你的代理。配置完成前,所有访问者都会显示为代理的地址,共用同一份限额,比如登录邮件的发送限额。
源码部署时,如果 API 前面只有一层代理,这层代理会设置 X-Forwarded-For,而且是访问 API 的唯一入口,就开启此变量。
SSRF 代理
这些变量配置基于 Squid 的 SSRF 代理容器,该容器阻止对内部/私有网络的请求。Docker Compose
将 Compose 设置保存在docker/.env 中:Compose 会在启动任何容器之前读取这些设置。
修改 DB_TYPE 或 VECTOR_STORE 时,需相应更新 COMPOSE_PROFILES,具体步骤详见 数据库配置 和 VECTOR_STORE。
模型供应商与工具位置配置
自定义应用界面中可用的工具和模型供应商及其显示顺序。使用逗号分隔的值,项目之间不要有空格。插件守护进程配置
插件守护进程是一个独立的服务,管理插件的生命周期(安装、执行、升级)。API 通过 HTTP 与其通信。Creator Center 配置
Creator Center(creators.dify.ai)是用户将 Dify 应用以模板形式提交的入口。提交的模板经审核通过后会在 Dify Marketplace 上线。Dify 控制台会在新的浏览器标签页中打开 Creator Center 页面。
工作室中的「发布到 Marketplace」操作会把应用导出为应用包(.ifpkg)并上传至 Creator Center,用户随后在那里完成提交。详见 发布应用到 Marketplace。
OTLP / OpenTelemetry 配置
OpenTelemetry 提供分布式追踪和指标收集。启用后,Dify 对 Flask 进行仪器化并将遥测数据导出到 OTLP 收集器。杂项
定时任务配置
Dify 使用 Celery Beat 按可配置的计划运行后台维护任务。记录保留与清理
这些变量控制旧消息与工作流运行记录的定时清理,超过保留天数的记录会分批删除。阿里云 SLS 日志存储配置
与阿里云简单日志服务(SLS)的可选集成,用于将工作流执行日志存储在外部而非数据库中。通过将仓库配置变量设置为使用 logstore 实现来启用。事件总线配置
API 和 Celery 工作进程之间基于 Redis 的事件传输。向量数据库服务配置
这些变量配置向量数据库容器本身。Weaviate 服务
Weaviate 服务
docker/envs/vectorstores/weaviate.env 中设置 WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=false。在同一文件中,将 WEAVIATE_API_KEY 设为强密钥,并将其加入 WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS。只替换密钥不会关闭匿名访问。Milvus 服务(ETCD + MinIO)
Milvus 服务(ETCD + MinIO)
OpenSearch 服务
OpenSearch 服务
OPENSEARCH_MEMLOCK_* 和 OPENSEARCH_NOFILE_* 需要在 docker/.env 中设置:Compose 会在加载服务文件之前读取它们。Qdrant 服务
Qdrant 服务
docker/.env 中设置:Compose 会在加载服务文件之前读取它们。PGVector / PGVecto.RS 服务
PGVector / PGVecto.RS 服务
Oracle / Chroma / Elasticsearch 服务
Oracle / Chroma / Elasticsearch 服务
IRIS / 其他服务
IRIS / 其他服务
插件守护进程存储配置
插件守护进程可以在不同的存储后端中存储插件包。仅配置与PLUGIN_STORAGE_TYPE 匹配的提供商。
插件 S3 存储
插件 S3 存储
插件 Azure Blob 存储
插件 Azure Blob 存储
插件腾讯 COS 存储
插件腾讯 COS 存储
插件阿里云 OSS 存储
插件阿里云 OSS 存储
插件火山引擎 TOS 存储
插件火山引擎 TOS 存储