feat(pikaoa): 建立附件离机备份控制面

This commit is contained in:
Codex
2026-07-15 08:03:45 +02:00
parent fe9f707145
commit 7a428e0656
6 changed files with 516 additions and 1 deletions
@@ -0,0 +1,35 @@
# R1.6.1.2 任务报告
## 阶段结论
PikaOA 生产附件离机备份已完成首阶段代码、owning YAML、受控 CLI、定向测试与 plan 渲染。当前 NC01 生产 `pikaoa` namespace、附件 PVC、备份 Secret 和 PK01 专用 SFTP 目录尚未就绪,因此真实 `apply`、首备和 restore smoke 保持 `prerequisite-waiting`,不冒充成功,也不阻塞 PikaOA、PaC 或 Argo。
## 变更
- `config/pikaoa.yaml`:声明 04:17 日常 Restic 备份、retention、只读附件 PVC、`.tmp` 排除、PK01 SFTP 目标、独立 check 与 forget/prune schedule、临时目录 restore smoke 和非阻塞策略。
- `config/secrets-distribution.yaml`:声明 Restic 密码 env 与 SSH 私钥、`known_hosts` 两个 raw-file 的 `sourceRef``sourceKey``targetKey`,禁止从运行面反解或手写 Secret。
- `scripts/src/pikaoa-attachments-backup.ts`:提供 `plan``status``apply``backup-now``restore-smoke`,长 apply 使用异步 UniDesk job;手动备份和恢复提交 Kubernetes Job 后立即返回并通过 `status` 轮询。
- `scripts/src/pikaoa-test-target.ts`:把 `pikaoa attachments-backup` 接入现有 PikaOA CLI dispatcher。
- `scripts/src/pikaoa-attachments-backup.test.ts`:覆盖独立 CronJob、只读 PVC、`.tmp` 排除、retention、Secret 不泄露与临时 `emptyDir` restore smoke。
## 验证
- `bun test ./scripts/src/pikaoa-attachments-backup.test.ts`2 pass0 fail。
- `pikaoa attachments-backup plan --target NC01 --output json``ok=true``mode=local-render`、4 个对象、schedule 为 04:17、晚于数据库 03:37、`valuesPrinted=false`
- `pikaoa attachments-backup apply --target NC01 --output json`:默认 dry-run`mutation=false`
- `pikaoa attachments-backup status --target NC01 --output json`:真实只读观察返回 `prerequisite-waiting``businessBlocking=false`,未发现生产 namespace、附件 PVC、备份 Secret 和 PK01 目标目录。
- `git diff --check` 通过。
## 后续原入口
生产附件 PVC 与 PK01 最小权限 SFTP 前置就绪后,主代理按顺序执行:
1. `bun scripts/cli.ts secrets sync --config config/secrets-distribution.yaml --target pikaoa-nc01 --confirm`
2. `bun scripts/cli.ts pikaoa attachments-backup status --target NC01`
3. `bun scripts/cli.ts pikaoa attachments-backup apply --target NC01 --confirm`
4. `bun scripts/cli.ts pikaoa attachments-backup backup-now --target NC01 --confirm`
5. `bun scripts/cli.ts pikaoa attachments-backup status --target NC01`
6. `bun scripts/cli.ts pikaoa attachments-backup restore-smoke --target NC01 --confirm`
7. `bun scripts/cli.ts pikaoa attachments-backup status --target NC01`
只有首备 snapshot 摘要与临时目录 restore smoke 成功后,才可把 MDTODO R1.6.1.2 从 `in_progress` 更新为 `completed`