小笔记:关于 gitlab 运行 gitlab-ctl reconfigure 后数据清空(gitlab数据备份与恢复)

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 小笔记:关于 gitlab 运行 gitlab-ctl reconfigure 后数据清空(gitlab数据备份与恢复)

gitlab小笔记:关于 gitlab 运行 `gitlab-ctl reconfigure` 数据清空(gitlab数据备份与恢复)


1. 概述

一直以来我都喜欢先用不会再找文档,导致经常踩坑。这不,我再每次更改配置之后发现数据莫名其妙地就没了。正如你所知,更改gitlab配置后需要运行以下命令才会使更改后配置生效:

gitlab-ctl reconfigure
# 或者如果你不是在 超级用户下:
sudo gitlab-ctl reconfigure

经过查找文档,才知道GitLab 提供了一个命令行界面来备份你的整个实例,需要先将现有数据备份好。因此本文主要记录一下,gitlab 中是如何去备份数据到指定文件,以及从何从备份地数据中进行恢复。以下介绍

GitLab 备份命名帮助我们备份的内容包括:

  • 数据库
  • 附件
  • Git 存储库数据
  • CI/CD 作业输出日志
  • CI/CD 作业工件
  • LFS 对象
  • Terraform 状态(在 GitLab 14.7 中引入)
  • 容器注册表映像
  • GitLab 页面内容
  • 包(在 GitLab 14.7 中引入)
  • 片段
  • 群组 wiki
  • 项目级安全文件(在 GitLab 16.1 中引入)

但并不是一切皆被备份,备份不包括:

  • Redis(以及 Sidekiq 作业)
  • GitLab 不备份任何配置文件 ( /etc/gitlab)、TLS 密钥和证书或系统文件。
    当你的安装使用 PgBouncer 时,出于性能原因或将其与 Patroni 集群一起使用时,备份命令需要额外的参数。
    在 GitLab 15.5.0 之前,备份命令不会验证另一个备份是否已经在运行,如 问题 362593中所述。建议你在开始新备份之前确保所有备份都已完成。

2. 备份数据

2.1 备份概述与步骤

这个事情务必在你更改 GitLab 配置之前就完成。其步骤如下:

  1. 登录到 GitLab 服务器。
  2. 停止 GitLab 服务。使用以下命令停止 GitLab 服务:
sudo gitlab-ctl stop
  1. 创建一个备份目录并进入该目录。例如:
# 如果是 docker 容器或者类似地超级用户下则不需要 sudo
sudo mkdir /gitlab-backups
cd /gitlab-backups
  1. 执行 GitLab 备份命令。使用以下命令创建一个数据备份文件:
# 如果是 docker 容器或者类似地超级用户下则不需要 sudo
sudo gitlab-rake gitlab:backup:create
  1. 这将在当前目录下创建一个备份文件(.tar.gz 格式),其中包含 GitLab 数据库和存储库等数据。

注意:关于不同版本下的备份命名请参考: 2.2 不同版本下的备份命令 小节

2.2 不同版本下的备份命令

根据你的 GitLab 版本,如果你使用 Omnibus 包安装 GitLab,请使用以下命令:

  • GitLab 12.2 或更高版本:
sudo gitlab-backup create
  • GitLab 12.1 及更早版本:
gitlab-rake gitlab:backup:create
  • 如果你从源代码安装 GitLab,请使用以下命令:
sudo -u git -H bundle exec rake gitlab:backup:create RAILS_ENV=production
  • 如果你从 Docker 容器中运行 GitLab,请根据你安装的 GitLab 版本从主机运行备份:
  • GitLab 12.2 或更高版本:
docker exec -t <container name> gitlab-backup create
  • GitLab 12.1 及更早版本:
docker exec -t <container name> gitlab-rake gitlab:backup:create

如果你在 Kubernetes 集群上使用GitLab Helm chart ,则可以通过 在 GitLab 工具箱 pod 上kubectl运行脚本来运行备份任务。backup-utility有关详细信息,请参阅 图表备份文档。

与 Kubernetes 案例类似,如果你已扩展 GitLab 集群以使用多个应用程序服务器,则应选择一个指定节点(不会自动扩展)来运行备份 Rake 任务。因为备份 Rake 任务与主 Rails 应用程序紧密耦合,所以这通常是你也在其上运行 Puma 或 Sidekiq 的节点。

2.3 备份文件存储的补充

翻译自: https://docs.gitlab.com/ee/raketasks/backup_gitlab.html#storing-configuration-files

GitLab 提供的备份 Rake 任务不会存储你的配置文件。这样做的主要原因是你的数据库包含用于双因素身份验证的加密信息和 CI/CD安全变量等项目。将加密信息存储在与其密钥相同的位置首先违背了使用加密的目的。

机密文件对于保存数据库加密密钥至关重要。

至少,你必须备份:

  • 对全部:
  • /etc/gitlab/gitlab-secrets.json
  • /etc/gitlab/gitlab.rb
  • 对于从源安装:
  • /home/git/gitlab/config/secrets.yml
  • /home/git/gitlab/config/gitlab.yml
  • 对于Docker 安装:
  • 你必须备份存储配置文件的卷。
  • 如果你根据文档创建了 GitLab 容器,它应该在该 /srv/gitlab/config目录中。
  • 对于 Kubernetes 集群上的 GitLab Helm 图表安装:
  • 你必须按照备份机密 说明进行操作。

你可能还想备份任何 TLS 密钥和证书 ( /etc/gitlab/ssl, /etc/gitlab/trusted-certs) 以及 SSH 主机密钥 ,以避免在必须执行完整机器还原时出现中间人攻击警告。

如果你使用 Omnibus GitLab,请查看其他信息以 备份你的配置。

3. 更改配置文件数据

现在你可以更改你的配置文件了。

如:

vim /etc/gitlab/gitlab.rb

4. 恢复数据

恢复数据不一定只在备份地系统下。只要复制好备份地数据文件且确保已经安装了与备份文件相同版本的 GitLab,一般可以按照以下步骤进行数据恢复(或者说是数据导入):

  1. 将备份文件上传到新的 GitLab 服务器上,例如将备份文件上传到 /backup 目录。
  2. 停止新 GitLab 服务器的服务(如果尚未停止)。使用以下命令停止 GitLab 服务:
# 如果是 docker 容器或者类似地超级用户下则不需要 sudo
sudo gitlab-ctl stop
  1. 执行 GitLab 恢复命令。使用以下命令将备份文件恢复到新的 GitLab 服务器上:
# 如果是 docker 容器或者类似地超级用户下则不需要 sudo
sudo gitlab-backup restore BACKUP=<备份文件名>.tar.gz
  1. <备份文件名>.tar.gz 替换为实际的备份文件名。
    此命令将还原备份文件中的数据到新的 GitLab 服务器。
  2. 运行 GitLab 重新配置命令。使用以下命令重新配置 GitLab:
# 如果是 docker 容器或者类似地超级用户下则不需要 sudo
sudo gitlab-ctl reconfigure
  1. 这将根据新的配置文件重新配置 GitLab。
  2. 启动 GitLab 服务。使用以下命令启动 GitLab 服务:
# 如果是 docker 容器或者类似地超级用户下则不需要 sudo
sudo gitlab-ctl start
  1. GitLab 服务将会以新的配置文件和恢复的数据启动。

有关数据恢复的更多内容,请参考:

gitlab文档中的 恢复 GitLab > 恢复选项https://docs.gitlab.com/ee/raketasks/restore_gitlab.html#restore-options 部分。

目录
相关文章
|
16天前
|
存储 数据库
掌握GitLab数据备份与恢复:全面操作指南
【10月更文挑战第11天】 GitLab作为一个流行的开源代码仓库管理系统,其数据的安全性和完整性至关重要。本文将详细介绍GitLab数据的备份与恢复流程,帮助用户掌握如何保护和管理他们的GitLab实例。
48 0
|
16天前
|
监控 安全 数据库
深入探究:GitLab数据备份与还原的高效策略
【10月更文挑战第19天】 在现代软件开发中,GitLab作为一个强大的代码管理和协作平台,其数据备份与还原是保障项目安全和连续性的关键环节。本文将深入探讨GitLab数据备份与还原的高效策略,确保在数据丢失或损坏的情况下,能够快速恢复GitLab实例。
33 2
|
3月前
|
安全 Shell 数据安全/隐私保护
CI/CD笔记.Gitlab系列:控制台强制修改root用户密码
CI/CD笔记.Gitlab系列:控制台强制修改root用户密码
130 2
|
3月前
CI/CD笔记.Gitlab系列:设置GitLab导入源
CI/CD笔记.Gitlab系列:设置GitLab导入源
221 2
|
3月前
|
数据安全/隐私保护
CI/CD笔记.Gitlab系列.新用户管理
CI/CD笔记.Gitlab系列.新用户管理
36 1
|
3月前
|
数据采集 数据处理 持续交付
CI/CD笔记.Gitlab系列.`gitlab-ci.yml`中的头部关键字
CI/CD笔记.Gitlab系列.`gitlab-ci.yml`中的头部关键字
33 0
|
机器学习/深度学习 Kubernetes 关系型数据库
gitlab--job 作业运行控制 tag、when、allow_failure、retry、timeout、parallel
gitlab--job 作业运行控制 tag、when、allow_failure、retry、timeout、parallel
|
3月前
|
Shell Docker 容器
GitlabCI学习笔记之一:安装Gitlab和GitLabRunner
GitlabCI学习笔记之一:安装Gitlab和GitLabRunner
|
2月前
|
Docker 容器
Docker安装Gitlab和Gitlab-Runner并实现项目CICD
Docker安装Gitlab和Gitlab-Runner并实现项目CICD
|
4月前
|
Devops 持续交付 开发工具
入职必会-开发环境搭建54-GitLab下载和安装
GitLab 是一个基于 web 的 Git 仓库管理工具,提供了代码托管、版本控制、协作开发、持续集成等功能,是一个综合的 DevOps 平台。用户可以使用 GitLab 托管他们的代码仓库,并利用其丰富的功能来管理和协作开发项目。 以下是 GitLab 的一些主要特点和功能。
入职必会-开发环境搭建54-GitLab下载和安装