之前的 GitLab 是使用 Docker 安装,但是由于版本太低,再加上某次生产安全事故(后续细聊),导致某些功能使用受限,需要升级一下,文章记录下升级全过程。
准备工作
当前环境
- 服务器:Ubuntu 16.04.3 LTS
- Docker 版本:1.13.1
- GitLab 版本:CE 10.5.3
修改 Docker pull 镜像源
由于 Docker Hub 对镜像拉取限速,经过对阿里、中科大、清华、网易等镜像源测试,网易最快。
编辑 /etc/docker/daemon.json
,加入网易镜像地址:
{
"registry-mirrors": ["http://hub-mirror.c.163.com"]
}
使配置生效:
$ sudo systemctl daemon-reload
$ sudo systemctl docker restart
执行docker info
查看是否生效:
$ docker info
...
Registry Mirrors:
http://hub-mirror.c.163.com
...
备份 GitLab 数据
此部分直接参考官方文档:https://docs.gitlab.com/ce/raketasks/backup_restore.html,由于版本低于 12.2,所以使用 gitlab-rake
。
$ docker exec -t gitlab-container gitlab-rake gitlab:backup:create
备份成功的文件位于/var/opt/gitlab/backups
文件夹下。
恢复数据
备份文件恢复时,GitLab 的版本必须和备份时的版本一致,先恢复出数据,然后才可升级。由于备份时所用的版本是10.5.3
,所以必须在同版本的 GitLab 下恢复数据。
拉取镜像:
$ docker pull gitlab/gitlab-ce:10.5.3-ce.0
启动容器:
$ sudo docker run --detach --hostname gitlab.xxx.com --publish 9443:443 --publish 9080:80 --publish 9022: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:10.5.3-ce.0
复制备份文件到指定目录:
$ sudo cp 1616412017_2021_03_22_10.5.3_gitlab_backup.tar /srv/gitlab/data/backups/
进入容器,关闭与数据库有关的服务(也可直接不进入容器直接运行命令):
$ docker exec -it gitlab /bin/sh
$ gitlab-ctl stop unicorn
$ gitlab-ctl stop puma
$ gitlab-ctl stop sidekiq
# Verify
$ gitlab-ctl status
恢复数据(注意文件名):
$ gitlab-rake gitlab:backup:restore 1616412017_2021_03_22_10.5.3
重启并检查:
$ docker restart gitlab
$ docker exec -it gitlab gitlab-rake gitlab:check SANITIZE=true
升级 Docker 中的 GitLab 镜像
GitLab 不可直接升级到最新版,需要多个中间版本过渡,否则会升级失败(各个大版本的数据表结构甚至都不相同)。此处可参考官方的升级路线:https://docs.gitlab.com/ce/update/#upgrade-paths。
所以很明显,从 10.5.3 升级到最新版本路线是:10.5.3
->10.8.7
->11.11.8
->12.0.12
->12.1.17
->12.10.14
->13.0.14
->13.1.11
->13.10.0
。
接下来就是无脑的停止并删除容器->拉取指定版本镜像->启动容器
的循环了:
$ docker stop gitlab
$ docker rm gitlab
$ docker pull gitlab/gitlab-ce:X.X.X
$ sudo docker run --detach --hostname gitlab.xxx.com --publish 9443:443 --publish 9080:80 --publish 9022: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:X.X.X
最终,升级完毕:
遗留问题:GitLab 容器启动后会占用大量内存,待后续研究优化。
2022-05-29 更新
查阅资料,找到了相对靠谱的优化方案,见下文: