记录升级gitlab、恢复历史数据及配置自动备份过程

公司的gitlab版本为10.5.6,近期得到消息小于13.10的gitlab存在严重的安全漏洞,具体漏洞描述如下:

GITLAB 远程命令执行漏洞(CVE-2021-22205)

因此记录gitlab升级过程,升级使用了docker方式,比较方便,另外还配置了nginx的stream方式转发,以及自动备份。

一、gitlab恢复数据及升级

由于原先是非docker方式部署,所以需要先搭建老版本的docker->导入恢复历史数据->逐步升级到最高版本。高版本无法直接恢复低版本的备份文件。

1. 搭建老版本的gitlab

(1)建议将仓库地址修改为国内地址:

vi /etc/docker/daemon.json

添加内容如下:

{

"registry-mirrors": ["https://3laho3y3.mirror.aliyuncs.com"]

}

之后重启docker服务:

service docker restart

(2)拉镜像

docker pull gitlab/gitlab-ce:10.5.6-ce.0

(3)启动容器

export GITLAB_HOME=/gitlab

sudo docker run --detach \

--hostname 你的IP \

--publish 443:443 --publish 80:80 --publish 23:22 \

--name gitlab \

--restart always \

--volume $GITLAB_HOME/config:/etc/gitlab:Z \

--volume $GITLAB_HOME/logs:/var/log/gitlab:Z \

--volume $GITLAB_HOME/data:/var/opt/gitlab:Z \

gitlab/gitlab-ce:10.5.6-ce.0

(4)启动过程比较长,可以查看日志观察进度:docker logs -f gitlab

  同时可以docker ps观察启动状态,启动状态依次为starting->unhealthy->healthy

2. 恢复备份文件

(1)复制备份文件

复制到容器中默认备份路径/var/opt/gitlab/backups,或者直接放到宿主机的映射目录$GITLAB_HOME/data/backups,如下为复制到容器命令

docker cp 1597959631_2020_08_20_11.2.3_gitlab_backup.tar.tar gitlab:/XXX

(2)恢复备份文件

进入到容器中:docker exec -it gitlab /bin/bash 

之后恢复命令为:

gitlab-rake gitlab:backup:restore BACKUP=1597959631_2020_08_20_11.2.3

3. 升级gitlab

需要注意gitlab官网提示升级需要遵照一定的升级路线,具体官方建议的路线如下

Gitlab Docker升级路线

我的升级路线如下,怀疑可以直接升级到最新版本,或者中间版本有些没有必要,有兴趣的自己尝试吧。

10.5.6-> 10.8.7-> 11.11.8-> 12.0.12-> 12.10.6->13.0.0->13.9.2->13.12.12->14.0.11-14.1.6-latest(最新为14.4.1)

(1)拉取所有镜像

附gitlab hub地址

docker pull gitlab/gitlab-ce:10.8.7-ce.0

docker pull gitlab/gitlab-ce:11.11.8-ce.0

docker pull gitlab/gitlab-ce:12.0.12-ce.0

docker pull gitlab/gitlab-ce:12.10.6-ce.0

docker pull gitlab/gitlab-ce:13.0.0-ce.0

docker pull gitlab/gitlab-ce:13.9.2-ce.0

docker pull gitlab/gitlab-ce:13.12.12-ce.0

docker pull gitlab/gitlab-ce:14.0.11-ce.0

docker pull gitlab/gitlab-ce:14.1.6-ce.0

docker pull gitlab/gitlab-ce:latest

(2)停止并删除现有的docker容器,不要删除宿主机的映射目录

docker stop gitlab

docker rm gitlab

(3)启动docker容器,注意确认必须有GITLAB_HOME变量

sudo docker run --detach \

--hostname 你的IP \

--publish 443:443 --publish 80:80 --publish 23:22 \

--name gitlab \

--restart always \

--volume $GITLAB_HOME/config:/etc/gitlab:Z \

--volume $GITLAB_HOME/logs:/var/log/gitlab:Z \

--volume $GITLAB_HOME/data:/var/opt/gitlab:Z \

gitlab/gitlab-ce:10.8.7-ce.0

(4)按升级路线,反复执行(2)->(3),docker run命令只有最后一行需要改为当前升级的目标tag

二、nginx配置stream

 需要在其他服务器的nginx跳转到gitlab,使用stream模块

1. 查看version是否包含了stream模块:

./nginx -V

是否包含

configure arguments: --with-stream

2.如果未包含则重新configure,比较简单,下载并进入nginx安装包目录

./configure --with-stream

make install

3. 修改stream

stream{

upstream gitlab {

#转发到gitlab的内网IP

server 你的GitlabIP:80;

}

server{

listen 你对外的端口;

proxy_pass gitlab;

#可选择只允许指定IP访问,注意deny放到最下边,如果放到第一个将禁止任何访问

allow 192.168.1.0/24;

deny all;

}

}

三、 配置定时备份并将备份文件上传到指定服务器

在宿主机配置定时任务,使用rsync上传到其他服务器

1. 修改gitlab.rb

位于宿主机的$GITLAB_HOME/config目录下,打开如下前两行注释,修改第三条的备份有效时间,改为3天,即超过三天的备份文件自动删除

gitlab_rails['manage_backup_path'] = true

gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"

gitlab_rails['backup_keep_time'] = 259200

2. 安装输入密码的辅助包:expect

yum install expect

3. 修改shell脚本

我的目录为: /mm/uploadGitLabBak,注意修改shell脚本、exp文件为你的真实目录

upload.sh

#!/bin/bash
docker exec gitlab /bin/bash -c 'gitlab-rake gitlab:backup:create'
expect /mm/uploadGitLabBak/upload.exp

 upload.exp文件内容

#/bin/bash/expect 

 #备份目标服务器用户
set user mmfiles
 #备份目标服务器密码
set pwd 你的密码
 #备份目标服务器IP
set destIpAddr 192.168.1.201
 #备份目标服务器目录
set destFilePath /dest/gitlab-bak-14/
 #备份目标服务器ssh端口
set sshPort 22
#备份文件夹
set srcFilePath /此处为你的宿主机变量GITLAB_HOME/data/backups/

spawn rsync -av -e "ssh -p $sshPort" --delete $srcFilePath $user@$destIpAddr:$destFilePath

#等待如上命令执行完成,超时时间无限
set timeout -1
expect "*password:" 
send "$pwd\n"


expect eof 

 4.配置定时任务每天0点运行

0 0 * * * /mm/uploadGitLabBak/upload.sh > /mm/uploadGitLabBak/uploadGitBak.log 2>&1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值