Gitlab 备份、迁移、恢复和升级

2118

前言

前端时间公司服务被矿机攻击,整个gitlab服务被矿机杀死,导致公司内部的git服务全面宕机,整个回复过程苦不堪言,在此就就不一一赘述了。一句话,勤冷备,多热备。

正文

备份配置

  • 修改备份文件目录

可以通过/etc/gitlab/gitlab.rb配置文件来修改默认存放备份文件的目录

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

修改完成之后使用gitlab-ctl reconfigure命令重载配置文件即可

  • 设置备份过期时间

编辑/etc/gitlab/gitlab.rb文件

找到gitlab_rails['backup_keep_time'] = 604800,备份时间以秒为单位

  • gitlab自动备份

创建定时任务

crontab -e
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create

原gitlab备份

注意,备份时需要保持gitlab处于正常运行状态。

  • 在任意目录下执行备份命令
gitlab-rake gitlab:backup:create

如果没有更改过gitlab备份文件的配置信息,那么使用以上命令会在/var/opt/gitlab/backups目录下创建一个名称类似为1576260022_2019_12_13_11.1.4_gitlab_backup.tar的压缩包, 这个压缩包就是Gitlab整个的完整部分, 其中开头的1576260022_2019_12_13_11.1.4是备份创建的日期,这里只是一个示例,注意后续备份还原使用你自己的日期编号。

  • 将配置文件进行备份
    • /etc/gitlab/gitlab.rb 配置文件须备份
    • /var/opt/gitlab/nginx/conf nginx配置文件
    • /etc/postfix/main.cfpostfix 邮件配置备份

gitlab迁移

  • 迁移有两大要点:
    • 在新服务器上安装相同版本的gitlab
    • 将备份生成的备份文件发送到新服务器的相同目录下

此两点有任何不一致,都可能导致数据迁移失败。

  • 在新服务器上运行一个相同版本的gitlab服务

  • 在老服务器上将备份文件发送至新服务器的相应目录下

scp /var/opt/gitlab/backups/1576260022_2019_12_13_11.1.4_gitlab_backup.tar root@你的IP地址:/var/opt/gitlab/backups/
  • gitlab数据恢复

停止相关数据连接服务

gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq

修改权限,如果是从本服务器恢复可以不修改

chmod 777 /var/opt/gitlab/backups/1576260022_2019_12_13_11.1.4_gitlab_backup.tar

1576260022_2019_12_13_11.1.4编号备份中恢复

gitlab-rake gitlab:backup:restore BACKUP=1576260022_2019_12_13_11.1.4

按照提示输入两次yes并回车

  • 启动gitlab
gitlab-ctl start
  • 浏览新的gitlab服务地址,使用原gitlab的账号登陆页面,登陆成功即数据迁移完成。

在实际情况中访问gitlab可能是用域名访问,我们可以修改gitlab配置文件中的url再进行备份,这样就不会影响迁移过程,恢复完成后需要进行的只是修改域名对应的dns解析ip地址

gitlab升级(可选)

此操作不是必要的,只为数据迁移前后gitlab版本不统一时的备用方案。

  • 关闭gitlab服务
gitlab-ctl stop
  • 备份
gitlab-rake gitlab:backup:create
  • 下载新版gitlab的rpm包安装,安装时选择升级

安装的过程中可能会出现报错,Error executing actionrunon resource 'ruby_block[directory resource: /var/opt/gitlab/git-data/repositories]',解决方法为设置权限:chmod 2770 /var/opt/gitlab/git-data/repositories

  • 安装成功后重新加载配置并启动
gitlab-ctl reconfigure
gitlab-ctl restart

gitlab更改默认的nginx(可选)

  • 编辑/etc/gitlab/gitlab.rb文件

在文件内找到如下位置,不启用Nginx

nginx['enable'] = false
  • 检查默认nginx配置文件,并迁移至新Nginx服务

nginx配置文件,包含gitlab-http.conf文件

/var/opt/gitlab/nginx/conf/nginx.conf

gitlab核心nginx配置文件

/var/opt/gitlab/nginx/conf/nginx.conf
  • 重启 nginx、gitlab服务
gitlab-ctl restart
systemctl restart nginx.service

访问可能出现报502。原因是nginx用户无法访问gitlab用户的socket文件。 重启gitlab需要重新授权

chmod -R o+x /var/opt/gitlab/gitlab-rails

后记

感谢原作者的辛勤付出~

enjoy~