背景

        博主有一个阿里云的Centos服务器,虽然早听说了centos8不再提供支持的消息,但是一直也没有管自己的云服务,直到前几天阿里云打电话提醒尽快变更系统。刚好春节趁着没事,倒腾一下服务器。

        服务器刚好也要到期了,本来我是打算新购一台,然后直接通过内网迁移数据的,但是发现有老用户续费有福利(云服务器ECS新春特惠)。3年老用户可以便宜两三百,每天还有抽奖。行吧,直接续费刚好也备份到本地一份数据。

        其实如果数据单独一个云盘的话,完全没有那么麻烦,因为我使用的服务道是docker的,数据全部映射在宿主机上,单独云盘的话,只要系统盘一换,直接docker服务启动就完事了。当初为了省一些花销就直接在系统盘放数据。平时拿云服务只要是放个人的gitlab仓库,主要的数据也是这一块。

备份和验证

首先备份gitlab数据,通过gitlab的指令就可以了。

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

如果你的docker容器名name不是gitlab的话,上面的命令自行修改一下。

随着CPU一阵飙升,等待完成就可以了。备份数据在容器的 /var/opt/gitlab/backups 目录下,如果你映射到了宿主机,就到指定的位置找就可以,文件名类似这样时间戳日期加gitlab版本号这样的: 1643891119_2022_02_03_13.12.7_gitlab_backup.tar

需要注意的是:

一些配置文件并不会被备份,需要自己手动备份一下 gitlab.rb 和 gitlab-secrets.json

Deleting old backups ... skipping
Warning: Your gitlab.rb and gitlab-secrets.json files contain sensitive data 
and are not included in this backup. You will need these files to restore a backup.
Please back them up manually.
Backup task is done.

如果需要拷贝文件,文件比较大的情况下呢,拷贝后建议还是算一下md5做个一致性比较

md5sum -b gitlab/data/backups/1643891119_2022_02_03_13.12.7_gitlab_backup.tar 

 下载到本地验证使用的wsl命令行,当然用git bash也是可以的。

恢复

创建好同一版本的gitlab服务之后,无论是docker还是直接部署的服务,将备份文件放到同样的 backups目录下,执行恢复命令即可。

首先在新机器拉取同版本gitlab并创建容器,我的是13.12.7若不清楚具体版本号可以前往下面地址查询。Docker Hubhttps://hub.docker.com/r/gitlab/gitlab-ce/tagshostname是你的域名,容器创建根据自己需要进行参数修改和调整,特别注意版本一致。

docker pull gitlab/gitlab-ce:13.12.7-ce.0
docker run --detach \
  --hostname git.xxx.xxx \
  --publish 4433:443 --publish 8082:80 --publish 33:22 \
  --name gitlab \
  --restart always \
  --volume /work/gitlab/config:/etc/gitlab \
  --volume /work/gitlab/logs:/var/log/gitlab \
  --volume /work/gitlab/data:/var/opt/gitlab \
  gitlab/gitlab-ce:13.12.7-ce.0

先进入容器停止相关数据连接服务

docker exec -it gitlab /bin/bash
gitlab-ctl stop puma
gitlab-ctl stop sidekiq

backups目录下只有一个备份文件时,可以使用以下命令:

gitlab-rake gitlab:backup:restore

 

 恢复完成后,启动服务

gitlab-ctl start

另外若有多个,可以使用参数,从指定时间戳的备份恢复

gitlab-rake gitlab:backup:restore BACKUP=1643891119

恢复完成后访问验证,看服务是否正常。

其他版本恢复

若使用非原版本的备份恢复就会出现:

这样问题的处理思路是先用同版本恢复,然后按照升级的方式来。

就是一点点升级版本,不要跨大版本升级:

如上方我的版本是13.12.7,可以先升级到13.12的最后一个版本13.12.15

docker pull gitlab/gitlab-ce:13.12.15-ce.0

然后删除旧容器,创建新拉的这个版本的容器,然后宿主机的数据就会被清洗为这个版本的,等待启动后,访问验证服务。

接下来继续升级

14.0.0 -> 14.1.0 -> 14.1.8 -> 14.2.0 -> 14.2.7 -> 14.6.1

这个版本一般按照第三个小版本从0到最后一个,然后升级中间的版本号,就不会错。具体的还是要看容器能不能跑起来。14.1.0无法直接到14.2.0但是,我试了14.2.7却可以直接到14.6.1

官方的版本升级路径查阅地址:Upgrading GitLab | GitLab

最后不要忘了清理一下垃圾镜像

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐