Gitlab(ce)社区版备份和恢复
版本: gitlab-ce:9.5.5
运行环境: docker + gfs
备份 for Docker or Omnibus installations
最佳实践
数据备份
$ gitlab-rake gitlab:backup:create STRATEGY=copy DIRECTORY=daily
# STRATEGY=copy 表示先进行拷贝,完成后再使用tar/gzip进行打包,避免出现因为频繁访问出来的`file changed as we read it`
# DIRECTORY=daily 将备份按天分组保存
- 注意
本例中使用了gfs作为gitlab的存储. 在进行备份时,若备份文件存储在gfs中会一直出现tar: xxx: file changed as we read it
, 导致备份失败. 解决办法就是在gitlab.rb
中将备份目录配置在本地存储
配置备份
主要备份gitlab.rb
和gitlab-secrets.json
$ tar czf /var/opt/gitlab/backups/`date +%s`_config_gitlab_backup.tar /etc/gitlab/gitlab.rb /etc/gitlab/gitlab-secrets.json /etc/gitlab/ssl
# /etc/gitlab/gitlab.rb 配置文件
# /etc/gitlab/gitlab-secrets.json CI的secrets文件
# 本例将域名证书挂载在/etc/gitlab/ssl/, 可移除
备份的配置参数
配置文件位置/etc/gitlab/gitlab.rb
备份存储位置
gitlab_rails['backup_path'] = /var/opt/gitlab/backups
备份保留时间,超过这个时间会被删除
# limit backup lifetime to 7 days - 604800 seconds
gitlab_rails['backup_keep_time'] = 604800
恢复 for Docker or Omnibus installations
要求:
- 使用相同版本
恢复配置文件gitlab.rb
到/etc/gitlab/gitlab.rb
, 并重新配置
gitlab-ctl reconfigure
重启gitlab
gitlab-ctl restart
传输备份文件1512026157_2017_11_30_9.5.5_gitlab_backup.tar
到gitlab.rb中配置的备份地址gitlab_rails['backup_path']
, 默认为/var/opt/gitlab/backups
停止有数据库连接的进程
$ gitlab-ctl stop unicorn
$ gitlab-ctl stop sidekiq
# Verify
$ gitlab-ctl status
指定备份文件TIMESTAMP
进行恢复,本例TIMESTAMP
为1512026157_2017_11_30_9.5.5
gitlab-rake gitlab:backup:restore BACKUP=1512026157_2017_11_30_9.5.5
然后恢复备份的secrets文件gitlab-secrets.json
到/etc/gitlab/gitlab-secrets.json
启动并测试
$ gitlab-ctl restart
$ gitlab-rake gitlab:check SANITIZE=true
crontab 例行备份
- 容器中没有启用CRON调用,这里在宿主机上进行调用定时备份
0 4 * * * docker exec gitlabce_web_1 sh -c "gitlab-rake gitlab:backup:create STRATEGY=copy DIRECTORY=daily" CRON=1