自动化与交付 · 高级

GitLab 备份与隔离恢复演练

核对 GitLab 数据、配置、密钥与对象存储备份,在同版本隔离实例验证仓库、权限和附件,建立可审阅的恢复证据。

CI/CD安全加固高可用

场景目标

完成一轮不触碰生产数据的 GitLab 隔离恢复,证明选定备份集可恢复批准的项目与权限,明确数据缺口、耗时及上线切换的独立审批边界。

环境要求

准备维护期内的 GitLab 版本、同版本同 CE/EE 类型的空演练实例、受控备份读权限及独立存储;按实际数据库/Gitaly/对象存储拓扑评审恢复流程。密钥只经批准秘密通道交付,不进入正文和日志。隔离邮件、Webhook、Runner 和生产身份写入路径,预留解压、数据库和仓库恢复空间。估时 240 分钟仅是小样本演练窗口,不包含全量恢复或版本升级,也不构成 RTO 承诺。

参考架构 · 非实时拓扑

GitLab 分层备份与同版本隔离恢复架构

应用备份、对象存储和 secrets 分别保管,再按一致时间窗口恢复到同版本空实例;仓库、附件、权限和加密字段各自验收,生产入口保持不变。

  • 数据 / 请求
  • 控制 / 管理
  • 观测 / 查询

点击组件,在图下方查看职责;连线编号对应流向解读。小屏可横向滚动,或直接展开文字说明。

GitLab 分层备份与同版本隔离恢复架构:组件关系图应用备份、对象存储和 secrets 分别保管,再按一致时间窗口恢复到同版本空实例;仓库、附件、权限和加密字段各自验收,生产入口保持不变。 原 GitLab → 应用备份集合:获批应用备份;应用备份集合 → 隔离 GitLab:同版本恢复;配置与秘密材料 → 隔离 GitLab:配置与密钥恢复;对象存储备份 → 演练对象存储:对象副本恢复;隔离 GitLab → 演练对象存储:隔离附件访问;隔离 GitLab → 恢复完整性核验:项目与授权证据;演练对象存储 → 恢复完整性核验:附件与制品证据。箭头说明见下方流向解读。
GitLab Self-Managed 隔离恢复逻辑参考图,以 Linux package 流程为示例;不表示已演练,不自动切换域名、Runner 或用户流量。

原 GitLab

服务组件

登记精确版本、CE/EE 类型、数据库/Gitaly/对象存储拓扑,原生产实例不作为演练覆盖目标。

查看关联工具
全部组件职责 7 个组件
原 GitLab
登记精确版本、CE/EE 类型、数据库/Gitaly/对象存储拓扑,原生产实例不作为演练覆盖目标。工具介绍 原 GitLab
应用备份集合
按实际启用功能核对备份模块、任务日志和摘要,server-side repository 备份所依赖对象也需完整保留。
隔离 GitLab
版本和 CE/EE 类型与备份一致,独立数据库、仓库与网络;恢复前确认空实例可运行且没有待保留数据。工具介绍 隔离 GitLab
配置与秘密材料
恢复匹配 secrets 并修正演练地址与存储映射,不原样套用生产的邮件、LDAP 或回调配置。
对象存储备份
按安装形态另行保护对象存储数据,不能默认应用归档已包含全部外部附件和制品。
演练对象存储
只接收对应备份副本并服务隔离 GitLab,原有生产桶和数据库均不可被演练写入。
恢复完整性核验
用受控身份对照精确提交和文件校验,核验加密字段与拒绝路径;不运行真实流水线和通知。
流向解读 7 条连接
  1. 1

    原 GitLab 应用备份集合

    数据 / 请求 · 获批应用备份

    备份窗口按实际安装流程核对后台任务和资源约束,已有备份优先用可追溯副本。

  2. 2

    应用备份集合 隔离 GitLab

    数据 / 请求 · 同版本恢复

    恢复仅覆盖确认过的空演练目标;Linux package 流程中的进程停止与启动只作用于该目标。

  3. 3

    配置与秘密材料 隔离 GitLab

    控制 / 管理 · 配置与密钥恢复

    秘密材料仅通过受控渠道使用,恢复后重新检查加密字段和出站隔离。

  4. 4

    对象存储备份 演练对象存储

    数据 / 请求 · 对象副本恢复

    分别记录对象版本与关联时间,不能靠应用备份成功推断外部对象完整。

  5. 5

    隔离 GitLab 演练对象存储

    数据 / 请求 · 隔离附件访问

    演练实例只读写自己的对象存储,目标映射不允许落到生产资源。

  6. 6

    隔离 GitLab 恢复完整性核验

    观测 / 查询 · 项目与授权证据

    核对提交、分支、Wiki、用户权限及 secrets 诊断,不以登录页正常代替验收。

  7. 7

    演练对象存储 恢复完整性核验

    观测 / 查询 · 附件与制品证据

    抽样比对文件清单和完整性,失败模块和未覆盖项独立登记。

从架构到实施

  1. 01

    先把备份边界分层清点

    记录版本、安装形态与恢复目标,分别确认应用、对象存储及秘密材料的覆盖和时间关联。

  2. 02

    恢复到新目标,配置不照抄

    准备同版本空实例和独立依赖,恢复匹配秘密材料及安全映射,通过停止点后只在隔离目标执行恢复。

  3. 03

    验证业务对象再记录恢复能力

    逐项核验仓库、文件、权限和解密结果,记录实际耗时与数据缺口,正式切流单独处理。

故障域与操作边界

恢复和升级不能同时混用

备份要求匹配精确版本与 CE/EE 类型,不能先升级目标再用版本不符备份证明可恢复。

隔离必须覆盖出站副作用

阻断真实邮件、Webhook、Runner 取任务和外部自动化,不仅修改页面标题或主机名。

备份归档不是全部环境

配置、secrets、外部对象及队列边界分开核验;没有独立恢复证据就不宣称灾备达标。

架构依据与版本核对 1 篇官方资料

图解是本站基于官方资料整理的逻辑参考;实施前仍需核对实际部署版本、组件支持范围与变更审批。

方案说明

适用范围与边界

适用于 GitLab Self-Managed 的计划备份与恢复演练,本场景以 Linux package 安装为流程示例,Helm、Docker、外置数据库及 Gitaly 架构须按对应版本文档调整。备份任务成功不等于可恢复;本内容未在目标环境执行,不能据此声明灾备达标。

数据路径

将应用备份、对象存储、配置与 secrets 分别登记,并以一致的时间窗口建立关联。恢复目标使用独立数据库、存储和网络,先验证无生产写入路径,再检查业务数据和授权。恢复阶段不同时升级 GitLab,不自动切换域名、Runner 或用户流量。

全局验收

明确批准的恢复点与恢复时间目标,保留备份摘要、实例版本、存储映射和完整演练时间线;受控样本的仓库提交、附件、权限及加密字段均经验证,生产实例未受影响,失败项和不在备份范围内的项目有责任人。

配套阅读

官方参考

工具编排

1 个关联工具
  1. GitLab Community Edition备份与业务完整性来源提供同版本备份恢复流程以及仓库、权限、附件和加密数据核验入口。

实施步骤

共 8 步
  1. 01

    登记恢复目标、安装形态与审批范围

    登记实例标识、GitLab 精确版本和 CE/EE 类型、数据库/Gitaly/对象存储拓扑、恢复点与预算;指定执行、业务验收和停止决策人。以下仅供获准登录 Linux package 实例后读取运行信息,不执行备份或停止服务,输出经脱敏后归档。

    sudo gitlab-rake gitlab:env:info
    sudo gitlab-ctl status
    验证标准

    版本与资产清单一致,恢复点注明时区、数据范围和允许丢失窗口;备份源、恢复目标及权限分别明确,不能只填写一台模糊主机名。

    停止与回退

    资产或权限不符则停止,保持现有业务运行;先补齐方案,不通过临时升权或在生产就地试恢复解决信息不足。

    返回步骤起点
  2. 02

    核对备份边界与独立密钥保管

    逐项确认应用备份覆盖的数据库、仓库、附件、LFS、Packages 等实际启用功能;对象存储和配置、secrets、TLS/SSH 材料按安装形态另行备份。Redis/Sidekiq 待执行任务不应假定在应用备份中。只记录秘密材料的受控引用和关联时间,不把明文与加密数据放在同一公开归档。

    验证标准

    每个启用功能都有备份对象、时间范围、负责人和缺失处置;备份访问权限与密钥解密权限分离,恢复者能经授权获得必要材料。

    停止与回退

    发现对象桶或密钥缺失则停止恢复排期;保留现有备份,禁止删除旧备份腾空间或用新生成 secrets 冒充原密钥。

    返回步骤起点
  3. 03

    生成或选定完整备份集并检查证据

    新增备份属于获批的资源密集操作,先检查容量与业务窗口,并按官方维护流程确认后台任务无待执行或运行项、窗口内不会进入新任务,再按实际安装文档执行;不能擅停生产任务来补这一条件。若已有可用备份,则使用只读副本并查找该窗口的任务状态证据。记录备份任务日志、大小、摘要以及对象存储清单,区分普通归档与 server-side repository 备份,后者所需外部备份对象必须完整保留。下例仅计算文件摘要,不证明可恢复。

    sha256sum -- '<APPROVED_BACKUP_ARCHIVE>'
    验证标准

    备份任务完整结束且无跳过对象未说明,副本摘要与来源一致;后台任务排空和无运行任务的窗口证据齐全,对象版本及必要备份链连续,备份时间与恢复目标对应。既有备份缺少任务状态证据时明确标注一致性缺口,不宣称完整一致。

    停止与回退

    任务失败或校验不符时保留日志,停止分发该副本并重新选择可信备份;不要把不完整归档标记为成功,不能覆盖唯一已知可用副本。

    返回步骤起点
  4. 04

    准备同版本空实例与网络隔离

    在独立演练资源部署与备份完全相同版本、相同 CE/EE 类型的 GitLab;先验证空实例本身工作正常,再核对所有数据库端点、Gitaly 存储名和对象桶指向演练资源。阻断出站邮件、Webhook、Runner 获取任务与其他外部自动化,不能只靠不同页面标题区分生产。不要复用含现有数据的目标。

    验证标准

    恢复目标无业务存量,独立数据库与存储经双人核对;防火墙、路由与服务配置证明它不能写生产系统,演练主机能获取批准的备份副本。

    停止与回退

    任何生产依赖引用或隔离漏洞均为停止条件;撤销本次演练入口而不是停生产服务,修正后重新预检。

    返回步骤起点
  5. 05

    恢复配置映射并检查秘密材料

    按部署形态恢复匹配的 secrets 和必要配置,并把地址、存储桶、邮件、LDAP 等指向安全演练配置;不是原样覆盖所有生产配置。Linux package 的配置应用按该版本官方步骤执行,确认存储名称与备份数据匹配。应用配置后再次检查出站隔离;不输出密钥值,不将 secrets 存进 Git。

    验证标准

    目标版本和配置映射再次签核,密钥材料可被应用读取且权限正确,外部自动化仍阻断;已有恢复数据未因错误初始化被覆盖。

    停止与回退

    密钥不匹配、映射缺失或配置检查失败时保持隔离并停止;回到演练实例原配置副本,不轮换生产秘密来绕过问题。

    返回步骤起点
  6. 06

    在明确停止点后执行隔离恢复

    由批准的执行人在已确认空演练实例按对应官方流程恢复。Linux package 流程需先停连接数据库的 Puma 与 Sidekiq,按备份 ID 执行恢复,完成后再按官方要求启动和检查。恢复会覆盖目标数据库;本步骤不提供可直接批量执行的生产覆盖命令。记录开始/结束时间、每个子任务和异常,不跳过失败模块继续宣称整体成功。

    验证标准

    恢复命令及所有子任务结果明确,实际目标始终为演练资源;服务启动后仓库存储可访问,日志不存在未处置的版本、数据库或密钥错误。

    停止与回退

    目标身份变化、版本不符或中途失败立即停止后续动作;保留演练副本供定位,经批准重建新的空演练实例后重试,不在含部分恢复数据的实例上反复覆盖。

    返回步骤起点
  7. 07

    验证仓库、附件、身份与加密字段

    使用批准的普通测试用户和只读凭据,抽查项目可见性、权限拒绝路径、精确提交、分支、Wiki、LFS、附件与制品;对加密数据运行官方 secrets 诊断并只保留结果摘要。以已知提交和文件校验清单对照,而非仅看登录页;禁止在演练实例启用真实流水线发送制品或通知。

    验证标准

    受控样本读取得到期望提交和内容,无越权访问,必要加密字段能正常使用且不泄露;逐项记录通过、失败或未覆盖,不用抽样结果冒充全量验证。

    停止与回退

    发现缺数据或权限异常停止验收,保留证据追溯备份范围与一致性窗口;不从生产随意补单个对象掩盖完整性问题。

    返回步骤起点
  8. 08

    记录恢复指标并划清切流边界

    交付恢复证据包:备份 ID、时间和摘要、目标身份、操作记录、数据缺口、实际耗时、业务确认及后续负责人。演练结束后按保留审批处理副本和临时凭据。真正灾难切流需另行解决原实例写入隔离、DNS/SSH 信任、身份与 Runner 接入及恢复后新写入归属,本次不自动切流。

    验证标准

    业务与运维共同签署演练结论,恢复点与时间目标分别评估,未覆盖项可追踪;生产服务保持原状态,临时访问已按约定回收。

    停止与回退

    未达目标则登记缺口和下一轮演练,不回写生产数据。发生正式切流后的新写入不能靠切回旧 DNS 自动合并,需独立数据恢复方案。

    返回步骤起点

DOUYA OPS ECOSYSTEM

体验豆芽自研工具与场景能力

部分场景提供体验环境,用于功能验证、测试和技术交流。