本文档由 AI 自动翻译。如有任何不准确之处,请参考 英文原版。
部署前准备
硬件
- CPU:至少 2 核
- 内存:至少 4 GiB
软件
安装 Docker 和 2.35.0 或更高版本的 Docker Compose,并确保 Docker 守护进程正在运行。此外,还需用 Git 下载 Dify,用 OpenSSL 为 Agent 的本地沙箱生成令牌。
开始前检查 Compose 版本:
部署并启动
已有部署改按 升级 步骤操作,以保留其配置和数据。
1
获取 Dify 发行版
从 Dify releases 选择一个版本并克隆,将
<version> 替换为该版本的标签:2
配置启动设置
从模板创建配置文件:为 Agent 的本地沙箱生成令牌:在
.env 中,将 DIFY_AGENT_LOCAL_SANDBOX_AUTH_TOKEN 设为上面命令的输出。Agent 后端和它的本地沙箱都要有这个共享令牌才能启动。3
启动并检查服务
在 持续运行的服务应显示
dify/docker 中运行:Up 或 healthy。init_permissions 任务只运行一次,负责准备存储权限,完成后显示 Exited (0)。访问
在浏览器中打开http://localhost/install,创建管理员账户,然后在 http://localhost 登录。
远程部署时,将 localhost 替换为服务器的 IP 地址或域名。默认 HTTP 端口为 80。如果 80 端口已被占用,在 docker/.env 中将 EXPOSE_NGINX_PORT 设为其他端口,并在访问地址中带上该端口。
自定义
作用于整个部署的设置写在docker/.env 中,包括 Compose profile、对外发布的端口、挂载路径、健康检查调度,以及 安全加固 中的共享凭据。
其他设置按服务分开存放。大多数服务会加载 docker/envs/ 下自带的 .defaults 文件。不要改动这些文件,把修改写进注释里指明的本地 .env 文件。API、Worker 和定时任务共用的设置写在 envs/core-services/api-worker.env 中。
例如,要将 Nginx 的请求体大小上限提高到 200M,在 dify/docker 中执行以下步骤:
1
设置覆盖值
如果 在
envs/infrastructure/nginx.env 不存在,先创建:envs/infrastructure/nginx.env 中设置:2
应用修改
验证配置,然后重建受影响的容器:这里要用
up -d,不能用 docker compose restart:restart 会沿用容器原有的环境变量。3
检查生效值
查看 Nginx 当前生效的配置:输出应包含
client_max_body_size 200M;。如果显示的是其他值,先检查 docker/.env 中是否设置了覆盖值;值还可能来自其他位置,详见 优先级。安全加固
开放给他人访问之前,先配置 HTTPS,并替换docker/.env 中自带的开发凭据:
- 数据库和 Redis:
DB_PASSWORD和REDIS_PASSWORD。 - 代码执行沙箱:将
SANDBOX_API_KEY和CODE_EXECUTION_API_KEY设为同一个强密钥。详见 沙箱服务。 - Weaviate:将
WEAVIATE_API_KEY设为强密钥,并把它加入WEAVIATE_AUTHENTICATION_APIKEY_ALLOWED_KEYS;再设置WEAVIATE_AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=false,强制要求身份认证。详见 向量数据库服务配置。 - 插件守护进程:为
PLUGIN_DAEMON_KEY和PLUGIN_DIFY_INNER_API_KEY分别设置不同的强密钥。详见 插件守护进程配置。 - Agent:替换
DIFY_AGENT_API_TOKEN,并按要求的格式生成DIFY_AGENT_SERVER_SECRET_KEY。保留配置启动设置时生成的DIFY_AGENT_LOCAL_SANDBOX_AUTH_TOKEN。
docker compose up -d 让新值生效。数据库密码例外:数据库初始化后,要先在数据库服务器上修改密码,再相应更新 DB_PASSWORD。
SECRET_KEY 保持原样即可:如果没有设置,Dify 会在首次启动时生成一个随机密钥,并与数据一起保存。之后再设置或修改它,用旧密钥签名的令牌和文件链接都会失效。它影响的全部内容详见 SECRET_KEY。升级
在 Dify releases 选择目标版本,并先阅读该版本的升级说明。 下面的每条 Compose 命令都要沿用该部署现有的项目名称和 Compose 文件(包括所用的-p、-f 选项或 COMPOSE_PROJECT_NAME),这样原有的命名卷才会继续挂载。
1
备份部署
-
在
dify/docker中停止部署,避免复制数据库文件时数据库仍在写入:如果无法停止部署,改用数据库自带的转储工具备份。 -
备份
docker/.env、本地服务.env文件、自定义 Compose 文件和持久化数据。持久化数据包括docker/volumes/,以及所用的外部数据库和存储。 -
如果部署包含
local_sandbox,还需备份它挂载到/home/dify和/workspace的命名卷。卷名带有 Compose 项目前缀,可用以下命令列出: -
保存
docker compose config的输出,用于更新后对比。输出包含密钥,需妥善保管。
2
更新到新版本
Git 不跟踪本地 然后将修改重新应用到新版本的文件中(例如运行
.env 文件和 docker/volumes/ 中的数据,因此检出新版本后,它们仍保留在原处。如果修改过 docker-compose.yaml 等 Git 跟踪的文件,先暂存这些修改。在仓库根目录运行:git stash pop),如有冲突,逐一解决。3
检查配置
对比
docker/.env.example 与现有的 docker/.env,并将每个本地服务文件与对应的 .defaults 或 .env.example 模板对比。在现有文件中更新所需的设置;直接用模板覆盖这些文件,会丢掉你设置的覆盖值。如果某项设置在模板中改了名,改用新名称。Container variable mappings 下的各行保持不变。保留现有数据库,以及知识库仍在使用的每个向量数据库,连同它们的连接设置和 Compose profile。修改 DB_TYPE 或 VECTOR_STORE 不会迁移数据。最后,将新的 docker compose config 输出与之前保存的副本对比,检查凭据、数据卷路径、profile 和你自定义的设置。4
应用并检查升级结果
在 持续运行的服务应显示
dify/docker 中运行:Up 或 healthy,init_permissions 应显示 Exited (0)。然后打开 Dify,试用依赖自定义设置的功能。