近期公司搭建的gitlab(docker方式运行,版本12.8.2-ee.0)中了勒索病毒,导致所有的gitlab项目打开详情时404,虽然服务器上数据总量没有缺少,但是项目路径数据缺失了。
起初查看docker服务,没有任何异常,尝试过重启docker服务,更换高版本和低版本的gitlab镜像,但是跨度大的镜像会造成各种各样的问题。无奈之下只能用备份数据迁移重构。
image.png

迁移数据前提

查看gitlab版本(二选一)

  1. cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
  2. gitlab-rake gitlab:env:info

两台服务器的Gitlab版本必须是统一的,如有不统一,请先进行升级(递进升级)。不同版本的gitlab默认存储方式不一样;不同版本的gitlab进行数据迁移会造成数据混乱。

一、旧服务器数据备份

1.备份原有服务器上文件信息

GitLab提供的备份Rake任务是不会备份配置文件的

  • /etc/gitlab/gitlab.rb:该文件配置了gitlab的域名、邮件发送信息、白名单等相关信息。
  • /etc/gitlab/gitlab-secrets.json:该文件存储了gitlab的db secret信息。

将原有服务器上的以上两个文件复制到新服务器上对应目录下。

2.备份原有服务器上gitlab数据信息

使用以下命令进行备份。

  1. /usr/bin/gitlab-rake gitlab:backup:create

image.png
默认备份完成的文件存放目录为:/var/opt/gitlab/backups,自动生成文件名文件名如1638327381_2021_12_01_14.5.0-ee_gitlab_backup.tar;
image.png
若该目录下不存在,则需要查看/etc/gitlab/gitlab.rb配置中对应的gitlab_rails[‘backup_path’]选项所指定的目录。

二、新服务器恢复数据

1、安装相同版本的gitlab

国内清华大学镜像地址 https://mirrors.tuna.tsinghua.edu.cn/gitlab-ee/yum/el7/
按照官网教程安装即可 https://about.gitlab.com/install/

2、将备份文件拷贝至新环境

拷贝配置文件
将gitlab.rb和gitlab-secrets.json放到/etc/gitlab/目录下

拷贝数据文件
备份文件要放到配置文件/etc/gitlab/gitlab.rb 中,配置项gitlab_rails[‘backup_path’] (默认是/var/opt/gitlab/backups)或者backup: path: “tmp/backups”(默认是/home/git/gitlab/tmp/backups)指定的路径下

3、恢复备份文件

新服务器执行恢复命令

  1. chown -R git.git /var/opt/gitlab/backups/
  2. gitlab-rake gitlab:backup:restore RAILS_ENV=production BACKUP=1638327381_2021_12_01_14.5.0-ee

其中1583983278_2020_03_12_11.5.0-ee对应的为gitlab备份tar包的版本号,注意这里没有后面的_gitlab_backup.tar名字

4、重新启动gitlab

  1. gitlab-ctl reconfigure && gitlab-ctl restart