seafile 服务器迁移
起因
最初的 seafile 是搭建在 1 核 1G1Mbps 的服务器上,普通使用虽然还是没问题的,但在一些需要分享的时候就会显得配置不足,尤其是带宽,在有多个用户同时下载的时候,网速一度只有 70+kb/s。
基于此问题,再考虑到实际的应用场景(每个月用不了几次),最后,还是考虑将服务器升级一下(主要是内存),随便把网络改为按流量计费。
数据备份
首先第一步,还是要先把数据备份一下以防万一。seafile 的数据主要有两部分,资源文件和数据库。
其中,因为我使用的是 Docker 版本进行部署,所以只需将挂载点下的文件都复制出来即可。
对于数据库,在官方文档中找到了相应的操作,只需备份以下三张表即可。
mysqldump -uroot --opt ccnet_db > ccnet_db.sql
mysqldump -uroot --opt seafile_db > seafile_db.sql
mysqldump -uroot --opt seahub_db > seahub_db.sql
新服务器的准备工作
在正式开始迁移之前,还是需要将新购服务器上的环境配置一下。
新服务器的配置如下,1 核 4G10Mbps,系统为 centos 7.5,50G 系统盘再加 50G 数据盘以便拓展。
由于计划将 seafile 的数据存放到独立的云硬盘上,所以,我们需要先将云硬盘格式化并挂载到服务器上。
挂载云硬盘
此处步骤可参考腾讯云教程 - Linux 系统分区、格式化、挂载及创建文件系统。
首先,让我们查看一下当前系统已挂载的硬盘:fdisk -l
。
根据上图,我们可以看到当前主机上挂载了两块硬盘:
/dev/vda
为系统盘。/dev/vdb
为额外的数据盘。
下一步,我们需要确认云硬盘的文件系统:file -s /dev/vdb
。
/dev/vdb
来自上一命令中显示的数据盘。
若得到以下的输出,说明该硬盘还未格式化。(若是新购的云硬盘应该都是未格式化的)
# file -s /dev/vdb
/dev/vbd: data
对于这样未格式化的硬盘,我们首先需要为其创建文件系统:mkfs.ext4 /dev/vdb
。
这里我创建的是 ext4 文件系统,若想创建其他文件系统可以参考腾讯云所给教程。
创建完成后,再次确认文件系统,若得到以下输出说明创建成功。
然后,我们需要创建一个文件目录,用于挂载硬盘:mkdir /data -p
。
并将该硬盘挂载到刚创建的目录下:mount /dev/vdb /data
。
(可选)设置自动挂载
- 备份默认文件
cp /etc/fstab /etc/fstab.backup
-
添加以下内容
device_name mount_point file_system_type fs_mntops fs_freq fs_passno
其中
fs_mntops
fs_freq
fs_passno
分别取defaults,nofail
0
1
。此外,
device_name
通过ls -l /dev/disk/by-id/
确定;mount_point
表示挂载点;file_system_type
通过file -s device_name
确定。
- 测试是否成功
mount -a
若无错误即可。
安装 Docker 环境
首先,保持一个好习惯,上手先更新一波 yum:yum upadte -y
。
随后安装 Docker 的依赖包:
yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
考虑到国内环境对官方源不怎么友好,这里我们使用阿里云的源。
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
在添加新的软件源之后,再更新下 yum 缓存,确保已经更新引用:yum makecache fast
。
最后,安装 Docker-ce 反而显得简单:yum install -y docker-ce
。
配置 Docker
和上面一样的原因,我们也需要将 Docker 镜像源替换为国内的镜像站。
修改/etc/docker/daemon.json 文件,添加以下内容:
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
然后,启动 Docker 服务:systemctl start docker
。
若在配置镜像站之前已经启动了 Docker 服务,则需重新启动:
systemctl restart docker
。
测试 Docker 是否可以正常使用:docker run hello-world
,若看到熟悉的输出即成功了。
安装与迁移
安装 seafile
下载 seafile 镜像:docker pull seafileltd/seafile
。
启动 seafile
docker run -d --name seafile \
-e SEAFILE_SERVER_HOSTNAME=yourdaemon \
-e SEAFILE_ADMIN_EMAIL=admin@email \
-e SEAFILE_ADMIN_PASSWORD=password \
-v /data/seafile-data:/shared \
-p 8080:80 \
seafileltd/seafile:latest
这里值得注意的有两个参数:
-v /data/seafile-data:/shared
将数据盘下的目录挂载到容器中。-
-p 8080:80
将内部的 80 端口暴露到本地的 8080 端口。在我们使用的镜像版本中,官方在内部配置了 Nginx 反向代理,通过 80 端口访问。
迁移数据
首先,将之前备份的数据文件和 sql 文件复制到宿主机的对应目录下。
然后,进入容器:docker exec -it seafile bash
。
还原数据库
mysql -uroot ccnet_db < ccnet_db.sql
mysql -uroot seafile_db < seafile_db.sql
mysql -uroot seahub_db < seahub_db.sql
cd 到 seafile-server-latest 下,运行垃圾清理
bash seafile.sh stop
bash seaf-gc.sh
bash seafile.sh start
遗留问题
-
迁移后,头像和自定义的图标会发生错误。
目前只想到重新上传来解决。