# WarRoom 灾备演练

最后更新：2026-07-19

## 目标

灾备任务每周在 `yc2` 与 `yc3` 分别执行一次：

1. 将恢复所需配置、状态、发布物与审计数据复制到稳定快照。
2. 生成包含逐文件 SHA-256、大小和权限的清单。
3. 创建权限为 `0600` 的压缩归档，并重新读取归档验证全部校验和。
4. 将归档恢复到新的空隔离目录，解析 JSON/JSONL 并校验客户端发布物。
5. 检查 HTTPS 证书剩余有效期。
6. 删除隔离目录，仅保留归档与公开的最小状态摘要。

工具不会把归档直接覆盖回生产路径。人工恢复也只能解压到空目录，再由管理员审查清单后逐项安装。

## 调度

```bash
systemctl status warroom-dr@yc2.timer
systemctl status warroom-dr@yc3.timer
systemctl list-timers 'warroom-dr@*'
```

默认每周日 03:20 执行，并增加最多一小时随机延迟。定时器启用 `Persistent=true`，服务器错过计划时间后会在恢复运行时补做。

## 手动演练

```bash
sudo systemctl start warroom-dr@yc2.service
sudo systemctl start warroom-dr@yc3.service
journalctl -u warroom-dr@yc2.service -n 100 --no-pager
journalctl -u warroom-dr@yc3.service -n 100 --no-pager
```

节点配置位于：

- `/etc/warroom-dr/yc2.json`
- `/etc/warroom-dr/yc3.json`

归档保存在 `/var/backups/warroom`，目录权限为 `0700`，归档权限为 `0600`。默认每个节点保留最近八份。

## 校验归档

```bash
sudo python3 /opt/warroom-dr/warroom_dr.py \
  --config /etc/warroom-dr/yc3.json verify \
  /var/backups/warroom/warroom-yc3-YYYYmmddTHHMMSSZ-PID.tar.gz
```

校验会拒绝绝对路径、`..` 路径穿越、符号链接、硬链接、重复成员、未知成员、大小不一致和 SHA-256 不一致。

## 隔离恢复

目标目录必须不存在或为空：

```bash
sudo install -d -m 700 /var/tmp/warroom-restore-review
sudo python3 /opt/warroom-dr/warroom_dr.py \
  --config /etc/warroom-dr/yc3.json restore \
  /var/backups/warroom/warroom-yc3-YYYYmmddTHHMMSSZ-PID.tar.gz \
  /var/tmp/warroom-restore-review
```

恢复内容位于 `payload/<资产名>/`，根目录同时写入 `manifest.json`。工具不会自动修改 Nginx、systemd、证书或模拟账户。

## 节点范围

`yc2` 保存：鉴权配置、Nginx 与 systemd 配置、API 源码、模拟账户、交易流水、权益历史、审计、资产参数和 walk-forward 结果。

`yc3` 保存：主控源码与服务、Nginx、证书续期配置、续期钩子、RBAC/运维文档，以及 Android/Windows 发布目录。证书私钥不会写入备份；灾备恢复时应重新签发证书。

## 状态

- `https://yc2.flha.ru/dr-status.json`
- `https://yc3.flha.ru/dr-status.json`
- `https://yc3.flha.ru/api/master/status`

公开状态只包含结果、归档文件名、大小、文件数量、耗时、证书到期日和发布物数量，不包含源路径、密码哈希或归档内容。
