从 0 到上线:Dify 生产环境部署避坑实战指南
Dify 生产环境部署指南|零基础可学
随着大模型应用的普及,越来越多团队开始使用 Dify 来快速搭建 AI 应用、智能客服、知识库问答、Agent 工作流以及企业内部效率工具。Dify 的优势在于:开源、上手快、功能完整,并且支持可视化编排应用,让不具备深度算法背景的开发者也能快速构建 AI 产品。
不过,很多人在本地体验 Dify 时比较顺利,一旦准备部署到生产环境,就会遇到各种问题:服务器怎么选?域名怎么配置?Docker 怎么安装?HTTPS 怎么启用?数据库、对象存储、向量数据库如何处理?如何备份?如何保证服务稳定?
本文将以“零基础可学”为目标,带你从服务器准备开始,一步步完成 Dify 的生产环境部署,并补充生产环境中必须注意的安全、备份、监控和维护建议。
一、Dify 是什么?
Dify 是一个开源的大语言模型应用开发平台,支持快速构建以下类型的 AI 应用:
- AI 聊天助手
- 企业知识库问答系统
- 工作流自动化应用
- Agent 智能体
- 文本生成工具
- 多模型统一管理平台
- 面向业务人员的低代码 AI 应用平台
它内置了应用编排、Prompt 管理、知识库、向量检索、模型供应商接入、API 发布、权限管理等能力,非常适合企业快速落地 AI 应用。
二、生产环境部署前的准备
在正式部署之前,我们需要先准备好服务器、域名、基础软件环境和必要的账号信息。
三、服务器配置建议
Dify 本身由多个服务组成,例如:
- Web 前端
- API 后端
- Worker 异步任务
- PostgreSQL 数据库
- Redis 缓存
- 向量数据库
- Sandbox 代码执行环境
- Nginx 反向代理
如果只是个人测试,低配置服务器也能运行。但如果用于生产环境,建议配置不要太低。
1. 最低配置
适合个人学习、小规模测试:
| 项目 | 配置 |
|---|---|
| CPU | 2 核 |
| 内存 | 4GB |
| 硬盘 | 40GB |
| 系统 | Ubuntu 22.04 LTS |
| 部署方式 | Docker Compose |
注意:4GB 内存可以跑起来,但生产环境不推荐,服务较多时容易出现内存不足。
2. 推荐配置
适合小团队或企业初期使用:
| 项目 | 配置 |
|---|---|
| CPU | 4 核及以上 |
| 内存 | 8GB 及以上 |
| 硬盘 | 100GB SSD 及以上 |
| 系统 | Ubuntu 22.04 LTS |
| 部署方式 | Docker Compose |
| 域名 | 建议准备一个正式域名 |
| HTTPS | 必须开启 |
3. 较大规模生产配置
适合访问量较高或知识库数据较多的场景:
| 项目 | 建议 |
|---|---|
| API 服务 | 独立服务器或容器编排 |
| 数据库 | 使用云数据库 PostgreSQL |
| Redis | 使用云 Redis |
| 向量数据库 | 使用独立向量数据库服务 |
| 文件存储 | 使用 S3、MinIO 或云对象存储 |
| 网关 | 使用 Nginx / SLB / Ingress |
| 部署方式 | Docker Compose / Kubernetes |
对于零基础用户,建议先使用单机 Docker Compose 部署,等业务稳定后再逐步拆分数据库、Redis 和对象存储。
四、系统环境选择
本文推荐使用:
Ubuntu 22.04 LTS
原因如下:
- 社区资料多,遇到问题容易搜索;
- Docker 支持好;
- 长期支持版本,稳定性较好;
- 云服务器厂商普遍支持。
如果你使用的是 CentOS、Debian 或其他 Linux 发行版,也可以部署,但命令可能略有差异。
五、域名和端口规划
生产环境建议使用域名访问,而不是直接使用服务器 IP。
例如:
https://dify.example.com
你需要提前完成以下准备:
- 购买或准备一个域名;
- 将域名解析到服务器公网 IP;
- 开放服务器安全组端口;
- 配置 HTTPS 证书。
常用端口如下:
| 端口 | 用途 |
|---|---|
| 22 | SSH 登录服务器 |
| 80 | HTTP 访问,用于证书申请和跳转 |
| 443 | HTTPS 访问 |
| 3000 | Dify Web,通常不直接暴露 |
| 5001 | Dify API,通常不直接暴露 |
生产环境中,建议只对外开放:
22、80、443
其他内部服务端口不要直接暴露到公网。
六、安装 Docker 和 Docker Compose
Dify 官方推荐使用 Docker Compose 部署。Docker 可以理解为应用运行的“容器环境”,它能把复杂依赖封装起来,避免手动安装大量组件。
1. 更新系统软件包
登录服务器后执行:
sudo apt update
sudo apt upgrade -y
2. 安装基础工具
sudo apt install -y ca-certificates curl gnupg lsb-release git
3. 安装 Docker
执行以下命令安装 Docker:
curl -fsSL https://get.docker.com | bash
安装完成后,查看 Docker 版本:
docker --version
如果能看到版本号,说明 Docker 安装成功。
4. 设置 Docker 开机自启
sudo systemctl enable docker
sudo systemctl start docker
5. 安装 Docker Compose
新版本 Docker 一般已经内置 Compose 插件,可以执行:
docker compose version
如果能看到版本号,说明可用。
七、下载 Dify 源码
进入你希望部署应用的目录,例如:
cd /opt
拉取 Dify 项目:
sudo git clone https://github.com/langgenius/dify.git
进入 Docker 部署目录:
cd /opt/dify/docker
查看目录文件:
ls
你通常会看到类似文件:
docker-compose.yaml
.env.example
nginx
volumes
八、配置环境变量
Dify 的 Docker 部署依赖 .env 文件。一般会提供 .env.example 示例文件,我们需要复制一份并修改。
cp .env.example .env
然后编辑:
nano .env
如果你不熟悉 nano,可以记住:
- 保存:
Ctrl + O - 回车确认
- 退出:
Ctrl + X
1. 修改访问地址
生产环境中,最重要的是配置 Dify 对外访问地址。例如你的域名是:
https://dify.example.com
需要重点检查类似配置项:
CONSOLE_WEB_URL=https://dify.example.com
APP_WEB_URL=https://dify.example.com
SERVICE_API_URL=https://dify.example.com
不同版本 Dify 的环境变量名称可能略有差异,请以你当前 .env.example 文件为准。
2. 修改密钥
生产环境必须修改默认密钥,例如:
SECRET_KEY=请替换为足够复杂的随机字符串
你可以使用以下命令生成随机字符串:
openssl rand -base64 42
将输出结果复制到 .env 中。
3. 数据库密码
如果 .env 中存在 PostgreSQL、Redis 等默认密码,也建议修改,例如:
POSTGRES_PASSWORD=请替换为复杂密码
REDIS_PASSWORD=请替换为复杂密码
生产环境不要使用默认密码,也不要使用弱密码。
4. 文件存储配置
Dify 支持不同的文件存储方式。单机部署时,可以先使用本地存储。但生产环境更推荐使用对象存储,例如:
- AWS S3
- 阿里云 OSS
- 腾讯云 COS
- MinIO
如果初期只是小规模使用,可以先采用本地存储,后期再迁移到对象存储。
九、启动 Dify 服务
在 /opt/dify/docker 目录下执行:
docker compose up -d
参数说明:
up:启动服务;-d:后台运行。
查看容器状态:
docker compose ps
如果所有服务状态都是 running 或 healthy,说明启动正常。
查看日志:
docker compose logs -f
如果只想查看某个服务日志,例如 API:
docker compose logs -f api
十、初始化访问 Dify
如果你暂时没有配置 Nginx 和 HTTPS,可以先通过服务器 IP 和端口访问。例如:
http://服务器IP
但生产环境不建议长期使用 HTTP。
首次访问 Dify 时,系统会引导你创建管理员账号。请注意:
- 使用安全邮箱;
- 设置强密码;
- 不要多人共用管理员账号;
- 管理员账号创建后妥善保存。
十一、配置 Nginx 反向代理
虽然 Dify Docker 中通常已经包含 Nginx 服务,但在生产环境里,你可能会选择使用宿主机 Nginx 或云厂商负载均衡进行统一代理。
下面以宿主机 Nginx 为例。
1. 安装 Nginx
sudo apt install -y nginx
启动并设置开机自启:
sudo systemctl enable nginx
sudo systemctl start nginx
2. 新建站点配置
sudo nano /etc/nginx/sites-available/dify.conf
写入示例配置:
server {
listen 80;
server_name dify.example.com;
client_max_body_size 100M;
location / {
proxy_pass http://127.0.0.1:80;
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_pass需要根据你实际 Docker 暴露端口调整。如果 Dify 自带 Nginx 已经绑定了宿主机 80 端口,那么宿主机再安装 Nginx 会产生端口冲突。此时可以选择只使用 Dify 自带 Nginx,或者修改 Docker 映射端口。
启用配置:
sudo ln -s /etc/nginx/sites-available/dify.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
十二、配置 HTTPS 证书
生产环境强烈建议使用 HTTPS。这里使用 Let’s Encrypt 免费证书。
1. 安装 Certbot
sudo apt install -y certbot python3-certbot-nginx
2. 申请证书
sudo certbot --nginx -d dify.example.com
按照提示输入邮箱、同意协议,Certbot 会自动修改 Nginx 配置并启用 HTTPS。
3. 测试自动续期
sudo certbot renew --dry-run
如果没有报错,说明自动续期正常。
十三、接入大模型供应商
Dify 本身不是大模型,它是大模型应用开发平台。因此部署完成后,你还需要在后台配置模型供应商。
常见供应商包括:
- OpenAI
- Azure OpenAI
- Anthropic
- Google Gemini
- 阿里云通义千问
- 百度文心一言
- 智谱 GLM
- DeepSeek
- Ollama 本地模型
- OpenAI API 兼容服务
配置步骤通常是:
- 登录 Dify 控制台;
- 进入“设置”或“模型供应商”;
- 选择对应模型平台;
- 填写 API Key;
- 选择默认模型;
- 测试是否可用。
如果你在国内服务器部署,需要注意访问部分海外模型 API 可能存在网络不稳定问题。生产环境建议选择网络稳定、计费透明、服务可用性较高的模型供应商。
十四、配置知识库和向量数据库
Dify 的知识库能力依赖向量检索。Docker Compose 默认通常会包含一个向量数据库服务,例如 Weaviate、Qdrant、Milvus 或其他可选方案,具体取决于版本配置。
生产环境中你需要关注:
- 知识库文档数量;
- 文档切片大小;
- Embedding 模型选择;
- 向量数据库存储空间;
- 检索召回质量;
- 数据备份方式。
如果知识库数据较少,可以先使用默认配置。如果知识库数据越来越多,建议将向量数据库独立部署,避免与 Dify 主服务争抢资源。
十五、生产环境安全建议
Dify 一旦部署到公网,就必须重视安全问题。
1. 不暴露内部端口
不要将以下服务端口直接暴露到公网:
- PostgreSQL
- Redis
- 向量数据库
- Sandbox
- API 内部端口
公网只开放必要端口:
22、80、443
2. 使用强密码
包括:
- 服务器 SSH 密码或密钥;
- Dify 管理员密码;
- PostgreSQL 密码;
- Redis 密码;
- 对象存储密钥;
- 模型供应商 API Key。
3. 使用 SSH 密钥登录
建议禁用密码登录,仅允许密钥登录。
编辑 SSH 配置:
sudo nano /etc/ssh/sshd_config
设置:
PasswordAuthentication no
PermitRootLogin no
重启 SSH:
sudo systemctl restart ssh
操作前务必确认你的 SSH 密钥可以正常登录,否则可能把自己锁在服务器外。
4. 定期更新系统和镜像
sudo apt update && sudo apt upgrade -y
更新 Dify:
cd /opt/dify
git pull
cd docker
docker compose pull
docker compose up -d
更新前建议先备份。
十六、数据备份方案
生产环境中,备份比部署更重要。很多人只关注“能不能跑起来”,却忽略“数据丢了怎么办”。
Dify 需要重点备份:
- PostgreSQL 数据库;
- 上传文件;
- 向量数据库数据;
.env配置文件;- Nginx 配置;
- 对象存储数据;
- 自定义插件或扩展配置。
1. 备份 PostgreSQL
可以使用 pg_dump:
docker exec -t docker-db-1 pg_dump -U postgres dify > dify_backup.sql
容器名称可能不同,你可以通过以下命令查看:
docker ps
2. 备份 volumes 目录
在 Dify Docker 目录下,通常会有 volumes 目录:
cd /opt/dify/docker
tar -czvf dify_volumes_backup.tar.gz volumes
3. 备份环境配置
cp .env .env.backup
4. 建议备份策略
| 类型 | 频率 |
|---|---|
| 数据库 | 每天 |
| 文件数据 | 每天或每周 |
| 配置文件 | 每次修改后 |
| 全量备份 | 每周 |
| 异地备份 | 强烈建议 |
不要只把备份放在同一台服务器上。如果服务器磁盘损坏,本地备份也会一起丢失。建议同步到对象存储或另一台服务器。
十七、日志与监控
生产环境不能只看服务是否启动,还要关注运行状态。
1. 查看容器状态
docker compose ps
2. 查看资源占用
docker stats
3. 查看服务日志
docker compose logs -f
4. 查看磁盘空间
df -h
5. 查看内存使用
free -h
如果磁盘满了,服务可能会异常,数据库也可能损坏。因此建议配置磁盘告警。
生产环境可以接入以下监控方案:
- Prometheus + Grafana
- Zabbix
- Uptime Kuma
- 云厂商监控
- 日志采集系统
对于零基础用户,建议先部署 Uptime Kuma,用来监控 Dify 域名是否可访问。
十八、常见问题排查
1. 访问不了页面
检查以下内容:
docker compose ps
确认容器是否正常运行。
检查服务器安全组是否开放 80 和 443。
检查域名是否解析正确:
ping dify.example.com
检查 Nginx 配置:
sudo nginx -t
2. 容器启动失败
查看日志:
docker compose logs -f
常见原因包括:
- 端口被占用;
- 内存不足;
.env配置错误;- 镜像拉取失败;
- 数据库初始化失败。
3. 登录后页面接口报错
重点检查:
CONSOLE_WEB_URLAPP_WEB_URLSERVICE_API_URL- HTTPS 配置
- 反向代理 Header
- API 服务日志
4. 上传文件失败
可能原因:
- 文件大小超过 Nginx 限制;
- 存储目录权限错误;
- 对象存储配置错误;
- 磁盘空间不足。
可以在 Nginx 中设置:
client_max_body_size 100M;
5. 模型调用失败
检查:
- API Key 是否正确;
- 模型供应商余额是否充足;
- 服务器是否能访问模型 API;
- 模型名称是否填写正确;
- 是否触发供应商限流。
十九、升级 Dify 的正确姿势
Dify 更新较快,升级时不要直接盲目执行命令。建议流程如下:
1. 阅读版本说明
先查看官方 Release Notes,确认是否有破坏性变更。
2. 备份数据
至少备份:
- PostgreSQL;
- volumes;
.env;- Nginx 配置。
3. 拉取新代码
cd /opt/dify
git pull
4. 更新镜像并重启
cd docker
docker compose pull
docker compose up -d
5. 检查服务状态
docker compose ps
docker compose logs -f
6. 验证业务功能
检查:
- 登录是否正常;
- 应用是否可访问;
- 知识库检索是否正常;
- 模型调用是否正常;
- API 是否正常返回。
二十、生产环境部署清单
正式上线前,可以按照下面的清单逐项检查。
基础环境
- [ ] 服务器配置满足需求
- [ ] Docker 安装完成
- [ ] Docker Compose 可用
- [ ] 域名解析正确
- [ ] 安全组开放 80、443
- [ ] SSH 登录安全配置完成
Dify 配置
- [ ]
.env已从示例文件复制 - [ ] 访问域名已配置
- [ ]
SECRET_KEY已修改 - [ ] 数据库密码已修改
- [ ] Redis 密码已修改
- [ ] 文件存储方案已确认
- [ ] 模型供应商已配置
安全配置
- [ ] 已启用 HTTPS
- [ ] 内部端口未暴露公网
- [ ] 管理员密码足够复杂
- [ ] API Key 妥善保存
- [ ] 服务器防火墙配置合理
运维配置
- [ ] 数据库备份已配置
- [ ] 文件备份已配置
- [ ]
.env已备份 - [ ] 日志查看方式明确
- [ ] 监控告警已配置
- [ ] 升级流程已明确
二十一、单机部署与架构拆分建议
很多团队初期会选择单机部署,这是合理的,因为成本低、维护简单、上线快。但随着使用量增长,单机部署会遇到瓶颈。
适合单机部署的场景
- 内部小团队使用;
- 日访问量不高;
- 知识库数据量不大;
- 预算有限;
- 技术团队人手较少。
建议拆分的场景
当出现以下情况时,可以考虑拆分:
- 数据库 CPU 或磁盘占用较高;
- Redis 经常出现连接异常;
- 上传文件越来越多;
- 知识库文档数量明显增加;
- 多人同时使用响应变慢;
- 服务不可接受长时间中断。
拆分顺序建议
一般可以按照以下顺序拆分:
- PostgreSQL 迁移到云数据库;
- 文件存储迁移到对象存储;
- Redis 迁移到云 Redis;
- 向量数据库独立部署;
- API、Worker 水平扩展;
- 使用 Kubernetes 或容器平台管理。
二十二、给零基础用户的实用建议
如果你是第一次部署生产环境,不建议一开始就追求复杂架构。你可以按以下路线学习:
- 先在本地或测试服务器跑通 Dify;
- 学会修改
.env; - 学会查看 Docker 日志;
- 学会配置域名和 HTTPS;
- 学会备份数据库和文件;
- 再考虑对象存储、云数据库和监控;
- 最后再学习 Kubernetes 等高级部署方式。
生产环境最重要的不是“部署得多高级”,而是:
- 能稳定运行;
- 出问题能定位;
- 数据不会丢;
- 密钥不会泄露;
- 升级可以回滚;
- 成本可控。
二十三、总结
Dify 是一个非常适合企业和开发者快速构建 AI 应用的平台。通过 Docker Compose,我们可以在一台 Ubuntu 服务器上较快完成生产环境部署。但生产环境和本地测试不同,除了“能跑起来”,还必须关注域名、HTTPS、安全、备份、日志、监控和升级。
对于零基础用户,推荐从单机部署开始,先掌握 Docker、环境变量、Nginx、HTTPS 和备份这些基础能力。等业务量增长后,再逐步将 PostgreSQL、Redis、向量数据库和文件存储拆分出去,形成更稳定的生产架构。
最后给出一句建议:上线前一定要备份,上线后一定要监控,升级前一定要看版本说明。 只要遵循这个原则,你的 Dify 生产环境就会更加稳定、安全、可维护。