基于docker的github升级之路
公司的gitlab目前的版本是8.13.2,运行在docker容器内。该版本使用的api版本是V3,已经不适合一些监控统计工具的调用了,看了gitlab官网上对最新版V11的介绍,感觉功能很强大,更想更新尝试了。
心路历程
首先准备使用官方提供的基于docker的更新方式。
//!!!先做备份后执行
sudo docker stop gitlab
sudo docker rm gitlab
sudo docker pull gitlab/gitlab-ce:latest
sudo docker run --detach \
--hostname gitlab.example.com \
--publish 443:443 --publish 80:80 --publish 22:22 \
--name gitlab \
--restart always \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
通过尝试,该方案根本不行,因为版本跨度特别大,执行后git直接报500无法使用。
随后,通过网上查找文献知道了需要逐级升级到大版本的最后一个版本才行。为了不影响线上的git,我将gitlab做的备份复制到的我的本机,准备先运行相同版本gitlab的docker镜像,然后在容器内进行逐级升级。但事实是在docker内做升级时特别特别特别慢,而且CPU的4个核心都被docker的进程占用且几乎100%运行,我的MBP瞬间可以烤鸡蛋了……
另外,不要在ubuntu系统的的apt-get命令直接下载gitlab的软件包,实在是太慢了,可以从国内镜像下载deb包后直接执行,具体办法在执行方案里。
最终,只能采用去搭一台ubuntu的虚机,在虚机内完成的升级,既然docker上的git这么难维护,果断迁移到虚机来实现。具体步骤如下:
- 1、(在docker镜像内)对gitlab的8.13.2数据进行备份
- 2、使用迅雷下载gitlab各大版本的最后一版安装包(下载地址:)
- gitlab-ce_8.13.2-ce.0_amd64.deb
- gitlab-ce_8.17.8-ce.0_amd64.deb
- gitlab-ce_9.5.9-ce.0_amd64.deb
- gitlab-ce_10.8.7-ce.0_amd64.deb
- gitlab-ce_11.1.4-ce.0_amd64.deb
- 3、本地安装ubuntu16.4的虚拟机
- 4、在本地虚拟机中安装gitlab8.13.2
- 5、将步骤1的备份恢复到8.13.2
- 6、逐一升级安装至11.1.4
- 7、将11.1.4的版本进行备份
- 8、服务器上创建虚机
- 9、运行虚机,安装gitlab11.1.4后将步骤7的备份恢复
真的是有点麻烦,以后一定要注意及时升级。
执行方案
执行旧版本的备份
//执行备份
gitlab-rake gitlab:backup:create
//进入备份的默认文件夹
cd /var/opt/gitlab/backups
逐版本下载软件包
当然要包括当前所在的gitlab版本,否则无法恢复。下载可以使用浙江大学的镜像来查找,建议使用下载工具。地址
- gitlab-ce_8.13.2-ce.0_amd64.deb
- gitlab-ce_8.17.8-ce.0_amd64.deb
- gitlab-ce_9.5.9-ce.0_amd64.deb
- gitlab-ce_10.8.7-ce.0_amd64.deb
- gitlab-ce_11.1.4-ce.0_amd64.deb
安装Ubuntu虚拟机
在MBP上使用Parallel来安装是一键的。
在虚拟机中安装旧版本
//将下载好的文件复制进虚拟机,{}内的参数请自行替换
scp -P 22 {user}@{ip}:{path} ./
sudo -s
apt-get update
//我虚拟机的版本缺少openssh-server
apt-get install openssh-client
apt-get install openssh-server
//如遇缺少其他组件可以先安装组建后再继续执行
dpkg -i gitlab-ce_8.13.2-ce.0_amd64.deb
gitlab-ctl reconfigure
//运行后可以通过命令和浏览器来检查运行情况
gitlab-ctl status
执行旧版本的恢复
//没有问题的话,把备份的zip复制到默认备份文件夹
cp 8.13_gitlab_backup.tar /var/opt/gitlab/backups/1532675049_gitlab_backup.tar
//执行恢复
chomod 777 1532675049_gitlab_backup.tar
gitlab-rake gitlab:backup:restore BACKUP=1532675049
gitlab-ctl restart
gitlab-ctl status
逐一升级
因为默认的备份不是全量备份,建议在每次升级后做好数据备份
dpkg -i gitlab-ce_8.17.8-ce.0_amd64.deb
gitlab-ctl reconfigure
gitlab-ctl restart
gitlab-rake gitlab:backup:create
dpkg -i gitlab-ce_9.5.9-ce.0_amd64.deb
gitlab-ctl reconfigure
gitlab-ctl restart
gitlab-rake gitlab:backup:create
dpkg -i gitlab-ce_10.8.7-ce.0_amd64.deb
gitlab-ctl reconfigure
gitlab-ctl restart
gitlab-rake gitlab:backup:create
dpkg -i gitlab-ce_11.1.4-ce.0_amd64.deb
gitlab-ctl reconfigure
gitlab-ctl restart
gitlab11.1.4的数据备份
gitlab-rake gitlab:backup:create
服务器创建虚拟机
注意是Ubuntu16.4版本。
安装Git11.1.4并恢复备份
dpkg -i gitlab-ce_11.1.4-ce.0_amd64.deb
gitlab-ctl reconfigure
gitlab-rake gitlab:backup:restore BACKUP=11.1.4