目录

docker下迁移gitlab服务器

公司之前买了一个3年的腾讯云服务器,本着白嫖的原则,不用白不用,把公司内部的gitlab服务器迁移到腾讯云服务器上面去。本文记录一下操作步骤,以防老年痴呆。整个迁移流程其实很简单,就是先备份数据,然后在新机器上面还原数据,如图所示,以下分步骤说明。为了防止混淆,下文将公司内部的gitlab服务器称为内部服务器。

准备工作

docker安装

腾讯云服务器的系统是CentOS 7.9,默认是没有安装docker的,需要自己安装,使用以下命令安装docker社区版:

1
2
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io

自定义docker数据目录

docker默认把数据保存在/var/lib/docker目录中,腾讯云服务器根目录的空间才50G,另外挂载了一个数据盘800G在/data目录,因此把docker数据放在数据盘最好。这里我用了一个偷懒的方法,直接创建一个软链接映射到数据盘:

1
ln -s /data/docker /var/lib/docker

拉取gitlab镜像

想要数据迁移成功,gitlab版本必须匹配才行。使用以下命令在内部服务器上查看gitlab版本:

1
docker exec -t gitlab cat /opt/gitlab/embedded/service/gitlab-rails/VERSION

如果容器设置了目录映射,也可以在gitlab数据映射目录查看:

1
cat /home/gitlab/data/gitlab-rails/VERSION

我这里的版本是14.1.2,所以腾讯云服务器上拉取的镜像也需要是14.1.2

1
docker pull gitlab/gitlab-ce:14.1.2-ce.0

运行容器

gitlab镜像拉取后,使用下面这个命令创建并运行一个名叫gitlab的容器:

1
docker run -d -p 443:443 -p 80:80 -p 222:22 --name gitlab --restart always -v /data/gitlab/config:/etc/gitlab -v /data/gitlab/logs:/var/log/gitlab -v /data/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:14.1.2-ce.0

备份

在进行备份前可以把内部服务器的gitlab访问数据库的服务先关闭:

1
2
3
docker exec -t gitlab gitlab-ctl stop puma
docker exec -t gitlab gitlab-ctl stop sidekiq
docker exec -t gitlab gitlab-ctl stop unicorn

然后执行下面这个命令进行数据备份:

1
docker exec -t gitlab gitlab-rake gitlab:backup:create

这里需要等待一段时间直到备份完成,生成的备份文件在gitlab数据目录的backups目录下面,我这里的文件名是1659752190_2022_08_06_14.1.2_gitlab_backup.tar

还原

数据还原

把内部服务器上的备份文件上传到腾讯云服务器上gitlab映射的数据目录/data/gitlab/data/backups

1
scp /home/gitlab/data/backups/1659752190_2022_08_06_14.1.2_gitlab_backup.tar root@your_server_ip:/data/gitlab/data/backups

在腾讯云服务器上进入docker容器:

1
docker exec -it gitlab /bin/bash

停止gitlab访问数据库的服务:

1
2
3
gitlab-ctl stop puma
gitlab-ctl stop sidekiq
gitlab-ctl stop unicorn

检查服务状态是否已经停止:

1
gitlab-ctl status

然后开始还原备份,注意备份文件名后面的_gitlab_backup.tar不需要指定:

1
gitlab-rake gitlab:backup:restore BACKUP=1659752190_2022_08_06_14.1.2

中间会要求你填yes|no,全部填yes。只要不报错退出,一直等待就行,直到备份还原成功。可以使用命令检查确认一下:

1
gitlab-rake gitlab:check SANITIZE=true

配置还原

将内部服务器的gitlab配置目录下所有文件拷到腾讯云服务器gitlab映射的配置目录:

1
scp -r /home/gitlab/config /data/gitlab/config

修改配置文件gitlab.rb

1
2
3
4
5
external_url 'http://new_server_ip'

gitlab_rails['time_zone'] = 'UTC'
gitlab_rails['gitlab_ssh_host'] = 'new_server_ip'
gitlab_rails['gitlab_shell_ssh_port'] = new_ssh_port

重新加载配置,并重启gitlab:

1
2
gitlab-ctl reconfigure
gitlab-ctl restart

重启后看看能不能访问gitlab新地址,如果可以那就大功告成,至此数据迁移完成。