dify私有化实例需30分钟内恢复业务且不丢失1小时内数据;必须备份postgresql元数据、minio/s3非结构化资源及docker-compose.yml等配置文件三类核心数据。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

当Dify私有化实例遭遇数据库误删、服务器宕机或配置被覆盖时,必须能在30分钟内恢复全部业务功能,且不丢失最近1小时内的对话记录与工作流变更。
锁定三个黄金备份目标
只备份镜像毫无意义——Dify服务重启后仍是空壳。真正决定“跑什么”的只有三类数据:PostgreSQL里的用户、应用、会话等结构化元数据;MinIO或S3中存放的上传文件、知识库文档、日志附件等非结构化资源;以及docker-compose.yml、.env、Nginx配置等运行时依赖的文本配置。
这三者缺一不可。漏掉配置文件,新环境连端口和密钥都对不上;漏掉对象存储,所有用户上传的PDF、图片、音频将永久消失;漏掉数据库,整个平台退化为未注册状态。
PostgreSQL必须启用WAL归档,否则无法做时间点恢复(PITR)。执行:ALTER SYSTEM SET wal_level = replica; → ALTER SYSTEM SET archive_mode = on; → ALTER SYSTEM SET archive_command = 'cp %p /archive/%f';
【wal_level必须设为replica或logical,设为minimal将导致增量备份失效】
数据库备份:全量+增量双轨并行
方法一:每日全量逻辑备份(适合中小规模)
用pg_dump导出SQL脚本,便于审计与跨版本迁移:pg_dump -h localhost -U dify_user -d dify_db -F c -v -f /backup/dify_full_$(date +%Y%m%d).dump
参数-F c生成自包含格式,支持选择性恢复单张表。
方法二:WAL连续归档+基础备份(企业级推荐)
先执行一次基础备份:pg_basebackup -D /backup/base_$(date +%Y%m%d) -Ft -z -P -R -Xs -C -S primary
该命令自动触发检查点、压缩归档、写入standby.signal,并开启流复制配置。
方法三:使用Dify CLI内置备份(开发测试场景)dify-cli backup create --output /backup/cli_$(date +%Y%m%d_%H%M%S).sql --encrypt --encryption-key "a3K9#xQ2"
注意:CLI工具仅备份PostgreSQL,不包含MinIO或配置文件,不可单独用于生产恢复。
对象存储与配置文件自动化归档
第一步:同步MinIO桶内容到异地NASmc mirror --recursive --watch --remove --preserve --quiet alias/dify-bucket /nas/backup/dify-bucket/
加--watch参数实现实时增量同步,--remove确保删除操作也能被镜像,避免残留垃圾文件。
第二步:打包配置文件并打时间戳tar -czf /backup/config_$(date +%Y%m%d_%H%M%S).tar.gz \/opt/dify/docker/docker-compose.yml \/opt/dify/docker/.env \/etc/nginx/conf.d/dify.conf
第三步:上传至S3并设置生命周期策略aws s3 cp /backup/config_*.tar.gz s3://dify-backup/config/ --sse AES256
在S3控制台为该前缀设置“7天后转为IA存储,30天后过期”,兼顾安全与成本。
第四步:校验归档完整性(关键!)
执行sha256sum /backup/config_*.tar.gz > /backup/config_$(date +%Y%m%d).sha256,并将校验文件一并上传。恢复前必须比对SHA256值,【跳过校验直接恢复可能载入已损坏的配置包】
灾难恢复验证流程
① 在隔离环境拉起全新Dify集群(使用相同docker-compose.yml与镜像版本)
② 停止新集群所有服务:docker-compose down
③ 清空新PostgreSQL数据目录,从最近基础备份解压:tar -xzf /backup/base_20260604.tar.gz -C /var/lib/postgresql/data/
④ 将对应时段WAL日志拷贝至pg_wal/目录,并修改recovery.conf(或PG12+的recovery.signal)指定restore_command与recovery_target_time
⑤ 启动PostgreSQL,等待日志重放完成并自动退出恢复模式
⑥ 替换MinIO数据目录:rm -rf /mnt/minio/dify-bucket/* → mc cp --recursive /nas/backup/dify-bucket/* alias/new-minio/dify-bucket/
⑦ 拷贝校验通过的配置文件覆盖原位置,启动docker-compose up -d
⑧ 登录控制台,执行一次真实工作流调用,检查向量检索结果、文件下载链接、对话历史是否完整可读











