灾备还原之gitlab
备份情景:服务器A架设了gitlab
,定期通过duplicity
发送加密备份给B服务器,现在由于某种情况生产机器A完全无法访问(主机商跑路?硬盘冒烟?服务器BOOM了?),本地存有还原备份所需要的所有信息(例如:B机器访问密钥,备份加密密钥)
PS: 总体来说,gitlab的还原还是很简单的,因为gitlab的还原还是很傻瓜式
的.
文档汇总:备份所使用的工具及gitlab帮助
- duplicity官网
- duplicity某大神写的备份脚本
- gitlab omnibus安装指南
- gitlab 备份还原指南
- duplicity-0.7.07(stable)安装日志
- iptables防火墙设置 Arch WiKi
- gitlab不同版本选择下载官方地址
本地存有的信息(关于A,及当时的备份记录)
- A机器的系统:Ubuntu14.04_x86_64
- duplicity版本 : 本地没有记录,不详...
- gitlab的版本: 8.6.5 omnibus安装(没有记录...但是万幸的是它的备份文件中含有当时的版本信息)
- 备份B的访问信息(ssh端口,密钥...),备份机B验证访问正常.
- duplicity的加密公私钥,密码
- duplicity的备份脚本配置.
- gitlab生成的备份: 类似:1460181615_gitlab_backup.tar之样的文件.
假设我们在C机器上进行还原,C的系统为全新CentOS6.7_x86_64_minimal
,虽然说A是Ubuntu但是gitlab的还原是可以跨系统的.
0.0 为C设置基本的安全设置,上传本地备份信息.
C为全新的机器,而它访问的方式默认为明文密码,且ssh端口也为默认的22,这很容易遭到各种扫描,我们将它改成端口非默认,密钥访问,且不允许root直接登录,并设置iptalbes防火墙,我一般参照Arch WiKi
0.1 安装duplicity
我们使用最新的stable 0.7.07
版本,关于这个版本的安装我已经写了一篇安装日志,这里不再细说,略.duplicity-0.7.07(stable)安装日志
0.2 导入GPG密钥
备份工具使用的是duplicity,我使用了它可以用GPG加密的特性,当时已经导出加密密钥为ASCII文档保存到本地,使用gpg --import you_key_files
来导入公私钥.
0.3 安装gitlab(版本为8.6.5),使用omnibus安装.
gitlab使用omnibus安装比较简单,不懂的多看看官方文档就行了gitlab还原官方文档
OK,如果你对gitlab还原有所了解的话,官方文档特别指出了还原所要使用的版本号与你备份时所使用的必须相同.
You can only restore a backup to exactly the same version of GitLab that you created it on, for example 7.2.1.
所以这里最要注意的就是版本要对上,还有还原机的内存最好2G以上,gitlab安装完成后很吃内存.
恩,如果你想要还原gitlab的话,建议你还是先认真的看看gitlab的官方文档再说. 到官网的这个页面选择好要安装的版本gitlab文档,它会生成一个安装指令,跟着它做就没问题,建议直接在搜索里查找,找到后点击进去会生成该版本对应的安装指令,这是针对我的系统和gitlab版本生成的指令:
curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
sudo yum install gitlab-ce-8.6.5-ce.0.el6.x86_64
运行完以上指令后,gitlab不是算是安装完成了,最后使用以下指令来配置gitlab,这个指令要花费5分钟以上的时间(你可以喝口水并祈祷它不会报错)
gitlab-ctl reconfigure
OK,没报错的话找到官方的还原文档-->gitlab_backup_restore
0.4 gitlab还原
恢复的前提:
- 版本要相同,这个已经说了.
- 安装完成后要运行
gitlab-ctl reconfigure
一次,这次也满足了. - gitlab当前要在运行的状态下,如果没有,使用
gitlab-ctl start
来启动它.
首先还原是建立在备份的情况下的,我们使用duplicity还原备份到C.
bash duplicity-backup.sh -c gitlab_backup.conf -t "20160409" --restore /root/data/gitlab
恢复的日期为4月9号,将备份存到/root/data/gitlab
下,接下来按照gitlab官方文档的来:
1.将备份文件复制到/var/opt/gitlab/backups/
目录
cp /root/data/gitlab/1460181615_gitlab_backup.tar /var/opt/gitlab/backups/
注意要把你的备份文件的权限设置成git:git
chown git:git /var/opt/gitlab/backups/1460181615_gitlab_backup.tar
2.将连接到数据库的gitlab组件停止,其它组件状态不要改变.
sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop sidekiq
3.设置你要还原的文件,下面的1460181615
是你的备份文件的前面的数字,例如我 1460181615_gitlab_backup.tar
sudo gitlab-rake gitlab:backup:restore BACKUP=1460181615
没有报错的话,中间会叫你确认两次,然后是一大堆的 ALERT TABLE DEL TABLE
4.最后一步重启gitlab,重启会花费15秒以上的时间,在这之前访问是会报502的.
gitlab-ctl restart
OK,访问后完美恢复到20160409的状态,还原成功!