Dify迁移最新攻略:从旧服务器到新服务器的完整步骤

起因是我自己做项目的时候,薅的服务器快到期了但是dify数据已经产生了所以要迁移,下面是我总结的迁移步骤,供大家参考!
一、背景介绍
Dify是一款开源的LLM应用开发平台,在实际生产环境中,我们可能需要将Dify从旧服务器迁移到新服务器(例如升级硬件、更换机房等)。迁移的核心在于数据库的备份与恢复,因为Dify的所有应用、知识库、日志等数据都存储在PostgreSQL中。
本文将基于Docker部署的Dify,提供一套完整的迁移流程,包括:
- 新服务器环境准备
- 旧服务器数据库备份
- 数据迁移与恢复
- 服务启动与验证
文中所有命令均经过验证,请根据您的实际容器名称、文件路径进行调整。
二、新服务器环境准备
2.1 安装Docker与Docker Compose
首先,确保新服务器已安装Docker及Docker Compose。如果尚未安装,可参考以下命令(以Ubuntu 22.04为例):
# 更新软件包索引
sudo apt update
sudo apt install -y ca-certificates curl
# 安装Docker官方GPG密钥
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# 添加Docker仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装Docker及Compose插件
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
2.2 配置Docker镜像加速器(可选但推荐)
由于Docker Hub拉取镜像速度可能较慢,建议配置国内镜像加速器。例如,阿里云提供的加速地址:https://XXXXXXX.mirror.aliyuncs.com(请替换为您自己的加速器地址)。
编辑 /etc/docker/daemon.json:
sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{"registry-mirrors": ["https://XXXXXXX.mirror.aliyuncs.com"]}EOFsudo systemctl restart docker
2.3 安装Dify最新版
我们使用Dify官方推荐的Docker Compose方式安装。
# 克隆Dify仓库(或下载最新release)git clone https://github.com/langgenius/dify.gitcd dify/docker# 复制环境变量模板cp .env.example .env# (可选)根据需要修改.env中的配置,如端口、密钥等
此时,不要立即执行 docker compose up -d 进行初始化,因为我们后续要恢复旧数据,直接初始化会创建空数据库,导致恢复时冲突。
2.4 停止默认启动的服务
如果系统自动启动了服务(或您之前误操作启动了),请先关闭:
docker compose down
确保所有容器都处于停止状态,此时新服务器仅有Dify的代码和配置文件,数据库还未创建。
三、旧服务器数据库备份
在旧服务器上,Dify的数据库运行在名为 docker-db_postgres-1 的容器中(具体名称可能因您的docker-compose项目名称而异,可使用 docker ps 查看)。使用 pg_dump 工具导出整个 dify 数据库,并压缩保存。
# 备份命令(在旧服务器执行)docker exec -t docker-db_postgres-1 pg_dump -U postgres -d dify | gzip > dify_backup.sql.gz
参数说明:
-t:为docker exec分配伪终端,保证pg_dump正常运行。-U postgres:指定数据库用户为postgres(Dify默认使用此用户)。-d dify:指定要导出的数据库名为dify。| gzip >:将导出结果通过管道压缩为.sql.gz文件,便于传输。
备份文件 dify_backup.sql.gz 将生成在当前目录。您可以将其移动到安全位置,或直接准备传输。
四、数据传输
使用 scp 或 rsync 将备份文件从旧服务器复制到新服务器。假设新服务器IP为 192.168.1.100,文件放置到新服务器的 /root/ 目录下:
# 在旧服务器执行scp dify_backup.sql.gz root@192.168.1.100:/root/
如果文件较大,建议使用 rsync 或分卷压缩。请确保新服务器上有足够空间。
五、新服务器数据库恢复
5.1 启动数据库容器
在新服务器的Dify目录(~/dify/docker)下,先仅启动PostgreSQL数据库容器,其他服务暂不启动,避免依赖问题。
cd ~/dify/docker# 启动数据库容器(注意:容器名称可能因版本不同而不同,请用docker-compose ps查看)docker compose up -d db_postgres
某些旧版本中,数据库服务名可能为 db,具体请查看 docker-compose.yaml 中的服务定义。您也可以直接启动所有服务,但我们建议只启动数据库以加快恢复。
启动后,等待几秒钟让数据库完全就绪:
sleep 10
5.2 恢复备份数据
首先,将备份文件解压并导入到数据库容器中。注意:您需要知道当前数据库容器的实际名称,可通过 docker ps 查看。例如,我的容器名为 dify-db_postgres-1(或类似)。
# 解压并导入(假设备份文件在/root/dify_backup.sql.gz)gunzip -c /root/dify_backup.sql.gz | docker exec -i <你的数据库容器名> psql -U postgres -d dify
或者,先解压再导入:
gunzip /root/dify_backup.sql.gz # 生成 .sql 文件docker exec -i <你的数据库容器名> psql -U postgres -d dify < /root/dify_backup.sql
示例(使用您的命令风格):
# 如果容器名为 docker-db_postgres-1docker exec -i docker-db_postgres-1 psql -U postgres -d dify < /root/dify_backup.sql
若您的备份文件是 .gz 格式,也可直接通过管道:
docker exec -i docker-db_postgres-1 psql -U postgres -d dify < <(gunzip -c /root/dify_backup.sql.gz)
恢复过程中,终端会输出大量SQL语句,若无错误提示,则恢复成功。
六、启动所有服务
数据库恢复完成后,退出当前目录,回到 dify/docker,然后启动所有Dify服务:
docker compose up -d
等待所有容器启动完成(可通过 docker compose ps 查看状态)。启动后,Dify Web服务默认监听 80 端口(或您修改的端口),访问新服务器IP即可看到Dify界面。
七、验证迁移是否成功
-
检查容器状态:确保所有容器均为
Up状态。docker compose ps
-
登录Dify:使用旧服务器的管理员账号登录,查看应用、知识库、API密钥等是否完整。
-
测试功能:尝试创建新应用或对话,确保数据库读写正常。
若一切正常,恭喜您迁移成功!
八、常见问题与解决方法
8.1 恢复时提示“database “dify” does not exist”
原因:新服务器未创建 dify 数据库。解决:在恢复前,进入数据库容器手动创建数据库:
docker exec -it <容器名> psql -U postgres -c "CREATE DATABASE dify;"
然后再执行恢复。
8.2 容器名称不一致导致命令失败
不同版本的Dify或不同的docker-compose项目名称会导致容器名前缀不同。使用 docker ps --format "table {{.Names}}" 查看所有容器名,找到PostgreSQL容器并替换命令中的名称。
8.3 恢复时权限错误
确保备份文件在新服务器上有读取权限,且 psql 命令中使用的用户(postgres)拥有目标数据库的写入权限。
8.4 恢复后服务无法启动(如API报错)
检查 .env 配置文件中的密钥、数据库连接串等是否与旧服务器一致。特别关注 SECRET_KEY、DB_USERNAME、DB_PASSWORD 等变量。若数据库密码不同,需要调整。
8.5 迁移后部分数据缺失
确保备份时数据库处于一致状态(建议停止所有写入操作再备份)。如果迁移期间旧服务器仍有新数据写入,可考虑在备份前暂时停用服务。
九、总结
通过以上步骤,您可以轻松完成Dify的服务器迁移。核心要点:
- 新服务器安装Docker和Dify,但不要初始化数据库。
- 使用
pg_dump备份旧数据库,压缩后传输。 - 新服务器启动数据库容器,恢复备份。
- 启动所有服务并验证。
在实际操作中,请根据您的具体环境调整命令中的容器名、文件路径及数据库配置。如果遇到问题,可查看Dify官方文档或社区讨论。
祝您迁移顺利!如果本文对您有帮助,欢迎点赞、收藏、转发~
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)