Linux下seafile6.0.7迁移到Docker6.3.4

背景:
一、升级到最新稳定版本(从CentOS 6.0.7,先升级到6.2.x,再升级到6.3.4,再迁移到Docker6.3.4)
二、扩充存储(目前1T,已用700GB,迁移到2T)
服务器A 10.9.156.5、B 10.9.52.215。
A是现有生产环境,B是新开准备迁入机器,二者在一个内网。
A是生产环境,只给出数据。
B是新主机,做升级测试,中途都顺利的话,最后转为生产环境,回收A。

步骤主要分为三个部分:
1)备份、同步。
2)备份、升级。
3)备份、迁移。

1)备份、同步。
B部署和A一样的版本。
A主机和B主机都停服务
./seafile.sh stop
./seahub.sh stop

万事开头先备份!!!
rsync放在screen模式下运行,如果你的数据非常小,可以scp。
先备份A数据库,配置为rsync客户端。
mysqldump -useafile -pxxxxx --opt ccnet_db > /opt/seafile/seafile-data/ccnet_db.sql
mysqldump -useafile -pxxxxx --opt seafile_db > /opt/seafile/seafile-data/seafile_db.sql
mysqldump -useafile -pxxxxx --opt seahub_db > /opt/seafile/seafile-data/seahub_db.sql

B搭建和A一样的版本6.0.7。
然后备份B数据库,配置为rsync服务端。
mysqldump -useafile -pxxxxx --opt ccnet_db > /tmp/ccnet_db.sql
mysqldump -useafile -pxxxxx --opt seafile_db > /tmp/seafile_db.sql
mysqldump -useafile -pxxxxx --opt seahub_db > /tmp/seahub_db.sql

运行rsync
rsync两端版本要一致
A同步到B,在A操作。
rsync -avz /opt/seafile/seafile-data/* root@10.9.52.215::backup --password-file=/etc/rsync.password

待上面数据同步完成,导入数据库。
mysql -h127.0.0.1 -useafile -pxxxxx ccnet_db < /opt/ccnet_db.sql
mysql -h127.0.0.1 -useafile -pxxxxx seafile_db < /opt/seafile_db.sql
mysql -h127.0.0.1 -useafile -pxxxxx seahub_db < /opt/seahub_db.sql

将B的/opt/seafile/conf文件修改成A的/opt/seafile/conf文件一致。
启动Seafile,上传和下载文件,绑Host验证,迁移前后的用户和数据是否一样。
./seafile.sh start
./seahub.sh start

2)备份、升级。
B升级从6.0.7到6.2.5
先关闭服务
./seafile.sh stop
./seafile.sh stop
备份数据库
mysqldump -useafile -pxxxxx --opt ccnet_db > /tmp/6.0.7/ccnet_db.sql
mysqldump -useafile -pxxxxx --opt seafile_db > /tmp/6.0.7/seafile_db.sql
mysqldump -useafile -pxxxxx --opt seahub_db > /tmp/6.0.7/seahub_db.sql

sh upgrade_6.0_6.1.sh
sh upgrade_6.1_6.2.sh
启动Seafile,上传和下载文件,绑Host验证,迁移前后的用户和数据是否一样。
启动服务
./seafile.sh start
./seahub.sh start

B升级从6.2.5到6.3.4
先关闭服务
./seafile.sh stop
./seafile.sh stop
备份数据库
mysqldump -useafile -pxxxxx --opt ccnet_db > /tmp/6.0.7/ccnet_db.sql
mysqldump -useafile -pxxxxx --opt seafile_db > /tmp/6.0.7/seafile_db.sql
mysqldump -useafile -pxxxxx --opt seahub_db > /tmp/6.0.7/seahub_db.sql

sh upgrade_6.2_6.3.sh
启动Seafile,上传和下载文件,绑Host验证,迁移前后的用户和数据是否一样。

3)备份、迁移。
关闭B的Seafile服务
./seafile.sh stop
./seafile.sh stop

数据库备份。
mysqldump -useafile -pIar6uyie --opt ccnet_db > /opt/seafile-data/db/6.3.4/ccnet_db.sql
mysqldump -useafile -pIar6uyie --opt seafile_db > /opt/seafile-data/db/6.3.4/seafile_db.sql
mysqldump -useafile -pIar6uyie --opt seahub_db > /opt/seafile-data/db/6.3.4/seahub_db.sql

在B安装运行Docker6.3.4
docker run -d --name seafile
-e SEAFILE_SERVER_HOSTNAME=seafile.xxxx.com
-e SEAFILE_ADMIN_EMAIL=seafile-admin@qq.com
-e SEAFILE_ADMIN_PASSWORD=python
-v /opt/seafile-data:/shared
-p 80:80
-p 443:443
seafileltd/seafile:latest

上面可以看到B主机的/opt/seafile-data,对应于docker seafile 的/shared ,二者是映射关系,意思是文件写入到/opt/seafile-data,也就写到了/shared 。

进入Docker
docker ps #查看CONTAINER ID
docker exec -it xxxxxxxxx /bin/bash

导入数据库
mysql -h127.0.0.1 -useafile -pxxxx ccnet_db < /shared/db/6.3.4sql/ccnet_db.sql
mysql -h127.0.0.1 -useafile -pxxxx seafile_db < /shared/db/6.3.4sql/seafile_db.sql
mysql -h127.0.0.1 -useafile -pxxxx seahub_db < /shared/db/6.3.4sql/seahub_db.sql

同步数据存储,B主机目录同步到B安装的Docker目录
rsync -az /seafile-data /opt/seafile-data/seafile/seafile-data

将B的/opt/seafile/conf文件修改成A的/opt/seafile/conf文件一致。
启动Seafile,上传和下载文件,绑Host验证,迁移前后的用户和数据是否一样。
./seafile.sh start
./seahub.sh start

验证OK。
迁移顺利完成。
将域名解析由A主机IP地址改成B主机IP地址。

可以参考:
https://manual.seafile.com/maintain/backup_recovery.html
https://blog.csdn.net/wusilen/article/details/54142120

2 个赞

更新:
##Seafile迁移升级docker6.3.4->docker7.1.5##
背景:Seafile服务器磁盘将近使用2T,剩余20%,原本计划在线扩盘,但没有做镜像备份(需要先卸载,才可以打镜像),有风险。
调研之后,决定从架构上调整,从Ucloud迁移部署到腾讯云(满足镜像备份、在线扩盘,最大30T,我想在未来一段时间内,是满足需求的)。
源环境A:117.50.xx.xx Seafil 6.3.4
目标环境B:58.87.xx.xx Seafile latest也就是7.1.5
步骤1:创建新的B,挂载磁盘4T,后台配置每天凌晨3点自动镜像备份,保留7天。
步骤2:创建lb,配置https(原本证书是在后端服务器),此举避免将证书放到服务器上,安全考虑。
步骤3:部署Seafile 7.0.1(需要在docker compose 文件中将latest改成7.0.1) 到B,启用rsync,安全组允许A访问。
步骤4:A安全组拒绝其他用户访问,只允许维护IP访问。
步骤5:进入A的Seafile容器,关闭Seafile服务(./seafile.sh stop && ./seafile.sh stop)停止备份数据库,并将备份文件放到主机目录。
步骤6:将数据库备份文件rsync,A->B,执行命令导入到B的Seafile数据库中。
步骤7:将数据存储文件rsync,A->B (A数据近2T,出外网100M,B入网100M,花了2天左右传完)。
步骤8:修改docker compose文件将7.0.1升级到7.1.5。

更多参考:
https://cloud.seafile.com/published/seafile-manual-cn/docker/6.3_升级到_7.0.md
https://cloud.seafile.com/published/seafile-manual-cn/docker/用Docker部署Seafile.md

最后
致敬Seafile团队

1 个赞

这个教程可以

牛逼,非常详细的教程