本文将手把手教你如何在生产环境中安全升级 Dify,包含备份、迁移、排错、回滚等全流程技巧,避免因权限和数据库等问题踩坑。建议优先使用 Docker Compose 部署方案,稳定可靠。
方案一:Docker Compose 部署(推荐)
第一步:停止服务并备份
1 | # 进入 docker 目录 |
备份检查清单:
- 数据库数据
- 应用存储文件
- 环境配置文件
- 自定义配置
第二步:拉取最新代码
1 | # 返回项目根目录 |
如果出现本地文件与远程文件冲突的提示,建议先备份本地修改,然后再强制覆盖为最新远程版本:
1 | # 备份有改动的本地文件或目录(例如 docker-compose.yaml) |
如涉及较多冲突,可多次执行上述步骤,确保所有冲突文件都已按需处理。
第三步:更新存储目录权限(关键步骤)
将storage目录设置成非root权限
1 | # 更新目录所有权为 UID 1001 |
验证权限设置:
1 | # 验证权限设置 |
预期输出:
1 | drwxr-xr-x 2 1001 1001 4096 Dec 08 10:00 storage |
权限说明:
- 1001:1001 不是”权限”,而是用户ID(UID)和组ID(GID)
- 即使系统中不存在名为 1001 的用户,这个命令也是有效的
- Docker 容器内的进程以 UID 1001 运行,需要匹配主机权限
第四步:更新环境配置
1 | cd docker |
重要配置项:
1 | # 如果要使用 MySQL(可选) |
配置对比:
1 | 对比 .env.example 文件,检查是否有新增的环境变量需要配置。 |
第五步:启动服务
1 | # 标准启动 |
常见启动问题:
如果看到类似错误:
1 | failed to connect to `host=db_postgres user=postgres database=dify_plugin`: |
解决方案:
1 | docker compose --profile postgresql up -d |
第六步:验证升级
1 | # 1. 查看服务状态 |
健康检查:
- 所有容器状态为
Up - 没有 Permission Denied 错误
- API 服务正常响应
- Web 界面可以访问
第七步:功能验证
访问 Web 界面
- 打开 http://localhost 或配置的域名
- 检查登录是否正常
验证应用运行
- 测试已有应用是否正常工作
- 检查知识库是否可以访问
- 尝试创建新的对话
插件系统验证
- 点击右上角 “Plugins” 按钮
- 验证插件是否正确安装
- 检查内置工具是否已迁移到插件
方案二:源码部署
未经过实践尝试
第一步:停止服务
1 | # 停止 API 服务器 |
第二步:更新代码
1 | # 拉取最新代码 |
第三步:更新依赖
1 | # 进入 API 目录 |
第四步:数据库迁移
1 | # 运行迁移脚本 |
迁移注意事项:
- 确保数据库连接正常
- 建议在迁移前备份数据库
- 迁移过程可能需要几分钟
第五步:重启服务
1 | # 启动 API 服务器 |
常见问题解决
问题 1: 权限错误
错误信息:
1 | PermissionError: [Errno 13] Permission denied: '/app/api/storage/...' |
解决方案:
1 | # 检查目录权限 |
问题 2: 系统没有 UID 1001 用户
理解:
- 1001:1001 是用户ID和组ID,不是用户名
- Linux 可以使用纯数字 ID,无需实际用户存在
可选方案:创建用户
1 | # 创建名为 dify 的用户,指定 UID 1001 |
问题 3: SELinux 阻止访问
检查 SELinux:
1 | # 查看状态 |
问题 4: 数据库连接失败
错误信息:
1 | hostname resolving error (lookup db_postgres on 127.0.0.11:53) |
解决方案:
1 | # 使用 PostgreSQL profile |
问题 5: 插件无法访问
检查清单:
- 确保可以访问 https://marketplace.dify.ai
- 检查防火墙规则
- 验证网络代理配置
测试连接:
1 | # 从容器内测试 |
问题 6: Weaviate 版本不兼容
错误信息:
1 | Weaviate version incompatible |
解决方案:
1 | # 更新 docker-compose.yaml 中的 Weaviate 版本 |
回滚方案
如果升级后遇到严重问题,可以回滚到旧版本:
Docker Compose 回滚
1 | # 1. 停止服务 |
源码部署回滚
1 | # 1. 停止服务 |
升级后优化建议
- 性能监控
1 | # 查看容器资源使用 |
- 备份策略
建议设置定期备份:
1 |
|
设置定时任务:
1 | # 编辑 crontab |
- 日志管理
配置日志轮转:
1 | # docker-compose.yaml 中添加 |
- 安全加固
1 | # 1. 使用强密码 |
相关资源
- 官方文档: https://docs.dify.ai
- GitHub 仓库: https://github.com/langgenius/dify
- 发布说明: https://github.com/langgenius/dify/releases
- 社区论坛: https://github.com/langgenius/dify/discussions
- Marketplace: https://marketplace.dify.ai
经验教训
权限问题是最常见的升级障碍
- 务必在升级前修改
storage目录权限 - 使用 ls -ln 验证权限设置
- 务必在升级前修改
备份是恢复的保障
- 不要跳过备份步骤
- 验证备份文件的完整性
分阶段验证
- 不要等到最后才测试
- 每完成一步就验证结果
保持文档更新
- 记录自定义配置
- 维护操作手册
注意事项
- 升级过程中会有短暂的服务中断
- 大版本升级可能需要 10-30 分钟
- 建议在低峰时段进行升级
- 提前通知用户计划的维护窗口