背景
博主有一个阿里云的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若不清楚具体版本号可以前往下面地址查询。
https://hub.docker.com/r/gitlab/gitlab-ce/tags
hostname是你的域名,容器创建根据自己需要进行参数修改和调整,特别注意版本一致。
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
最后不要忘了清理一下垃圾镜像