Seafile从本地迁移到docker部署

由于一开始为ubuntu分配的磁盘空间太少,只有一百多G,后期越来越不够用了,而且环境也有些乱,所以打算重新迁移到新的磁盘上。Seafile需要配置的东西较多,但是最后终于成功了,虽然踩了不少坑,但是当完成以后发现还是很简单的。

源机器:

这个脚本是直接安装到本机的,他会自动安装好MysqlnginxSeafile.

备份数据文件

Seafile的文件在/opt/seafile目录下:

1
2
3
4
5
6
7
8
9
10
11
12
13
/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密码):

1
2
3
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

官方命令:

1
2
3
4
5
mysqldump -h [mysqlhost] -u[username] -p[password] --opt ccnet-db > /backup/databases/ccnet-db.sql.`date +"%Y-%m-%d-%H-%M-%S"`

mysqldump -h [mysqlhost] -u[username] -p[password] --opt seafile-db > /backup/databases/seafile-db.sql.`date +"%Y-%m-%d-%H-%M-%S"`

mysqldump -h [mysqlhost] -u[username] -p[password] --opt seahub-db > /backup/databases/seahub-db.sql.`date +"%Y-%m-%d-%H-%M-%S"`

总之,我们得到三个备份文件:

  • 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密码)

1
2
3
4
5
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

官方命令:

1
2
3
4
5
mysql -u[username] -p[password] ccnet-db < ccnet-db.sql.2013-10-19-16-00-05

mysql -u[username] -p[password] seafile-db < seafile-db.sql.2013-10-19-16-00-20

mysql -u[username] -p[password] seahub-db < seahub-db.sql.2013-10-19-16-01-05

将临时目录的SQL文件导入数据库执行

1
2
3
4
5
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教程中还原了confseafile-dataseahub-data三个文件,但是当环境不同时,conf是不能还原的,否则会page-unavailable

docker的数据文件位置取决于你在docker-compose.yml中的配置,默认在/opt目录下有seafile-dataseafile-mysql两个文件夹,

1
2
3
4
5
6
7
8
9
10
/opt/
├── seafile-data
│ ├── logs
│ └── seafile
│ ├── ccnet
│ ├── conf
│ ├── seafile-data
│ └── seahub-data
├── seafile-mysql
123456789

我们要做的就是用备份的seafile-dataseahub-data替换掉/opt/seafile-data/seafile/下对应的两个文件夹

1
2
3
cp -r seafile-data /opt/seafile-data/seafile/
cp -r seahub-data /opt/seafile-data/seafile/
12

大功告成

访问你在docker-compose.yml中配置的Host Name即可登录源机器的账号,内容也完全一样。