Dify 生产环境 Docker 部署实战:从上线到备份运维一次讲清
Dify Docker部署教程|生产环境实测
Dify 是一款开源的 LLMOps 平台,适合用于快速搭建 AI 应用、Agent、知识库问答、工作流编排以及企业内部智能助手。相比从零开发一套大模型应用系统,Dify 提供了可视化配置、模型接入、Prompt 管理、数据集管理、API 发布、应用监控等完整能力,非常适合个人开发者、创业团队以及企业内部落地 AI 应用。
本文将以生产环境部署视角,介绍如何使用 Docker / Docker Compose 部署 Dify,并结合实际部署经验说明服务器配置、环境变量、域名 HTTPS、数据持久化、升级维护以及常见问题处理。文章内容偏实战,适合希望把 Dify 正式部署到服务器上的读者参考。
一、部署前准备
在开始部署之前,建议先准备一台 Linux 服务器。Dify 虽然可以在本地运行,但如果用于团队协作或生产环境,最好部署在云服务器或内网服务器上。
1. 推荐服务器配置
生产环境建议配置如下:
| 项目 | 推荐配置 |
|---|---|
| CPU | 4 核及以上 |
| 内存 | 8GB 起步,建议 16GB |
| 磁盘 | 50GB 起步,建议 SSD |
| 系统 | Ubuntu 22.04 LTS / Debian 12 / CentOS Stream |
| 网络 | 可访问外网,或已配置模型服务内网地址 |
如果只是测试体验,2 核 4GB 也能跑起来,但生产环境不建议这么低。Dify 本身会启动多个服务,包括 API、Worker、Web、PostgreSQL、Redis、向量数据库、Sandbox 等,内存不足时容易出现服务频繁重启、任务卡住、知识库导入失败等问题。
2. 域名准备
生产环境强烈建议准备一个域名,例如:
dify.example.com
然后将域名解析到服务器公网 IP。
如果是在企业内网部署,也可以使用内网 DNS,例如:
dify.company.local
虽然直接用 IP 访问也可以,但后续配置 HTTPS、第三方登录、API 回调、Webhook 等功能时,域名会方便很多。
3. 软件环境要求
需要提前安装:
- Docker
- Docker Compose
- Git
- Nginx,可选但生产环境推荐
- Certbot,可选,用于申请 HTTPS 证书
二、安装 Docker 与 Docker Compose
以下以 Ubuntu 22.04 为例。
1. 更新系统依赖
sudo apt update
sudo apt upgrade -y
2. 安装基础工具
sudo apt install -y ca-certificates curl gnupg lsb-release git
3. 安装 Docker
curl -fsSL https://get.docker.com | bash
安装完成后查看版本:
docker version
将当前用户加入 docker 用户组,避免每次都使用 sudo:
sudo usermod -aG docker $USER
执行后建议重新登录服务器,或者执行:
newgrp docker
4. 安装 Docker Compose
现在 Docker 官方通常已经集成 Compose 插件,可以直接查看:
docker compose version
如果能够正常输出版本号,说明已经安装完成。
三、下载 Dify 项目
进入你希望存放项目的目录,例如 /opt:
cd /opt
sudo git clone https://github.com/langgenius/dify.git
cd dify
Dify 的 Docker 部署文件位于 docker 目录下:
cd docker
查看目录:
ls
通常会看到类似文件:
docker-compose.yaml
.env.example
nginx
volumes
四、配置环境变量
Dify Docker 部署的核心配置文件是 .env。官方提供了示例文件,我们先复制一份:
cp .env.example .env
然后编辑:
vim .env
如果不熟悉 vim,也可以使用 nano:
nano .env
1. 必须关注的基础配置
以下是生产环境中比较重要的配置项。
SECRET_KEY
SECRET_KEY=
这个字段非常重要,用于加密敏感信息。生产环境一定要设置一个足够复杂的随机字符串。
可以使用下面命令生成:
openssl rand -base64 42
然后填入:
SECRET_KEY=your_generated_secret_key
注意:部署后不要随意修改
SECRET_KEY,否则可能导致已保存的模型密钥、凭证等无法解密。
CONSOLE_WEB_URL
CONSOLE_WEB_URL=https://dify.example.com
这是 Dify 控制台访问地址。生产环境建议使用 HTTPS 域名。
APP_WEB_URL
APP_WEB_URL=https://dify.example.com
这是应用访问地址。如果你计划将控制台和应用部署到同一个域名,可以保持一致。
API_URL
API_URL=https://dify.example.com
API 服务地址,前端会通过这个地址访问后端接口。
FILES_URL
FILES_URL=https://dify.example.com
文件访问地址,如果使用本地存储,一般也填写同一个域名。
五、配置数据库与 Redis
Dify 默认的 Docker Compose 会启动 PostgreSQL 和 Redis。对于中小规模生产环境,使用内置 PostgreSQL 和 Redis 是可以的,但一定要做好数据持久化和备份。
1. PostgreSQL 配置
.env 中通常会有类似配置:
DB_USERNAME=postgres
DB_PASSWORD=your_password
DB_HOST=db
DB_PORT=5432
DB_DATABASE=dify
建议修改默认密码:
DB_PASSWORD=change_this_to_a_strong_password
密码不要使用简单字符串,例如 123456、password、dify 等。
2. Redis 配置
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=
生产环境建议设置 Redis 密码:
REDIS_PASSWORD=your_redis_password
如果修改 Redis 密码,要确保 Compose 文件和相关服务能够正确读取该配置。一般官方 Compose 已经通过环境变量关联。
六、配置向量数据库
Dify 支持多种向量数据库,例如:
- Weaviate
- Qdrant
- Milvus
- PGVector
- Elasticsearch
- OceanBase Vector 等
默认 Docker 部署通常会包含一种默认向量数据库方案,具体取决于 Dify 版本。对于一般团队使用,默认配置即可满足大部分场景。
如果是生产环境,并且知识库数据较多,建议根据规模选择:
| 场景 | 推荐方案 |
|---|---|
| 小团队、轻量知识库 | 默认向量数据库或 PGVector |
| 中等规模知识库 | Qdrant / Weaviate |
| 大规模检索、高并发 | Milvus / Elasticsearch / 专用向量数据库服务 |
如果你希望简单稳定,建议先使用官方默认方案部署,等知识库规模变大后再迁移到独立向量数据库。
七、启动 Dify 服务
配置完成后,在 docker 目录下执行:
docker compose up -d
首次启动需要拉取镜像,时间取决于服务器网络环境。
查看容器状态:
docker compose ps
如果所有服务状态都是 running 或 healthy,说明启动成功。
查看日志:
docker compose logs -f
也可以查看某个服务日志,例如:
docker compose logs -f api
docker compose logs -f worker
docker compose logs -f web
如果启动完成后,通过浏览器访问服务器 IP 或域名,即可进入 Dify 初始化页面。
八、初始化管理员账号
首次访问 Dify 时,系统会要求创建管理员账号。建议使用企业邮箱或专门的运维邮箱,例如:
admin@example.com
设置强密码后即可进入控制台。
进入控制台后,可以先完成以下检查:
- 是否可以正常登录;
- 页面是否有接口报错;
- 是否可以进入“设置”页面;
- 是否可以添加模型供应商;
- 是否可以创建应用;
- 是否可以测试一次对话。
如果这些步骤都正常,说明基础部署已经成功。
九、配置大模型供应商
Dify 本身不直接提供大模型推理能力,需要接入模型供应商。常见选择包括:
- OpenAI
- Azure OpenAI
- Anthropic Claude
- Google Gemini
- DeepSeek
- 阿里云通义千问
- 火山引擎豆包
- 百度千帆
- 智谱 GLM
- Ollama 本地模型
- Xinference
- OpenAI 兼容接口
在控制台中进入:
设置 → 模型供应商
根据实际情况配置 API Key 和模型名称。
如果生产环境部署在国内服务器,访问海外模型服务可能存在网络问题。建议优先考虑以下方案:
- 使用国内模型服务商;
- 使用 Azure OpenAI 区域资源;
- 部署本地模型服务,例如 Ollama、vLLM、Xinference;
- 使用企业内部统一的大模型网关。
十、配置 Nginx 反向代理
虽然 Dify Docker Compose 中通常自带 Nginx 服务,但生产环境中我更推荐在宿主机或统一网关层配置 Nginx,便于统一管理 HTTPS、访问日志、安全策略和反向代理。
1. 安装 Nginx
sudo apt install -y nginx
2. 新建站点配置
sudo vim /etc/nginx/sites-available/dify.conf
写入以下配置,假设 Dify 内部服务暴露在 127.0.0.1:80:
server {
listen 80;
server_name dify.example.com;
client_max_body_size 100M;
location / {
proxy_pass http://127.0.0.1:80;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 300s;
proxy_send_timeout 300s;
}
}
启用配置:
sudo ln -s /etc/nginx/sites-available/dify.conf /etc/nginx/sites-enabled/dify.conf
sudo nginx -t
sudo systemctl reload nginx
如果宿主机 80 端口已经被 Dify 自带 Nginx 容器占用,需要调整 Docker Compose 中的端口映射,或者让宿主机 Nginx 代理到 Dify 暴露的其他端口,例如
127.0.0.1:8080。
十一、配置 HTTPS 证书
生产环境建议必须开启 HTTPS,否则浏览器安全策略、API 调用、文件上传下载、第三方集成都可能出现问题。
使用 Let’s Encrypt 免费证书:
sudo apt install -y certbot python3-certbot-nginx
申请证书:
sudo certbot --nginx -d dify.example.com
按照提示完成配置后,Certbot 会自动修改 Nginx 配置,并启用 HTTPS。
检查自动续期:
sudo certbot renew --dry-run
如果没有报错,说明证书续期正常。
十二、文件上传与存储配置
Dify 支持上传文档构建知识库,因此文件存储非常重要。默认情况下,Docker 部署通常使用本地存储,并通过 volume 持久化。
生产环境中需要关注两点:
- Docker volume 是否持久化;
- 是否需要迁移到对象存储。
如果团队只是内部使用,本地存储可以满足。但如果是多节点部署或文件量较大,建议使用对象存储,例如:
- AWS S3
- 阿里云 OSS
- 腾讯云 COS
- MinIO
- 华为云 OBS
对象存储的优点是可扩展、易备份、适合分布式部署。缺点是配置稍复杂,并且需要额外关注权限与访问策略。
十三、数据持久化与备份
这是生产环境部署中最容易被忽略但最重要的部分。Dify 的关键数据通常包括:
- PostgreSQL 数据;
- Redis 数据;
- 向量数据库数据;
- 上传文件;
.env配置;- Docker Compose 配置;
- Nginx 配置与 HTTPS 证书。
1. 查看 Docker volume
docker volume ls
也可以查看当前 Compose 项目相关 volume:
docker compose config
2. PostgreSQL 备份
如果使用 Docker 内置 PostgreSQL,可以通过以下命令备份:
docker compose exec db pg_dump -U postgres dify > dify_backup.sql
如果密码或用户名不同,请替换命令中的用户名和数据库名。
恢复时可以使用:
cat dify_backup.sql | docker compose exec -T db psql -U postgres dify
3. 定时备份建议
建议每天凌晨执行一次数据库备份,并保留最近 7 到 30 天。
可以创建脚本:
mkdir -p /opt/backups/dify
vim /opt/backups/dify/backup.sh
写入:
#!/bin/bash
DATE=$(date +%F_%H-%M-%S)
BACKUP_DIR=/opt/backups/dify
cd /opt/dify/docker || exit 1
docker compose exec -T db pg_dump -U postgres dify > $BACKUP_DIR/dify_$DATE.sql
find $BACKUP_DIR -name "dify_*.sql" -mtime +14 -delete
添加执行权限:
chmod +x /opt/backups/dify/backup.sh
添加 crontab:
crontab -e
写入:
0 3 * * * /opt/backups/dify/backup.sh
这样每天凌晨 3 点会自动备份一次。
十四、生产环境安全加固
Dify 部署完成后,建议做一些基础安全加固。
1. 不要开放不必要端口
服务器安全组建议只开放:
- 80
- 443
- 22,最好限制 IP
- 其他业务必要端口
PostgreSQL、Redis、向量数据库端口不应暴露到公网。
检查监听端口:
sudo ss -lntp
2. SSH 安全配置
建议:
- 禁用 root 直接登录;
- 使用密钥登录;
- 修改默认 SSH 端口;
- 使用云厂商安全组限制来源 IP。
编辑 SSH 配置:
sudo vim /etc/ssh/sshd_config
常见配置:
PermitRootLogin no
PasswordAuthentication no
重启 SSH:
sudo systemctl restart ssh
操作前一定要确认密钥登录可用,否则可能把自己锁在服务器外。
3. 管理员账号安全
Dify 管理员账号应使用强密码,并尽量避免多人共用同一个账号。如果企业内部使用,建议结合 SSO 或统一身份认证方案。
4. API Key 管理
Dify 中会保存模型供应商 API Key,这些密钥非常敏感。建议:
- 使用独立项目 Key;
- 设置额度限制;
- 定期轮换;
- 不要把高权限 Key 放入测试环境;
- 不要在 Prompt 或日志中泄露密钥。
十五、升级 Dify
Dify 迭代速度较快,生产环境升级前一定要备份。
1. 备份数据
cd /opt/dify/docker
docker compose exec -T db pg_dump -U postgres dify > /opt/backups/dify_before_upgrade.sql
同时建议备份 .env:
cp .env /opt/backups/dify_env_before_upgrade
2. 拉取最新代码
cd /opt/dify
git pull
进入 docker 目录:
cd docker
如果 .env.example 有变化,建议对比新旧配置:
diff .env.example .env
根据需要补充新配置项。
3. 拉取镜像并重启
docker compose pull
docker compose up -d
查看日志:
docker compose logs -f
升级后重点检查:
- 登录是否正常;
- 应用是否能打开;
- 模型调用是否正常;
- 知识库检索是否正常;
- Worker 是否有异常日志;
- 数据库迁移是否成功。
十六、常见问题排查
1. 容器启动失败
先查看状态:
docker compose ps
再查看日志:
docker compose logs -f
常见原因包括:
- 端口被占用;
.env配置错误;- 镜像拉取失败;
- 数据库密码不一致;
- 服务器内存不足。
查看端口占用:
sudo lsof -i:80
sudo lsof -i:443
2. 页面可以打开,但接口报错
通常是 URL 配置问题。重点检查:
CONSOLE_WEB_URL
APP_WEB_URL
API_URL
FILES_URL
如果你使用 HTTPS,但这些地址仍然写的是 HTTP,可能会出现跨域、接口请求失败、文件无法访问等问题。
3. 知识库文档上传失败
可能原因:
- 文件过大;
- Nginx
client_max_body_size太小; - Worker 异常;
- 向量数据库异常;
- Embedding 模型未配置或不可用。
建议先查看 Worker 日志:
docker compose logs -f worker
同时检查 Nginx 上传限制:
client_max_body_size 100M;
4. 模型调用超时
如果使用海外模型服务,可能是网络不稳定。可以:
- 更换国内模型供应商;
- 增加代理;
- 使用云厂商同地域服务;
- 部署本地模型;
- 调整 Nginx 超时时间。
Nginx 中可设置:
proxy_read_timeout 300s;
proxy_send_timeout 300s;
5. 内存不足导致服务重启
查看系统内存:
free -h
查看容器资源:
docker stats
如果服务器只有 4GB 内存,导入大文档或同时运行多个服务时很容易 OOM。生产环境建议至少 8GB,最好 16GB。
十七、生产环境实测建议
根据实际部署经验,Dify 在生产环境中主要需要关注以下几点。
1. 不要只看“能跑起来”
很多教程到 docker compose up -d 就结束了,但生产环境远不止如此。真正上线前至少要验证:
- 数据是否持久化;
- 容器重启后是否正常;
- 服务器重启后是否自动恢复;
- HTTPS 是否正常;
- 文件上传下载是否正常;
- 知识库检索是否正常;
- 模型调用是否稳定;
- 数据库是否有备份;
- 监控和日志是否可追踪。
2. 模型服务稳定性比 Dify 本身更关键
很多人以为 Dify 卡顿是平台问题,实际上大量问题来自模型 API:
- 模型服务限流;
- API Key 额度不足;
- 网络访问不稳定;
- Embedding 模型响应慢;
- Rerank 服务不可用;
- 上下文过长导致请求失败。
因此生产环境建议把模型调用链路单独测试清楚,尤其是知识库应用,需要同时依赖 Chat Model、Embedding Model,有时还会依赖 Rerank Model。
3. 知识库规模要循序渐进
不要一开始就上传大量文件。建议先用 10 到 50 篇文档测试:
- 文档解析是否正常;
- 分段效果是否合理;
- Embedding 是否成功;
- 检索结果是否准确;
- 回答是否引用正确;
- 响应速度是否可接受。
确认无问题后,再逐步扩大数据量。
4. 重要应用建议区分测试环境和生产环境
如果 Dify 已经承载企业内部业务,建议至少准备两个环境:
- 测试环境:用于升级验证、新模型测试、Prompt 调试;
- 生产环境:稳定运行,不随意修改配置。
尤其是 Dify 版本升级、模型切换、知识库重建,都建议先在测试环境验证。
十八、推荐部署架构
对于中小型团队,可以采用以下架构:
用户
↓
HTTPS / Nginx
↓
Dify Web/API
↓
PostgreSQL + Redis + 向量数据库
↓
模型供应商 / 本地模型服务
如果团队规模较大,可以进一步拆分:
用户
↓
负载均衡
↓
Nginx / Ingress
↓
Dify API 多实例 + Worker 多实例
↓
独立 PostgreSQL
↓
独立 Redis
↓
独立向量数据库
↓
对象存储
↓
企业模型网关
对于大多数公司内部使用场景,第一种架构已经足够。只有当并发量明显上升、知识库数据非常大、模型调用链路复杂时,才需要考虑多节点与高可用架构。
十九、上线检查清单
正式上线前,可以按照下面清单检查:
- [ ] 域名解析正确;
- [ ] HTTPS 证书有效;
- [ ] 管理员账号已创建;
- [ ] 默认密码已修改;
- [ ]
SECRET_KEY已设置; - [ ] PostgreSQL 密码已修改;
- [ ] Redis 密码已配置;
- [ ] 数据 volume 已确认;
- [ ] 数据库备份脚本已配置;
- [ ] 服务器安全组已限制;
- [ ] 不必要端口未暴露;
- [ ] 模型供应商已配置;
- [ ] Embedding 模型可用;
- [ ] 知识库上传测试通过;
- [ ] 应用 API 调用测试通过;
- [ ] 容器重启测试通过;
- [ ] 服务器重启后服务可恢复;
- [ ] 日志查看方式已确认;
- [ ] 升级回滚方案已准备。
二十、总结
使用 Docker 部署 Dify 并不复杂,核心步骤可以概括为:
- 准备服务器和域名;
- 安装 Docker 与 Docker Compose;
- 下载 Dify 源码;
- 配置
.env; - 启动 Docker Compose;
- 初始化管理员账号;
- 配置模型供应商;
- 配置 Nginx 和 HTTPS;
- 做好数据持久化和备份;
- 按生产环境标准进行安全加固和运维监控。
从实测经验来看,Dify 非常适合快速构建企业级 AI 应用原型,并且具备一定生产可用性。但如果要长期稳定运行,不能只停留在“能访问页面”的层面,而要重点关注备份、安全、模型稳定性、知识库质量、升级策略和资源监控。
对于个人开发者,Docker Compose 默认部署已经足够;对于企业生产环境,建议使用独立数据库、独立 Redis、对象存储和统一模型网关,并建立测试环境和备份机制。只要这些基础设施完善,Dify 可以成为企业内部 AI 应用落地的一套高效平台。