由于某些原因,公司需要将gitlab从服务器A向B迁移,据了解,A服务器上gitlab是用docker部署的。写下本文,记录一下迁移的步骤。
因为涉及到两台服务器的操作,避免混淆,分别记下两台服务器的操作。大致如下
A服务器:
创建备份文件,并上传到B服务器
B服务器:
1.安装docker
2.拉取gitlab镜像
3.恢复数据
一、A服务器的文件备份
查看容器详情,主要是要看容器的名字或者id
docker ps
然后根据容器id或名字找到挂载的目录,inspect后面跟着的是CONTAINER ID或NAMES,如:
docker inspect gitlab | grep Mount -A 20
docker inspect 641d16e052b3 | grep Mount -A 20
我的三个挂载目录如下,冒号前是宿主机(即服务器A)的目录
/data/gitlab/data:/var/opt/gitlab
/data/gitlab/config:/etc/gitlab
/data/gitlab/logs:/var/log/gitlab
接下来进入容器并备份
1.以下命令进入容器
docker exec -it gitlab /bin/bash
2.以下命令在容器的/var/opt/gitlab/backups目录,
即我这里的服务器A的/data/gitlab/data/backups目录下生成备份文件1598965868_2020_09_01_13.3.2_gitlab_backup.tar
gitlab-rake gitlab:backup:create
这里要注意这样并不会连配置文件一起备份,所以需要手动将配置文件备份
配置文件的路径为/etc/gitlab,即对应服务器A的/data/gitlab/config,在目录下找到下面两个文件复制到新服务器的对应目录
gitlab.rb
gitlab-secrets.json
到这里备份就完成了,因为旧服务已经不打算使用了,所以我这里也把它给停掉了
docker exec -it gitlab /bin/bash 进入容器
gitlab-ctl stop 停止gitlab全部服务
exit 退出容器执行
docker stop gitlab 停止容器
二、B服务器安装docker并配置
1.安装docker
安装docker
yum -y install docker
启动docker
systemctl start docker
查看docker版本
docker version
查看docker状态
systemctl status docker
2.配置镜像加速器
这里我选择的是阿里云的容器镜像服务https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,阿里云会分配一个加速器,根据指引配置即可
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://rez80i5v.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
3.开机启动docker
设置开机启动docker
systemctl enable docker
三、拉取gitlab镜像包
1.获取镜像包
这里要拉取跟A服务器相同版本的镜像包,命令如下,冒号后面指定版本
docker pull gitlab/gitlab-ce:13.3.2-ce.0
查看镜像IMAGE ID
docker images
2.创建相应文件夹作为挂载目录
mkdir -p /home/gitlab/config
mkdir -p /home/gitlab/logs
mkdir -p /home/gitlab/data
3.启动容器,这里启动需要一点时间
docker run --detach \
--privileged=true \
--hostname 192.168.201.129 \
--publish 443:443 --publish 80:80 --publish 2222:22 \
--name gitlab --restart always \
--volume /home/gitlab/config:/etc/gitlab \
--volume /home/gitlab/logs:/var/log/gitlab \
--volume /home/gitlab/data:/var/opt/gitlab 3494787883fd
各个参数说明:
--detach 指定容器后台运行
--privileged=true 给容器加上宿主机root权限,否则可能会报权限不足导致启动失败
--hostname 指定主机地址
--publish 指定端口映射,冒号前代表宿主机的端口,冒号后代表容器的端口
--name 容器的名字
--restart always 总是重启
--volume 指定数据卷
最后那一串东西是docker image的id 用来指定使用那个镜像
ps:如果启动失败的话,可以查看报错日志
查看日志
docker logs -f gitlab
四、恢复数据
1.将备份文件的权限改为777
上传前面的备份文件和配置文件到对应目录
/home/gitlab/data/backups
/home/gitlab/config
将备份文件权限修改为777,不然可能会报权限不足导致恢复备份失败
chmod 777 1598965868_2020_09_01_13.3.2_gitlab_backup.tar
2.进入容器,停止相关数据连接服务,加载备份文件
进入容器
docker exec -it gitlab /bin/bash
停止相关数据连接服务
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
进入目录/var/opt/gitlab/backups,因为备份在这个目录下
cd /var/opt/gitlab/backups
加载备份文件,注意等号后面只需到文件编号,不用整个文件名
gitlab-rake gitlab:backup:restore BACKUP=1598965868_2020_09_01_13.3.2
等待备份文件加载完成即可,中间会出现几次交互,大概意思就是加载备份会删除现有数据,是否确定,都输入yes就可以
重新加载配置
gitlab-ctl reconfigure
3.启动服务
启动服务
gitlab-ctl start
至此,基于docker的gitlab迁移就已经完成了。