记录源 Linear→Plane (2026-09-03 起, Plane MCP) + plane.chans.xyz 服务行/upstream 段; inventory + hosts/synapse.chans.xyz.md 补 Plane 部署事实 (Helm plane-ce-1.8.0 / app v1.4.1, ns plane, IngressRoute/自有证书 issuer/PVC 5+5Gi local-path/无备份层); 新增 runbooks/plane-health.md (只读健康检查) 与 docs/plane-hardening/ 草稿 (values.hardened.yaml、secrets.yaml.example 占位、backup/ CronJob), 均为未应用设计稿; .gitignore 增加 .tmp-* agent 临时文件。
2.8 KiB
2.8 KiB
Plane CE 备份方案(DB-only)— DRAFT (2026-09-03), 未应用
关联:
plane-backup.yaml(CronJob);追踪:Plane vps 项目条目(记录源,2026-09-03 起不用 Linear)。 现状(实测):pg 全库 88 MB(310 issues / 1 user);MinIO uploads 264 KB(几乎空)。
范围决策(2026-09-03,实际角度)
- 做:PostgreSQL 逻辑备份 —— 覆盖现实故障(误删、升级失败、磁盘坏、重装),成本≈0。
- 不做:MinIO/附件备份 —— 桶仅 264 KB,个人实例附件可接受丢失;不为它付日常维护。
日后附件明显变多再按原完整版思路加
mc mirror(历史版本见本目录 git 历史/Plane 条目评论)。 - 异机同步暂不启用(见下"局限/阻塞")。
方案
集群内 CronJob(ns plane,每天 01:30 UTC = 03:30 本地,控制器按 UTC 跑):
- 单容器
postgres:15.7-alpine:pg_dump -Fc(自定义压缩格式)打plane库 →/var/backups/plane/pg/plane-<UTC时间戳>.dump(hostPathDirectoryOrCreate) - 保留 7 天(
find -mtime +7 -delete),成功/失败历史各留 3/2 - 凭据:现 chart Secret
plane-app-pgdb-secrets(Phase A 外部化后改plane-pgdb-credentials)
容量
- 库 88 MB →
-Fc快照约 10–40 MB/天 × 7 天 ≈ <300 MB,对 83 G 可用盘可忽略。
还原(未演练;应用前先做一次隔离测试)
# 目标 PG15 实例(临时起一个 postgres:15.7-alpine 容器或另一台机):
# 先建空库: createdb plane (user=plane)
pg_restore -h <target> -U plane -d plane --clean --if-exists /var/backups/plane/pg/plane-<TS>.dump
# 还原后确认 310 issues 量级一致;附件为空属预期(未备份 MinIO)
验收(应用前逐项过)
- CronJob 建立后手动触发一次:
kubectl -n plane create job --from=cronjob/plane-backup plane-backup-manual-1,JobCompleted /var/backups/plane/pg/plane-*.dump可被pg_restore -l列出- 备份 Job 只依赖 pgdb 服务,不依赖 Plane 应用 Pod(应用故障期间也能出备份)
- 保留清理 dry-run(
find ... -print)正确;df -h /前后对比记录
局限 / 阻塞
- 本地方案不是离机备份:单节点磁盘/整机故障即丢。如日后要离机,纳入 Restic 异机 repository 决策与存取隔离 (与 Matrix 备份同一决策);恢复演练纪律见 服务级 restore runbook 与隔离复元演练。
- 提醒:同一节点 Matrix 数据价值远高于 Plane 且同样无备份 —— 若投入备份精力,顺序上 Matrix 优先。