生产环境部署 Dify 工作流服务推荐使用官方提供的 Docker Compose 方案,重点在于修改默认密钥和配置持久化存储。风险边界在于未修改默认密码可能导致数据泄露,未配置 HTTPS 会导致通信明文传输。
先说结论:Docker Compose 适合单节点或小规模集群的生产部署,需严格配置环境变量和安全策略。
- 适合:中小规模私有化部署、内部工具平台、快速验证生产流程。
- 先准备:独立域名、SSL 证书、修改后的强密码密钥、持久化存储路径。
- 验收:通过健康检查接口、确认数据卷持久化、验证 HTTPS 访问正常。
命令速用版
以下命令用于获取官方代码库并启动基础服务,生产环境需在启动前修改配置文件。
git clone https://github.com/langgenius/dify.git
cd dify/docker
cp .env.example .env
docker compose up -d
为什么会这样
Dify 架构包含 Web 前端、API 服务、Worker 异步任务和向量数据库等多个微服务,Docker Compose 能统一管理依赖关系。
生产环境直接使用默认配置存在安全风险,因为示例文件包含公开密钥和弱密码。工作流服务依赖后端 API 和 Worker 组件协同运行,单独部署部分组件会导致任务无法执行。持久化存储配置缺失会导致容器重启后数据丢失。
分步处理
第一步:获取代码并隔离配置
从官方 GitHub 仓库克隆最新稳定分支,进入 docker 目录。将 .env.example 复制为 .env,此文件包含所有服务启动参数。
第二步:修改安全密钥
编辑 .env 文件,找到 SECRET_KEY 字段,生成新的随机字符串替换默认值。修改 DB_PASSWORD 和 REDIS_PASSWORD,确保数据库和缓存服务使用强密码。公开资料中没有看到可靠的量化数据表明特定密钥长度要求,建议至少 16 位复杂字符。
第三步:配置持久化存储
检查 docker-compose.yaml 中的 volumes 部分,确保 PostgreSQL 数据目录、Redis 数据目录和向量数据库数据目录映射到宿主机路径。生产环境建议将数据目录挂载到独立磁盘分区,避免系统盘空间不足。
第四步:配置反向代理和 HTTPS
Dify 默认暴露 80 端口,生产环境建议在容器外部署 Nginx 或 Traefik 进行反向代理。配置 SSL 证书强制 HTTPS 传输,避免工作流配置信息和 API 密钥在传输中被窃取。
第五步:启动服务
执行 docker compose up -d 启动所有容器。首次启动向量数据库可能需要较长时间初始化,需等待所有容器状态变为 healthy。
怎么验证是否生效
使用 docker compose ps 命令检查所有容器状态,确保 api、worker、web、db、redis 等核心组件状态为 Up。
查看 API 容器日志,确认没有启动报错。访问配置的域名或 IP,确认能打开 Dify 登录页面。
调用健康检查接口,例如 curl https://your-domain.com/api/health,返回状态码 200 表示服务正常。
创建一个简单工作流并运行,确认异步任务能正常完成,验证 Worker 组件工作正常。
常见坑
默认密钥未修改:直接使用 .env.example 中的 SECRET_KEY 会导致会话被伪造,必须在启动前修改。
向量数据库内存不足:Weaviate 或 Milvus 等向量数据库对内存要求较高,内存不足会导致容器频繁重启。公开资料中没有看到可靠的量化数据表明具体数值,建议根据数据量预留充足内存。
端口冲突:宿主机若已占用 5432、6379 等默认端口,需在 docker-compose.yaml 中修改映射端口。
数据未持久化:未配置 volumes 导致容器删除后数据库数据丢失,生产环境必须检查挂载路径。
常见问题
数据是否会随容器删除而丢失?
正确配置 volumes 挂载后数据不会丢失。
只要 docker-compose.yaml 中定义了数据卷映射到宿主机目录,容器重建不影响数据。
如何扩展 Dify 服务能力?
小规模扩展可增加 API 和 Worker 副本数。
Docker Compose 支持 scale 参数,大规模部署建议迁移至 Kubernetes 集群。
生产环境必须配置 HTTPS 吗?
生产环境强烈建议配置 HTTPS。
明文传输会导致 API 密钥和工作流数据泄露,反向代理配置 SSL 是标准安全实践。
参考来源
Dify Official Documentation, Deployment Guide, https://docs.dify.ai
langgenius/dify GitHub Repository, https://github.com/langgenius/dify