一键安装Gitlab后的备份、迁移与恢复

原创做品,http://linuxerxy.blog.51cto.com/10707334/1865414 linux


1.Gitlab建立备份git

1
#gitlab-rake gitlab:backup:create

使用以上命令会在/var/opt/gitlab/backups目录下建立一个名称相似为1393513186_gitlab_backup.tar的压缩包,这个压缩包就是Gitlab整个的完整部分其中开头的1393513186是备份建立的日期。json

2.Gitlab恢复centos

1
2
3
4
5
6
7
8
9
# 中止相关数据链接服务
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
  
# 从1393513186编号备份中恢复
gitlab-rake gitlab:backup:restore BACKUP=1393513186
 
# 启动Gitlab
sudo  gitlab-ctl start

3.Gitlab迁移bash

迁移如同备份与恢复的步骤同样只须要将老服务器/var/opt/gitlab/backups目录下的备份文件拷贝到新服务器上的/var/opt/gitlab/backups便可(若是你没修改过默认备份目录的话)。可是须要注意的是新服务器上的Gitlab的版本必须与建立备份时的Gitlab版本号相同好比新服务器安装的是最新的8.5版本的Gitlab, 那么迁移以前最好将老服务器的Gitlab 升级为8.5再进行备份。服务器

4.自动备份app

经过crontab使用备份命令实现自动备份:ide

1
2
sudo  su  -
crontab  -e

例如加入如下, 实现天天凌晨2点进行一次自动备份:gitlab

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


恢复过程当中遇到一个错误:url

1
2
3
4
5
6
7
8
9
10
11
12
Started GET  "/EagleEye/BMH.EagleEye"  for  127.0.0.1 at 2016-10-25 10:54:32 +0800
Processing by ProjectsController #show as HTML
   Parameters: { "namespace_id" => "EagleEye" "id" => "BMH.EagleEye" }
Completed 500 Internal Server Error  in  215ms (ActiveRecord: 19.5ms)
 
OpenSSL::Cipher::CipherError (bad decrypt):
   app /models/project .rb:383: in  `import_url'
   app /models/project .rb:413: in  `external_import?'
   app /models/project .rb:405: in  ` import ?'
   app /models/project .rb:421: in  `import_in_progress?'
   app /controllers/projects_controller .rb:93: in  `show'
   lib /gitlab/middleware/go .rb:16: in  `call'

系统是centos 6.2的 ,gitlab是8.8.5迁移到另一台服务器上的,其它页面均可以正常显示,可是一点击项目就会显示500,。查看/var/log/gitlab/gitlab-rails/production.log日志,发现上述错误 。

经过搜索知道,这是gitlab数据迁移时的一个缺陷。解决方法:

一、覆盖原来gitlab的 db_key_base 到新的gitlab 

db_key_base  位置在 /etc/gitlab/gitlab-secrets.json  

二、EE版本执行
sudo gitlab-rails runner "Project.where(mirror: false).where.not(import_url: nil).each { |p| p.import_data.destroy if p.import_data }"

CE版本执行
sudo gitlab-rails runner "Project.where.not(import_url: nil).each { |p| p.import_data.destroy if p.import_data }"

重启gitlab,发现500错误不见,项目能访问到。