GX博客

分享个人 Full-Stack JavaScript 项目开发经验

GitLab的备份和恢复

本文将介绍 CentOS7 中通过 Yum 安装的 Omnibus GitLab 的备份和恢复。对此,官方有十分详尽的介绍,也推荐你先看完官方文档,才能对 Gitlab 的备份和恢复有更好理解。这里主要针对普通 Gitlab 服务器的迁移情景,作精简概括,并列出需要注意的问题。


备份

执行备份前请先结束项目中的所有 pipeline 工作。以复制临时数据文件的策略来备份:

sudo gitlab-backup create STRATEGY=copy

其中备份的内容包括:

  • db(数据库)
  • uploads(附件)
  • repositories(Git 仓库数据)
  • builds(CI 作业输出日志)
  • artifacts(CI 工作工件)
  • lfs(LFS 对象)
  • registry(容器注册表图像)
  • pages(页面内容)

备份文件会保存到默认的 /var/opt/gitlab/backups 路径上,并以约定的时间戳格式作为文件名,它包含时间戳、日期、Gitlab 版本等信息,如:

1586605881_2020_04_11_12.9.2-ee_gitlab_backup.tar

在执行备份命令成功后,会提示备份配置文件。它们至少包括:

  • /etc/gitlab/gitlab-secrets.json
  • /etc/gitlab/gitlab.rb

因为 gitlab-secrets.json 包含数据库加密密钥,CI/CD 变量以及用于双因素身份验证的变量。出于安全因素考虑,这些加密信息被单独保存到该文件。

恢复

官方多次强调,要确保备份和恢复时使用的是同一版本的 Gitlab。

将备份文件拷贝到新 Gitlab 服务器的备份目录,并设置文件属主为 git:

sudo chown git:git /var/opt/gitlab/backups/1586605881_2020_04_11_12.9.2-ee_gitlab_backup.tar

停止连接到数据库的进程,保持其余的 GitLab 进程运行:

sudo gitlab-ctl stop unicorn
sudo gitlab-ctl stop puma
sudo gitlab-ctl stop sidekiq

再检查一下:

sudo gitlab-ctl status

指定要还原的备份文件时间戳标记,执行恢复操作:

sudo gitlab-backup restore BACKUP=1586605881_2020_04_11_12.9.2-ee

将备份的配置文件覆盖到 /etc/gitlab 目录下,并修改 EXTERNAL_URL 等配置信息。

重载配置,重启 GitLab:

sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart

检查 GitLab:

sudo gitlab-rake gitlab:check SANITIZE=true

到此为止,Gitlab 的备份和恢复步骤已经完成,它将恢复所有代码仓库、用户群组、用户密钥等内容。


要了解更多备份情景处理方式,请参阅 Gitlab 官方说明文档备份和还原GitLab

版权声明:

本文为博主原创文章,若需转载,须注明出处,添加原文链接。

https://leeguangxing.cn/blog_post_78.html