操作手册 · 自动化与交付

待环境验证

GitLab 恢复完整性检查清单

从备份范围、配置密钥与对象存储出发,核对同版本隔离恢复、仓库和权限样本,区分任务成功、数据完整性与正式切流。

CI/CD安全加固高可用
阅读导引 · 理解后再操作

这篇知识解决什么问题

本篇从用户实际需要恢复的对象出发,核对数据库、仓库、附件及 secrets 是否属于可解释的一致窗口。归档摘要、同版本启动和登录成功分别只是局部证据;完整恢复要有分项检查,且所有分析与演练结果保持隔离,不自动接通生产 Runner。

按恢复对象定义备份完整性

归档文件只是备份集合的一个载体,数据库记录、仓库内容和外部附件可能采用不同保护机制与时间窗口。先列出用户真正要恢复的对象及其引用关系,再核对每个输入的身份、保留和取回责任;只统计文件大小或项目数无法发现对象关联上的恢复缺口。

隔离是恢复判断成立的先决条件

恢复的配置与数据可能携带真实集成入口,仅更换页面域名不能阻断后台副作用。必须确认目标数据库、仓库、对象存储和出站行为均独立,才能解释样本来自这次演练;若目标仍接触生产资源,即使页面正常也不能当成安全有效的恢复验证。

进入文章正文
关联架构图解7 个组件 · 点击展开

使用场景图中的应用备份、对象存储、配置与秘密材料三条恢复输入,理解同版本空实例的验收边界。图按 Linux package 做逻辑示例,没有展开所有 Gitaly、Helm 或外置数据库形态,不是现场部署记录。

查看场景架构与实施步骤
参考架构 · 非实时拓扑

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

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

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

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

故障域与操作边界

恢复和升级不能同时混用

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

隔离必须覆盖出站副作用

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

备份归档不是全部环境

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

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

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

适用范围与验证状态

本文用于 GitLab Self-Managed 的备份审阅和隔离恢复验收,验证等级为 PENDING。示例以 Linux package 安装为主;Docker、Helm、外置 PostgreSQL、PgBouncer 和多 Gitaly 存储必须按实际版本选择官方流程。这里没有执行任何备份、恢复、停止服务或生产切换,也不承诺某个数据规模能在固定时间内恢复。

优先区分三种需求:单个文件误删通常先检查 Git 历史;单项目数据缺失需要评估项目级恢复与实例级恢复的边界;实例损坏才进入完整灾备流程。不能仅因一次 clone 失败就在原实例运行全量恢复。实际执行流程见 GitLab 备份与隔离恢复演练

先定义能够回答问题的恢复目标

恢复点目标描述可接受的数据丢失窗口,恢复时间目标描述恢复业务需要的时长。两者需要业务负责人确认,不能用“每天备份一次”代替。记录事故时间、最后可信写入时间、备份时间及统一时区,并列出仓库、合并请求、附件、LFS、制品、权限等具体对象。

建议先做一份小而确定的验收清单:选择受控项目及已知提交 SHA,记录一份 LFS 对象和附件的摘要、预期用户角色、一个应当拒绝访问的测试身份。样本只证明样本,不证明全库一致性;关键项目和抽样外数据的覆盖程度需要单独报告。清单保存在受限位置,不记录生产个人数据或秘密明文。

备份清单不能只看一个 tar 文件

应用备份、配置与 secrets、对象存储及其版本历史分别核对。Linux package 的应用备份不包含所有外部对象存储内容,也不能假定 Redis/Sidekiq 待执行任务和机器配置已纳入。对启用的功能逐项标注备份机制、时间、存放位置、保留期和恢复负责人;没有启用的功能标“未使用”,不是留空。GitLab 备份范围

如果使用 server-side repository 备份,还要确认外部仓库备份对象及必要增量链,不把应用归档误认为完全自包含。密钥材料按秘密管理流程与数据备份分开保管;保留对应配置版本,但不要把生产地址和存储引用未经审阅地原样应用到演练实例。Linux package 的配置备份有独立流程。配置备份说明

应用备份的一致性还要求后台任务没有待执行或运行项。应在批准的维护窗口内,按对应官方流程控制新任务进入并确认任务排空,保留状态证据,而不是为了满足清单擅自停止生产任务。既有备份没有这些证据时,应标明一致性缺口,不能只凭备份成功和文件摘要一致就宣布完整一致。后台任务备份边界

只读预检与证据可信度

以下是获准在 Linux package 主机执行的查询示例。环境信息可能包含内部地址,输出需要脱敏;不要直接贴进公开知识库。

sudo gitlab-rake gitlab:env:info
sudo gitlab-ctl status
sha256sum -- '<APPROVED_BACKUP_ARCHIVE>'

版本信息用于核对源与目标,文件摘要用于识别传输损坏或拿错副本。摘要匹配不证明来源可信,更不证明数据库、仓库和对象桶在同一一致性窗口;应把摘要与备份任务日志、访问审计及业务写入时间一起判断。生产备份生成会消耗 I/O 和容量,另需维护窗口,不属于上面查询命令的隐含动作。

隔离恢复的四道停止条件

第一,目标必须是独立、可工作的空实例,版本与 CE/EE 类型与备份完全一致,恢复时不要顺便升级。第二,数据库、Gitaly 存储、对象桶和秘密材料映射已经复核,不能仍指向生产。第三,邮件、Webhook、Runner 取任务和其他出站自动化已被可靠隔离。第四,恢复权限、容量和可用备份副本均已确认。任一不满足都不应开始恢复。GitLab 恢复前提

“不同域名”并不能隔离出站行为。恢复的配置可能仍携带真实集成信息,后台任务也可能造成外部影响。演练网络应只允许必要的备份读路径和受控验收访问;保留原备份的只读副本,不让恢复任务写回备份源。界面可加醒目标识帮助人识别,但标识不能代替网络与数据隔离。

恢复失败时如何分流

  • 版本或安装类型不符:重新准备匹配的空目标,不尝试绕过校验,也不改生产版本配合演练。
  • 仓库恢复与数据库恢复结果不一致:查各子任务、存储名称和备份对象,不把能登录当作恢复成功。
  • 附件或 LFS 缺失:回到对象存储/文件存储清单核对路径、版本及一致性时间,不通过从生产零散拷文件掩盖缺口。
  • 加密字段无法使用:核对匹配的 secrets 与文件权限,按官方诊断流程检查,只记录问题数量或脱敏摘要,不导出秘密值。
  • 超时或任务中断:先确认服务端执行状态和已完成阶段,保存日志。需要重试时重新准备经批准的空演练目标,避免多次覆盖导致证据不清。

这些分流是故障调查顺序,不是宣称唯一根因。每项结论至少记录“观察到什么、排除了什么、下一步验证什么”,不要只留下“恢复失败,再试一次”。

验收不是登录页返回成功

分别检查普通用户登录、权限边界、仓库读取、已知提交、分支或标签、Wiki、附件、LFS 和实际启用的制品能力。对一个应被拒绝的项目验证拒绝路径,防止把管理员能看见所有项目当作授权正确。恢复到新域名可能影响与源域绑定的身份验证设备,应在正式切换计划中单独评估,不在演练时降低认证要求来凑通过率。

仓库内容对照应以事前清单为准,不只统计项目数量。下载验收会消耗带宽并在客户端写入文件,使用受控目录和只读凭据,提前确认数据处理权限。整个演练不启用真实 Runner、部署密钥或发布任务,测试流水线也需与外部服务隔离。

回退、证据与交接

演练失败时保持隔离,保留目标状态、任务日志及备份引用,修复方案经审阅后在新目标重试。不要把恢复后的演练数据合回生产。若未来真的切入恢复实例,新写入的归属必须明确:切回旧 DNS 不会自动合并两端数据,也不能证明没有重复发布或重复通知。

交付记录包含审批号、源/目标标识、精确版本、备份 ID 与摘要、秘密材料引用、完整时间线、分项验收、数据缺口、实际恢复耗时及签核人。临时凭据和副本按保留策略回收;日志只保留必要证据,避免把备份包或内部用户信息当作知识附件公开。有关仓库日常权限和恢复责任见 代码仓库运行手册

参考资料

从现象到判断

先收集证据,再缩小范围。以下是判读路径,不代表已经确认根因或获准变更。

  1. 应用备份摘要一致并可读取,但附件或 LFS 的覆盖不清楚,后台任务窗口也缺少一致性证据。

    只读核对
    只读审阅应用模块清单、外部对象版本、备份日志及既有任务排空记录,按启用功能核对各自时间窗口。
    如何判读
    摘要一致只能支持文件身份和传输完整性,不能证明跨存储一致;缺少的模块或任务证据应列为恢复风险。
  2. 隔离实例可以登录,但已知提交、项目权限或加密字段验证失败,各子任务的恢复状态并不一致。

    只读核对
    读取同版本及 CE/EE 记录、数据库与 Gitaly 映射、既有 secrets 诊断和受控样本报告,不导出秘密值。
    如何判读
    故障可能涉及版本、映射或匹配密钥,不能只以登录成功结案;先对齐子任务与具体对象再提出恢复方案。
  3. 演练地址不同于生产,但配置仍引用真实对象桶、邮件服务或 Runner,无法证明没有出站副作用。

    只读核对
    只读核对目标端点映射、网络限制、集成配置引用和已有访问审计,确认备份读路径与验收范围是否独立。
    如何判读
    不同域名只是识别提示,不能替代数据和网络隔离;任何生产写路径未排除都应保持停止与升级状态。
常见误区与判断边界 2 项

一次 clone 失败就触发实例恢复

仓库读取失败可能来自授权、网络或单对象问题,全量恢复会影响完全不同的数据范围。应先明确需要恢复文件、项目还是实例,使用已有历史和分层诊断证据收窄问题;本篇不把查看备份的权限扩展为停服、覆盖原实例或重建全部仓库的授权。

恢复时顺便升级并放开真实流水线

版本不匹配会让备份恢复和升级问题交织,真实 Runner 或集成又可能触发外部写入。应保持精确版本与类型匹配,先在空隔离目标完成分项验收;正式升级、域名切换、身份重新接入和新写入归属都应另行评审,不混为一次可随时撤销的操作。

交接时应留下的证据

作为记录提纲使用,不是自动检查结果;未取得的证据应标记缺口,并注明负责人。

  • 记录恢复需求是文件、项目还是实例,以及批准恢复点、实际对象样本和版本类型,不用备份频率代替业务数据取舍。
  • 按启用功能保存应用、仓库、对象存储和 secrets 的受控引用及时间窗口,列明后台任务与外部备份链的一致性缺口。
  • 保留空隔离目标的版本、数据库和存储映射及出站限制证据,归档子任务状态与失败原因,不公开秘密或真实备份包。
  • 交接已知提交、文件摘要、权限拒绝和解密的分项结果及覆盖限制,实际耗时与正式接管责任分别记录而不自动合流。

记录需包含环境、版本、时间与时区;分享前脱敏,不附访问令牌、密码或完整业务敏感数据。

继续阅读与资料核对

补充相关主题,再结合当前环境的实施记录形成结论。

返回原理导读

DOUYA OPS ECOSYSTEM

贡献你的经验,帮助更多运维人

把故障复盘、标准流程和最佳实践沉淀为可检索、可复用的知识内容。