记一次Gitlab的迁移

/ Linux / 0 条评论 / 190 浏览

前因

作为一个垃圾佬,云服务器那么贵的事,当然不会考虑高性能的,所以之前一只在洋垃圾工作站上搭建了内网的Gitlab,公网访问使用一个低配服务器做内网穿透使用,问题比较多,频繁掉线,家里断电,猫踩到工作站(机箱上真暖和)导致工作站关机都会导致服务中断。趁着各大云厂商服务器降价,采购了一个2C4G的云服务器,用作GItlab的服务器,而且还能玩玩其他的。

迁移准备

为了迁移顺利做了两手准备

  1. 将整个虚拟机磁盘文件备份
  2. 将整个gitlab的数据目录备份

由于之前用的docker版的gitlab,所以备份工作比较顺利

在云服务器上安装docker等必要软件,此时不得不吐槽251大厂的外网速度,docker按照官方教程下载了2个小时

开始迁移

旧服务器数据备份

进入docker内

gitlab-backup create STRATEGY=copy

会有以下警告,大意是说敏感性信息不会包含在备份中(gitlab.rb,gitlab-secrets.json)

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.

推送备份到目标服务器

scp /var/opt/gitlab/backups/* root@xxx.xxx.xxx.xxx:/srv

推送docker-compose.yml到目标服务器

scp /usr/local/docker/gitlab/docker-compose.yml root@xxx.xxx.xxx.xxx:/srv

启动目标服务器的Gitlab

docker-compose up -d

复制备份到backups

这一步注意,是复制到docker内的/var/opt/gitlab/backups

开始还原

例如你的备份文件叫 1583931743_2020_03_11_12.6.1_gitlab_backup.tar

则还原只需要

gitlab-backup restore BACKUP=1583931743_2020_03_11_12.6.1

也就是他会默认加上_gitlab_backup.tar

然后坑的地方来了。这个就尴尬了,然后还原失败。

由于我安装的镜像tag 是 latest

原服务器Gitlab版本 : 12.6.1

目标服务器GItlab版本:12.8.6

下载12.6.1太慢了,国内的网哦,一言难尽,所以我选择将原服务器的Gitlab镜像打包,传到目标服务器

打包原服务器Gitlab镜像,并推送

docker save -o gitlab-ce-lastest.tar gitlab/gitlab-ce:latest
scp gitlab-ce-lastest.tar root@xxx.xxx.xxx.xxx:/srv

目标服务器load镜像

先删除原来的镜像,load,然后查看以下是不是完成了,最后一定要改tag

docker rmi gitlab/gitlab-ce:latest
docker load --input gitlab-ce-lastest.tar
docker ps
docker tag gitlab/gitlab-ce:latest gitlab/gitlab-ce:12.6.1-ce.0

接下来就要先删除原来运行的数据,我的在/srv/gitlab 中,注意别把备份删了

利用docker-compose 启动镜像

启动完成后,再次操作还原,就可以还原回来了。

最后处理

备份的时候说了,不会处理gitlab.rb , gitlab-secrets.json

所以目标服务器依然需要改一下gitlab.rb,最少external_url需要改一下

反思

docker一定不要用latest

作为迁移而言,哪怕迁移失败,也要保证原数据没问题,原数据一定要提前先备份,以防不测。

附件

修正过后的 docker-compose.yml

version: '3'
services:
    gitlab:
      image: 'gitlab/gitlab-ce:12.6.1-ce.0'
      container_name: "gitlab"
      restart: always
      hostname: 'gitlab'
      environment:
        TZ: 'Asia/Shanghai'
      ports:
        - '80:80'
        - '443:443'
        - '22:22'
      volumes:
        - /srv/gitlab/config:/etc/gitlab
        - /srv/gitlab/data:/var/opt/gitlab
        - /srv/gitlab/logs:/var/log/gitlab