ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

极狐Gitlab备份与恢复

2022-07-14 09:03:54  阅读:218  来源: 互联网

标签:02 INFO gitlab -- 备份 Gitlab 极狐 6153 2022


极狐Gitlab备份与恢复

1. 备份说明

官方原文:

根据官方文档,备份有多种方式,比如 local、s3、nfs 等。无论上述哪种备份方式,在备份数据的时候,极狐GitLab都会在默认本地备份路径先备份一份,再上传到 remote。

命令会备份的内容:

  • Database
  • Attachments
  • Git repositories data
  • CI/CD job output logs
  • CI/CD job artifacts
  • LFS objects
  • Container Registry images
  • GitLab Pages content
  • Snippets
  • Group wikis

命令不会备份的内容:

  • Terraform state files
  • Package registry files
  • Mattermost data
  • 配置信息(gitlab-secrets,gitlab.rb等)

2. 备份准备

2.1 安装rsync

yum install rsync -y

2.2 备份路径配置

默认的备份路径在 /var/opt/gitlab/backups,可以通过 /etc/gitlab/gitlab.rb 修改成其它路径

## Backup settings
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"

3. 本地备份

3.1 备份数据

如果极狐Gitlab 版本是 <= 12.1,则

gitlab-rake gitlab:backup:create

如果极狐Gitlab 版本是 >= 12.2,则

gitlab-backup create

备份的文件

$ ls -l /var/opt/gitlab/backups/
total 340
-rw------- 1 git git 348160 Feb 25 14:49 1645771779_2022_02_25_14.7.3-ee_gitlab_backup.tar

备份选项参考:Back up and restore GitLab | GitLab

3.2 备份配置文件

在 Omnibus 方式安装的极狐GitLab 中所有的配置保存在 /etc/gitlab 下,其中 gitlab-secrets.json 非常重要,切勿丢失

配置文件包括:

  • GitLab two-factor authentication (2FA) user secrets (‘QR codes’)
  • GitLab CI ‘secure variables’
  • ssl 证书文件

要备份所有配置,请执行:

gitlab-ctl backup-etc <DIRECTORY>
  • 若不指定 DIRECTORY,极狐GitLab 会自动创建 /etc/gitlab/config_backup/ 保存配置的备份文件。

注意:请不要将配置的备份与数据的备份保存在一起,以免数据泄露。如果早期版本没有上述命令,请手工备份 /etc/gitlab 目录下文件

tar -cvf gitlab-config.backup.20220225.tar /etc/gitlab/

3.3 备份 ssh 密钥

机器的SSH主机密钥保存在 /etc/ssh/ 中。如果需要执行整个机器的还原,必须备份,参考:备份这些密钥

cd /etc/ssh
$ tar zcvf ssh_key.backup.20220225.tar.gz ssh_host_*
ssh_host_ecdsa_key
ssh_host_ecdsa_key.pub
ssh_host_ed25519_key
ssh_host_ed25519_key.pub
ssh_host_rsa_key
ssh_host_rsa_key.pub

4. 远程备份

远程备份步骤和本地备份差不多,只是需要添加一些配置而已,比如 s3 备份:

添加以下配置到/etc/gitlab/gitlab.rb

gitlab_rails['backup_upload_connection'] = {
  'provider' => 'AWS',
  'aws_access_key_id' => 'YOUR-ACCESS-KEY-OR-USERNAME-HERE',
  'aws_secret_access_key' => 'YOUR-SECRET-KEY-HERE',
  'endpoint' => 'https://minio.yourdomain.com:9000',
  'path_style' => true
}
gitlab_rails['backup_upload_remote_directory'] = 'backup'
  • 为了使配置生效需要再执行以下命令: gitlab-ctl reconfigure

具体方法就不赘述了

5. 恢复实例

5.1 恢复前提

  • 已经安装 完全相同的版本和类型(CE / EE)的极狐GitLab Omnibus 或者 docker 版本。
  • 已经运行过sudo gitlab-ctl reconfigure至少一次。
  • 极狐GitLab正在运行。如果不是,请使用启动它sudo gitlab-ctl start

5.2 恢复到 docker 实例

备份文件:

  • 数据:1645771779_2022_02_25_14.7.3-ee_gitlab_backup.tar
  • 配置文件:gitlab_config_1645771925_2022_02_25.tar
  • ssh 密钥:ssh_key.backup.20220225.tar.gz

把 3 个备份文件到目标恢复主机

1)使用 docker 安装相同版本的 gitlab

首先创建目录

mkdir -p /srv/gitlab
export GITLAB_HOME=/srv/gitlab

启动命令

docker run -d \
  --hostname gitlab.example.com \
  --env GITLAB_OMNIBUS_CONFIG="external_url 'http://gitlab.example.com/';gitlab_rails['initial_root_password'] = 'yourpassword';gitlab_rails['initial_shared_runners_registration_token'] = 'yourtoken'" \
  --publish 443:443 --publish 80:80 --publish 22:22 \
  --name gitlab \
  --restart always \
  --volume $GITLAB_HOME/config:/etc/gitlab \
  --volume $GITLAB_HOME/logs:/var/log/gitlab \
  --volume $GITLAB_HOME/data:/var/opt/gitlab \
  --shm-size 256m \
  gitlab/gitlab-ee:14.7.3-ee.0

2)停止所有连接到数据库的进程

docker exec -it gitlab /bin/bash
# 老版本使用的 unicorn,14 版本后使用 puma 运行 rails
gitlab-ctl stop unicorn && gitlab-ctl stop puma

gitlab-ctl stop sidekiq

# 确认
gitlab-ctl status

3)恢复数据

# 拷贝备份文件到 docker 备份目录
cp 1645771779_2022_02_25_14.7.3-ee_gitlab_backup.tar /srv/gitlab/data/backups

docker exec -it gitlab /bin/bash
chown git.git /var/opt/gitlab/backups/1645771779_2022_02_25_14.7.3-ee_gitlab_backup.tar

# 这条命令会覆盖 GitLab 数据库的内容!注意和文件名的结尾有区别,结尾没有 gitlab_backup ,只到 ee
gitlab-backup restore BACKUP=1645771779_2022_02_25_14.7.3-ee

# 如果是 GitLab 12.1 或更旧版本,执行如下命令:
gitlab-rake gitlab:backup:restore
  • 会自动恢复 /var/opt/gitlab/.ssh/authorized_keys 认证文件,即用户添加的 ssh keys

4)恢复配置文件

tar -xvf gitlab_config_1645771925_2022_02_25.tar
# 恢复 /etc/gitlab/gitlab.rb
cp -r etc/gitlab/gitlab.rb /srv/gitlab/config/gitlab.rb

# 恢复 /etc/gitlab/gitlab-secrets.json
cp -r etc/gitlab/gitlab-secrets.json  /srv/gitlab/config/gitlab-secrets.json

# 如果有,恢复 ssl 证书
cp -r etc/gitlab/ssl/*  /srv/gitlab/config/ssl/

5)恢复 ssh 密钥

tar zxvf ssh_key.backup.20220225.tar.gz
cp -r ssh_host_* /srv/gitlab/config/
  • 默认是 ssh 密钥是保存在 /etc/ssh 中的,但是 docker 是在 /etc/gitlab 中

6)重启 docker 实例生效

docker restart gitlab

5.3 恢复到 Omnibus 实例

备份文件:

  • 数据:1645771779_2022_02_25_14.7.3-ee_gitlab_backup.tar
  • 配置文件:gitlab_config_1645771925_2022_02_25.tar
  • ssh 密钥:ssh_key.backup.20220225.tar.gz

把 3 个备份文件到目标恢复主机

1)使用 Omnibus 安装相同版本的极狐gitlab

具体步骤参考其他文档,搭建完成后执行一次:gitlab-ctl reconfigure

2)停止所有连接到数据库的进程

# 老版本使用的 unicorn,14版本后使用 puma 运行 rails
gitlab-ctl stop unicorn && gitlab-ctl stop puma

gitlab-ctl stop sidekiq

# 确认
gitlab-ctl status

3)恢复数据

# 拷贝备份文件到 docker 备份目录
cp 1645771779_2022_02_25_14.7.3-ee_gitlab_backup.tar /var/opt/gitlab/backups/

chown git.git /var/opt/gitlab/backups/1645771779_2022_02_25_14.7.3-ee_gitlab_backup.tar
chown -R registry:git /var/opt/gitlab/gitlab-rails/shared/registry

# 这条命令会覆盖 GitLab 数据库的内容!注意和文件名的结尾有区别,结尾没有 gitlab_backup ,只到 ee
gitlab-backup restore BACKUP=1645771779_2022_02_25_14.7.3-ee

# 如果是 GitLab 12.1 或更旧版本,执行如下命令:
gitlab-rake gitlab:backup:restore
  • 恢复过程中会提示是否恢复 /var/opt/gitlab/.ssh/authorized_keys 认证文件,即用户添加的 ssh keys,选择 yes

4)恢复配置文件

tar -xvf gitlab_config_1645771925_2022_02_25.tar
# 恢复 /etc/gitlab/gitlab.rb
cp -r etc/gitlab/gitlab.rb /etc/gitlab/gitlab.rb

# 恢复 /etc/gitlab/gitlab-secrets.json
cp -r etc/gitlab/gitlab-secrets.json /etc/gitlab/gitlab-secrets.json 

# 如果有,恢复 ssl 证书
cp -r etc/gitlab/ssl/* /etc/gitlab/ssl/

5)恢复 ssh 密钥

tar zxvf ssh_key.backup.20220225.tar.gz
cp -r ssh_host_* /etc/ssh/

6)重启生效

systemctl restart sshd
gitlab-ctl reconfigure
gitlab-ctl restart

# 检测组件状态,需要执行 restart 后多等一会所有内部服务都启动完成后再执行
gitlab-rake gitlab:check SANITIZE=true

如果极狐GitLab 版本在 13.1 及更高版本时,可以对数据库中的值进行解密,以便验证当前的配置文件 gitlab-secrets.json 是否正确,执行如下命令:

$ gitlab-rake gitlab:doctor:secrets
I, [2022-02-28T10:59:16.212678 #6153]  INFO -- : Checking encrypted values in the database
I, [2022-02-28T10:59:26.987515 #6153]  INFO -- : - Ci::InstanceVariable failures: 0
I, [2022-02-28T10:59:27.003740 #6153]  INFO -- : - Ci::PipelineScheduleVariable failures: 0
I, [2022-02-28T10:59:27.022424 #6153]  INFO -- : - Ci::Variable failures: 0
I, [2022-02-28T10:59:27.042150 #6153]  INFO -- : - Ci::GroupVariable failures: 0
I, [2022-02-28T10:59:27.056166 #6153]  INFO -- : - Ci::JobVariable failures: 0
I, [2022-02-28T10:59:27.069193 #6153]  INFO -- : - Ci::PipelineVariable failures: 0
I, [2022-02-28T10:59:27.095875 #6153]  INFO -- : - ApplicationSetting failures: 0
I, [2022-02-28T10:59:27.310622 #6153]  INFO -- : - User failures: 0
I, [2022-02-28T10:59:27.325427 #6153]  INFO -- : - GeoNode failures: 0
I, [2022-02-28T10:59:27.343479 #6153]  INFO -- : - Clusters::Platforms::Kubernetes failures: 0
I, [2022-02-28T10:59:27.364214 #6153]  INFO -- : - Snippet failures: 0
I, [2022-02-28T10:59:27.366518 #6153]  INFO -- : - PersonalSnippet failures: 0
I, [2022-02-28T10:59:27.368022 #6153]  INFO -- : - ProjectSnippet failures: 0
I, [2022-02-28T10:59:27.384082 #6153]  INFO -- : - Clusters::Applications::Helm failures: 0
I, [2022-02-28T10:59:27.396294 #6153]  INFO -- : - Clusters::Applications::Prometheus failures: 0
I, [2022-02-28T10:59:27.408780 #6153]  INFO -- : - AlertManagement::HttpIntegration failures: 0
I, [2022-02-28T10:59:27.424009 #6153]  INFO -- : - GrafanaIntegration failures: 0
I, [2022-02-28T10:59:27.442778 #6153]  INFO -- : - PagesDomain failures: 0
I, [2022-02-28T10:59:27.456616 #6153]  INFO -- : - PagesDomainAcmeOrder failures: 0
I, [2022-02-28T10:59:27.472027 #6153]  INFO -- : - JiraConnectInstallation failures: 0
I, [2022-02-28T10:59:27.488012 #6153]  INFO -- : - ProjectImportData failures: 0
I, [2022-02-28T10:59:27.504495 #6153]  INFO -- : - RemoteMirror failures: 0
I, [2022-02-28T10:59:27.520466 #6153]  INFO -- : - WebHook failures: 0
I, [2022-02-28T10:59:27.522920 #6153]  INFO -- : - ProjectHook failures: 0
I, [2022-02-28T10:59:27.524795 #6153]  INFO -- : - ServiceHook failures: 0
I, [2022-02-28T10:59:27.526514 #6153]  INFO -- : - SystemHook failures: 0
I, [2022-02-28T10:59:27.528127 #6153]  INFO -- : - GroupHook failures: 0
I, [2022-02-28T10:59:27.545203 #6153]  INFO -- : - IncidentManagement::ProjectIncidentManagementSetting failures: 0
I, [2022-02-28T10:59:27.558290 #6153]  INFO -- : - Alerting::ProjectAlertingSetting failures: 0
I, [2022-02-28T10:59:27.571397 #6153]  INFO -- : - Atlassian::Identity failures: 0
I, [2022-02-28T10:59:27.584517 #6153]  INFO -- : - BulkImports::Configuration failures: 0
I, [2022-02-28T10:59:27.602716 #6153]  INFO -- : - Clusters::KubernetesNamespace failures: 0
I, [2022-02-28T10:59:27.620096 #6153]  INFO -- : - Integrations::IssueTrackerData failures: 0
I, [2022-02-28T10:59:27.637791 #6153]  INFO -- : - Integrations::JiraTrackerData failures: 0
I, [2022-02-28T10:59:27.650149 #6153]  INFO -- : - Integrations::ZentaoTrackerData failures: 0
I, [2022-02-28T10:59:27.662388 #6153]  INFO -- : - ErrorTracking::ProjectErrorTrackingSetting failures: 0
I, [2022-02-28T10:59:27.677523 #6153]  INFO -- : - Serverless::DomainCluster failures: 0
I, [2022-02-28T10:59:27.679687 #6153]  INFO -- : - Clusters::Integrations::Prometheus failures: 0
I, [2022-02-28T10:59:27.693328 #6153]  INFO -- : - StatusPage::ProjectSetting failures: 0
I, [2022-02-28T10:59:27.707538 #6153]  INFO -- : - Dast::SiteProfileSecretVariable failures: 0
I, [2022-02-28T10:59:27.726360 #6153]  INFO -- : - Clusters::Providers::Aws failures: 0
I, [2022-02-28T10:59:27.743271 #6153]  INFO -- : - Clusters::Providers::Gcp failures: 0
I, [2022-02-28T10:59:27.760446 #6153]  INFO -- : - Packages::Debian::GroupDistributionKey failures: 0
I, [2022-02-28T10:59:27.775108 #6153]  INFO -- : - Packages::Debian::ProjectDistributionKey failures: 0
I, [2022-02-28T10:59:27.777438 #6153]  INFO -- : - Gitlab::BackgroundMigration::BackfillJiraTrackerDeploymentType2::JiraTrackerDataTemp failures: 0
I, [2022-02-28T10:59:27.791744 #6153]  INFO -- : - Ci::Runner failures: 0
I, [2022-02-28T10:59:27.813291 #6153]  INFO -- : - Ci::Build failures: 0
I, [2022-02-28T10:59:27.961570 #6153]  INFO -- : - Group failures: 0
I, [2022-02-28T10:59:28.015377 #6153]  INFO -- : - Project failures: 0
I, [2022-02-28T10:59:28.031628 #6153]  INFO -- : - DeployToken failures: 0
I, [2022-02-28T10:59:28.049531 #6153]  INFO -- : - Clusters::AgentToken failures: 0
I, [2022-02-28T10:59:28.064523 #6153]  INFO -- : - ScimOauthAccessToken failures: 0
I, [2022-02-28T10:59:28.080880 #6153]  INFO -- : - Operations::FeatureFlagsClient failures: 0
I, [2022-02-28T10:59:28.080980 #6153]  INFO -- : Total: 0 row(s) affected
I, [2022-02-28T10:59:28.080999 #6153]  INFO -- : Done!

5.4 当配置文件丢失时

如果没有备份旧的配置文件,那么需要手工重置很多组件的令牌。参见当机密文件丢失时,使用其中的信息,后果自负

标签:02,INFO,gitlab,--,备份,Gitlab,极狐,6153,2022
来源: https://www.cnblogs.com/leffss/p/16476256.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有