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