# 回滚 Runbook

更新日期：2026-03-24

## 适用范围

- 当前仓库的本地/单节点发布回滚
- 配置错误、发布态校验失败、健康检查失败、认证主链路异常等需要快速回退的场景

## 触发条件

- `/health/ready` 连续失败
- 发布后 `auth/capabilities`、登录、后台关键页面出现回归
- 新版本被 release 模式配置校验拒绝启动
- 5xx、认证失败、权限异常等核心指标显著恶化

## 前置要求

- 保留上一版稳定配置与制品路径
- 发布前已完成数据库备份
- 当前环境可通过 `UMS_CONFIG_PATH` 切换配置
- 健康检查与认证探针可访问：
  - `GET /health`
  - `GET /health/ready`
  - `GET /api/v1/auth/capabilities`

## 标准步骤

1. 立即冻结当前发布，停止继续变更。
2. 保存候选版本 stdout/stderr、配置文件、探针失败结果。
3. 停止候选实例。
4. 将 `UMS_CONFIG_PATH` 指向上一版稳定配置，并启动上一版稳定制品。
5. 验证回滚后的实例：
   - `/health` 返回成功
   - `/health/ready` 返回成功
   - `/api/v1/auth/capabilities` 返回符合预期
   - 如涉及前端链路，执行 `cd frontend/admin && npm.cmd run e2e:full:win`
6. 记录回滚原因、影响范围、恢复时间和后续修复动作。

## 数据边界

- 如果问题仅是配置或应用层回归，应优先执行配置/制品回滚。
- 如果怀疑数据损坏，不应直接做 schema downgrade；应先执行备份恢复流程并评估数据影响。
- 当前仓库已经完成的是本地配置/制品回滚演练，不等于历史版本之间的数据库降级兼容性证明。

## 本地演练

- 演练脚本：
  - [`scripts/ops/drill-local-rollback.ps1`](/D:/project/scripts/ops/drill-local-rollback.ps1)
- 最新演练证据：
  - [`docs/evidence/ops/2026-03-24/rollback/20260324-084928/ROLLBACK_DRILL.md`](/D:/project/docs/evidence/ops/2026-03-24/rollback/20260324-084928/ROLLBACK_DRILL.md)

## 关联材料

- 备份恢复演练：
  - [`docs/evidence/ops/2026-03-24/backup-restore/20260324-072353/BACKUP_RESTORE_DRILL.md`](/D:/project/docs/evidence/ops/2026-03-24/backup-restore/20260324-072353/BACKUP_RESTORE_DRILL.md)
- 配置与环境隔离演练：
  - [`docs/evidence/ops/2026-03-24/config-isolation/20260324-084915/CONFIG_ENV_ISOLATION_DRILL.md`](/D:/project/docs/evidence/ops/2026-03-24/config-isolation/20260324-084915/CONFIG_ENV_ISOLATION_DRILL.md)
