Gitlab从13版本升级至16及迁移docker容器操作
RAE1,865人阅读
背景: 因gitlab存在漏洞需升级至最新版本,当前发布的最新版本为16.8.0-ee
。当前服务的安装方式是通过传统的yum
方式,为了日后升级方便,这次将迁移至docker
容器运行。
整个过程分为以下部分:
- GitLab 备份
- Docker 迁移部署
- 还原备份
- GitLab 版本升级
- 功能验证
一、备份
1.1 仓库备份
Gitlab 的备份相对比较简单,直接使用以下命令即可:
sudo gitlab-rake gitlab:backup:create
注意,备份的过程非常漫长请耐心等待(当然取决于你的所有仓库大小) 备份好的文件存放在:/var/opt/gitlab/backups
也就是Gitlab 的安装目录,一般情况下是这个,如果找不到则需要自行百度一下。备份文件类似这样 1705434707_2024_01_17_13.4.3-ee_gitlab_backup.tar
。备份的路径如果找不到,可以在/etc/gitlab/gitlab.rb
中的gitlab_rails['backup_path']
找到。
1.2 配置文件备份
-
备份所有的配置文件
/etc/gitlab/*
-
备份
nginx
配置文件/var/opt/gitlab/nginx/*
1.3 停止服务
sudo gitlab-ctl stop
二、迁移部署
docker
容器部署也相对比较简单,官方文档:GitLab Docker images | GitLab,当然官方的操作是很复杂的,这里我们使用docker-compose
来部署就非常简单。
2.1 创建Docker目录
首先,我们先建好目录,来保存Docker
我们的数据:
cd /data/gitlab # 这里切换到你实际保存的路径
mkdir data
mkdir etc
mkdir log
mkdir backups
###################################################
ll
drwxr-xr-x. 2 root root 4096 1月 20 21:38 backups
drwxr-xr-x. 2 root root 4096 1月 20 21:38 data
drwxr-xr-x. 2 root root 4096 1月 20 21:40 etc
drwxr-xr-x. 2 root root 4096 1月 20 21:38 log
然后,把刚才在1.2
中的配置移到这里的etc
目录中来,如:
# pwd
/data/gitlab/etc
# ll
-rw-------. 1 root root 111413 1月 21 00:01 gitlab.rb
-rw-------. 1 root root 18896 1月 21 00:01 gitlab-secrets.json
drwxr-xr-x. 2 root root 4096 1月 21 00:01 trusted-certs
2.2 创建容器
我们使用docker-compose
来创建文件,先切换到你的dockerfiles
目录,没有可以自己建一个。
特别注意:切记一步到位!版本一定是你当前服务器的版本!!
特别注意:切记一步到位!版本一定是你当前服务器的版本!!
特别注意:切记一步到位!版本一定是你当前服务器的版本!!
首先,查看当前版本号命名为:
cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
# 以下输出的就是你当前的版本号
13.4.3-ee
然后,创建gitlab.yml
配置文件,参考以下文件即可。
cd /data/dockerfiles/
vim gitlab.yml
gitlab.yml
配置文件:
version: '3.6'
services:
gitlab:
image: 'gitlab/gitlab-ee:13.4.3-ee.0' # 注意:这里的版本号与上面输出的必须一致!
restart: always
hostname: 'gitlab'
container_name: 'gitlab'
privileged: true
environment:
TZ: 'Asia/Shanghai'
GITLAB_OMNIBUS_CONFIG: |
# 以下的配置文件从 /etc/gitlab/gitlab.rb 里面复制过来即可
# 以下是作者的服务器配置,不建议照搬!
external_url 'http://192.168.1.1'
puma['port'] = 8010
gitlab_rails['time_zone'] = 'Asia/Shanghai'
gitlab_rails['gitlab_default_theme'] = 2
gitlab_rails['object_store']['enabled'] = false
gitlab_rails['object_store']['connection'] = {}
gitlab_rails['object_store']['storage_options'] = {}
gitlab_rails['object_store']['proxy_download'] = false
gitlab_rails['object_store']['objects']['artifacts']['bucket'] = nil
gitlab_rails['object_store']['objects']['external_diffs']['bucket'] = nil
gitlab_rails['object_store']['objects']['lfs']['bucket'] = nil
gitlab_rails['object_store']['objects']['uploads']['bucket'] = nil
gitlab_rails['object_store']['objects']['packages']['bucket'] = nil
gitlab_rails['object_store']['objects']['dependency_proxy']['bucket'] = nil
gitlab_rails['object_store']['objects']['terraform_state']['bucket'] = nil
gitlab_rails['manage_backup_path'] = true
gitlab_rails['backup_path'] = "/var/gitlab/backups"
gitlab_rails['backup_archive_permissions'] = 0644
gitlab_rails['backup_keep_time'] = 432000
git_data_dirs({
"default" => {
"path" => "/var/gitlab/data"
}
})
ports:
- '8090:80' # 端口号映射,服务器默认是80,这里建议先改成8080升级成功后再改回来。
volumes: # 以下是在2.1中创建好的目录
- '/data/gitlab/etc:/etc/gitlab'
- '/data/gitlab/log:/var/log/gitlab'
- '/data/gitlab/data:/var/gitlab/data'
- '/data/gitlab/backups:/var/gitlab/backups'
shm_size: '256m'
2.3 启动容器
docker-compose -f gitlab.yml up -d
查看运行情况
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
222ae262217d gitlab/gitlab-ee:13.4.3-ee.0 "/assets/wrapper" 17 seconds ago Up 11 seconds (health: starting) 22/tcp, 443/tcp, 0.0.0.0:8090->80/tcp gitlab
第一次启动比较慢,耐心等待几分钟。(这里作者等了8分钟)
等待过程中,可以使用以下命令查看容器的运行日志情况。
docker logs -f --tail 100 gitlab
这里有时间可以继续往下看,或者查看第四点先。
启动完成后在浏览器访问验证是否启动成功:http://127.0.0.1:8090
看到这里已经成功跑起来了,咱们先不着急登录,继续按照下面的步骤把恢复一下备份先。
三、还原备份文件
3.1 复制备份文件
把1.1
中备份好的文件复制到2.1
中的目录:/data/docker/backups
cp 1705765212_2024_01_20_13.4.3-ee_gitlab_backup.tar /data/gitlab/backups/
这里复制过程也是比较漫长的,作者这里有几十个G的大小,耐心等待一下。
等待过程可以先跳到执行4.1
进行docker镜像下载。
3.2 执行还原
执行以下命令:
# 1.进入容器
docker exec -it gitlab /bin/bash
# 2.停止服务
sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop puma
sudo gitlab-ctl stop sidekiq
# 查看服务是否正常停止
sudo gitlab-ctl status |grep down
# down: puma: 57s, normally up; run: log: (pid 872) 2008s
# down: sidekiq: 1846s, normally up; run: log: (pid 899) 2003s
# 3.查看备份文件
cd /var/gitlab/backups
ls
# 1705765212_2024_01_20_13.4.3-ee_gitlab_backup.tar
# 4.执行还原,注意这里文件名不需要【_gitlab_backup.tar】
gitlab-rake gitlab:backup:restore BACKUP=1705765212_2024_01_20_13.4.3-ee
# Unpacking backup....
恢复过程还需要输入3次的yes,
之后还是继续漫长的等待····
3.3 还原验证
还原结束后,重启服务并检查是否正常。
sudo gitlab-ctl restart
sudo gitlab-rake gitlab:check SANITIZE=true
最后登录进去查看各个仓库及功能是否正常。
至此,Gitlab迁移至docker 容器完成! 接下来进行升级操作。
四、版本升级
首先,版本是不能一步到位升级上去的。 需要遵循小版本逐步升级,官方提供升级路径,输入你当前的版本号就可以了。Upgrade Path (gitlab-com.gitlab.io)
例如作者这里的是13.4.7
,选择升级方式为docker
,官方给出的结果是这样的。
4.1 镜像下载
我们把官网的升级路径做成一个脚本文件,先把容器镜像先下载下来。
vim gitlab-docker.sh
#!/bin/bash
docker pull gitlab/gitlab-ee:13.8.8-ee.0
docker pull gitlab/gitlab-ee:13.12.15-ee.0
docker pull gitlab/gitlab-ee:14.0.12-ee.0
docker pull gitlab/gitlab-ee:14.3.6-ee.0
docker pull gitlab/gitlab-ee:14.9.5-ee.0
docker pull gitlab/gitlab-ee:14.10.5-ee.0
docker pull gitlab/gitlab-ee:15.0.5-ee.0
docker pull gitlab/gitlab-ee:15.4.6-ee.0
docker pull gitlab/gitlab-ee:15.11.13-ee.0
docker pull gitlab/gitlab-ee:16.1.6-ee.0
docker pull gitlab/gitlab-ee:16.3.7-ee.0
docker pull gitlab/gitlab-ee:16.7.3-ee.0
docker pull gitlab/gitlab-ee:16.8.0-ee.0
4.2 逐一升级
首先,停止容器。
docker-compose -f gitlab.yml stop
然后修改gitlab.yml
的容器版本
version: '3.6'
services:
gitlab:
image: 'gitlab/gitlab-ee:13.8.8-ee.0' # 根据上面的版本号顺序逐一修改
# ... 这里省略其他....
附:从13.4.7版本升级到16.8.0版本过程版本
13.8.8
=> 13.12.15
=> 14.0.12
=> 14.3.6
=> 14.9.5
=> 14.10.5
=> 15.0.5
=> 15.4.6
=> 15.11.13
=> 16.1.6
=> 16.3.7
=> 16.7.3
=> 16.8.0
重启容器
docker-compose -f gitlab.yml up -d
# 看看容器日志有没有什么异常或报错
docker logs -f -t --tail 100 gitlab
特别注意:一定要留意后台迁移任务是否都已经执行完毕,只有全部执行完毕后才能继续操作。
查看后台迁移状态地址:http://127.0.0.1:8090/admin/background_migrations
等待升级完成后,进入系统查看功能是否正常。正常后依此类推,重复以上操作即可。
4.3 定时备份
docker-compose
跑的 GitLab 如果需要用 crontab 方式来进行备份的话,docker-compose exec 后面记得加 -T:
-T 为不分配 TTY,如果不加的话,利用 crontab 来运行会报: the input device is not a TTY
docker-compose exec -T gitlab gitlab-backup create
评论 | 0 条评论