My blog:迁移本地Seafile到docker
由于一开始为ubuntu分配的磁盘空间太少,只有一百多G,后期越来越不够用了,而且环境也有些乱,所以打算重新迁移到新的磁盘上。Seafile需要配置的东西较多,但是最后终于成功了,虽然踩了不少坑,但是当完成以后发现还是很简单的。
源机器:
- 系统:ubuntu 19.10
- 使用的haiwen脚本安装:https://github.com/haiwen/seafile-server-installer-cn
这个脚本是直接安装到本机的,他会自动安装好Mysql
、nginx
、Seafile
.
备份数据文件
Seafile的文件在/opt/seafile
目录下:
/opt/seafile
├── aio_seafile-server.log
├── aio_seafile-server.log.backup
├── ccnet
├── conf
├── db-backup
├── installed
├── logs
├── pids
├── seafile-data
├── seafile-server-7.0.5
├── seafile-server-latest -> seafile-server-7.0.5
└── seahub-data
这里面我们需要备份三个文件夹:
conf
seafile-data
seahub-data
其中conf
文件夹在新系统里是不需要的,但是其中的旧配置信息比较重要,可以备份一下,以备查阅。
备份数据库
这里可以用haiwen
提供的db_backup脚本来备份。不需要按照原教程配置自动备份,我们只用一次,修改一下脚本的数据库密码,直接执行即可。然后就可以得到一个压缩包,里面有三个sql
文件。
也可以使用以下命令手动备份(将[password]
替换为你的源数据库root密码):
mysqldump -uroot -p[password] --opt ccnet_db > ccnet_db.sql
mysqldump -uroot -p[password] --opt seafile_db > seafile_db.sql
mysqldump -uroot -p[password] --opt seahub_db > seahub_db.sql
总之,我们得到三个备份文件:
ccnet_db.sql
seafile_db.sql
seahub_db.sql
目标机器
- 系统:ubuntu 18.04
- 按照官方的"用Docker部署Seafile"教程安装
- PS_1:我也试过用源机器的脚本进行安装,但是遇到了一些错误,而且安装到本机也很难清理,所以选择了docker
- PS_2:使用此docker安装时,执行
docker-compose -d
后请耐心等待,需要的时间可能较长(十到二十分钟),可以先用docker-compose
试一下,只要没报错就多等等。 - PS_3:docker的操作要使用root账号或者sudo
还原数据库
把数据库备份文件传到docker容器的临时目录(将[password]
替换为你的新数据库root密码)
docker cp ccnet_db.sql seafile-mysql:/tmp/ccnet_db.sql
docker cp seafile_db.sql seafile-mysql:/tmp/seafile_db.sql
docker cp seahub_db.sql seafile-mysql:/tmp/seahub_db.sql
将临时目录的SQL文件导入数据库执行
docker exec -it seafile-mysql /bin/sh -c "mysql -uroot -p[password] ccnet_db < /tmp/ccnet_db.sql"
docker exec -it seafile-mysql /bin/sh -c "mysql -uroot -p[password] seafile_db < /tmp/seafile_db.sql"
docker exec -it seafile-mysql /bin/sh -c "mysql -uroot -p[password] seahub_db < /tmp/seahub_db.sql"
还原数据文件
注意:docker教程中还原了conf
、seafile-data
、seahub-data
三个文件,但是当环境不同时,conf
是不能还原的,否则会page-unavailable
。
docker的数据文件位置取决于你在docker-compose.yml
中的配置,默认在/opt
目录下有seafile-data
、seafile-mysql
两个文件夹,
/opt/
├── seafile-data
│ ├── logs
│ └── seafile
│ ├── ccnet
│ ├── conf
│ ├── seafile-data
│ └── seahub-data
├── seafile-mysql
我们要做的就是用备份的seafile-data
、seahub-data
替换掉/opt/seafile-data/seafile/
下对应的两个文件夹
cp -r seafile-data /opt/seafile-data/seafile/
cp -r seahub-data /opt/seafile-data/seafile/
大功告成
访问你在docker-compose.yml
中配置的Host Name
即可登录源机器的账号,内容也完全一样。