Gitlab 备份、迁移、恢复和升级
前言
前端时间公司服务被矿机攻击,整个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 action
runon 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~