Back up every store: the restic module and the stores' contributions (hq ADR 0214, to-be 43) #49

Merged
jschoubben merged 2 commits from feat/node-backup into main 2026-10-05 10:13:49 +00:00
Owner
  • restic (Go, one binary restic-backups like the licence manager) holds node-backup: one repository per machine, a nightly snapshot per module at 03:00 (and at start when a night was missed), 14 daily / 8 weekly / 6 monthly, restores beside the live data as <path>.restored-<date> and never over it, a weekly restic check reading 5% of the data. The repository key is an own-secret.
  • Dumps: postgres (pg_dump -Fc per database into store-data/dumps), mssql (BACKUP DATABASE … COPY_ONLY, CHECKSUM into data/backup), mongodb (mongodump --archive). Each command was run against the live servers into /tmp first.
  • Directories: minio, influxdb, mesh-vault, mailu (mail, dkim, data, dav, webmail), gitea, nextcloud (html: config.php).

Tests: 8/8 in Go, one with the real restic (back up, delete by mistake, restore beside, refuse a second restore over the first); vets and builds against mesh-sdk/go main. The controller's catalogue check passes over this branch.

After merging: assign restic to the control node and the home server.

Merge order: mesh-controller first, and let it deploy; then mesh-catalog; then hq. A controller without the node-backup seat refuses a module contributing to it, so the catalog's rebuilt store modules would not register before it.

- **`restic`** (Go, one binary `restic-backups` like the licence manager) holds `node-backup`: one repository per machine, a nightly snapshot per module at 03:00 (and at start when a night was missed), 14 daily / 8 weekly / 6 monthly, restores beside the live data as `<path>.restored-<date>` and never over it, a weekly `restic check` reading 5% of the data. The repository key is an own-secret. - **Dumps**: postgres (`pg_dump -Fc` per database into `store-data/dumps`), mssql (`BACKUP DATABASE … COPY_ONLY, CHECKSUM` into `data/backup`), mongodb (`mongodump --archive`). Each command was run against the live servers into `/tmp` first. - **Directories**: minio, influxdb, mesh-vault, mailu (mail, dkim, data, dav, webmail), gitea, nextcloud (html: config.php). Tests: 8/8 in Go, one with the real restic (back up, delete by mistake, restore beside, refuse a second restore over the first); vets and builds against mesh-sdk/go main. The controller's catalogue check passes over this branch. After merging: assign `restic` to the control node and the home server. **Merge order: mesh-controller first, and let it deploy; then mesh-catalog; then hq.** A controller without the `node-backup` seat refuses a module contributing to it, so the catalog's rebuilt store modules would not register before it.
jschoubben added 1 commit 2026-10-05 09:48:18 +00:00
ADR 0214 / to-be 43. restic keeps one repository per machine and takes a nightly snapshot per
module — 14 daily, 8 weekly, 6 monthly — and restores beside the live data, never over it. postgres,
mssql and mongodb contribute a consistent dump; minio, influxdb, the vault, mailu, gitea and
nextcloud the directories that hold their data.
jschoubben added 1 commit 2026-10-05 09:58:21 +00:00
Go is the default for new module code; the holder is one binary like the licence manager, serving
the seat's verbs over the SDK and running the nights beside them. Same behaviour and tests.
jschoubben merged commit 96ee0d7ad6 into main 2026-10-05 10:13:49 +00:00
jschoubben deleted branch feat/node-backup 2026-10-05 10:13:49 +00:00
Contributor

Delivery novox/mesh-catalog@96ee0d7ad6f8 — held since 2026-10-06T23:05:28Z

Held for a person: merged without a passing check: only a person decides that it goes on — mesh-delivery.release with why lets it go on.

Delivery plan — builds gitea, influxdb, mailu, mesh-vault, minio, mongodb, mssql, nextcloud, postgres, restic → ace, g14, novox, shanks; no bus step; 6 wait(s) for a person

  • tier 0: gitea, influxdb, mailu, mesh-vault, minio, mongodb, mssql, nextcloud, postgres, restic
  • ace: receives influxdb, restic; waits for a person: mssql, postgres
  • g14: receives restic
  • novox: receives gitea, mailu, mesh-vault, nextcloud, restic; waits for a person: minio, mongodb, mssql, postgres
  • shanks: receives restic
  • gitea provides npm-package-registry, git: its consumers are sent again after it
  • gitea keeps data (ADR 0233): what it holds is backed up before it moves
  • influxdb provides influxdb-api: its consumers are sent again after it
  • influxdb keeps data (ADR 0233): what it holds is backed up before it moves
  • mailu provides smtp: its consumers are sent again after it
  • mailu keeps data (ADR 0233): what it holds is backed up before it moves
  • mesh-vault provides secret: its consumers are sent again after it
  • mesh-vault keeps data (ADR 0233): what it holds is backed up before it moves
  • minio waits for a person: its policy records (module)
  • minio provides s3-bucket: its consumers are sent again after it
  • minio keeps data (ADR 0233): what it holds is backed up before it moves
  • mongodb waits for a person: its policy records (module)
  • mongodb provides mongodb-database: its consumers are sent again after it
  • mongodb keeps data (ADR 0233): what it holds is backed up before it moves
  • mssql waits for a person: its policy records (module)
  • mssql provides mssql-database: its consumers are sent again after it
  • mssql keeps data (ADR 0233): what it holds is backed up before it moves
  • nextcloud keeps data (ADR 0233): what it holds is backed up before it moves
  • postgres waits for a person: its policy records (module)
  • postgres provides postgres-database: its consumers are sent again after it
  • postgres keeps data (ADR 0233): what it holds is backed up before it moves
  • restic keeps data (ADR 0233): what it holds is backed up before it moves

Transitions

  • 2026-10-06 23:05 (new) → proposed (announced): novox/mesh-catalog#49 merged; its head was not heard by this owner, so it is made from the forge's word
  • 2026-10-06 23:05 proposed → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on

The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.

<!-- mesh-delivery:view --> **Delivery** `novox/mesh-catalog@96ee0d7ad6f8` — **held** since 2026-10-06T23:05:28Z Held for a person: merged without a passing check: only a person decides that it goes on — `mesh-delivery.release` with why lets it go on. **Delivery plan** — builds gitea, influxdb, mailu, mesh-vault, minio, mongodb, mssql, nextcloud, postgres, restic → ace, g14, novox, shanks; no bus step; 6 wait(s) for a person - tier 0: gitea, influxdb, mailu, mesh-vault, minio, mongodb, mssql, nextcloud, postgres, restic - ace: receives influxdb, restic; waits for a person: mssql, postgres - g14: receives restic - novox: receives gitea, mailu, mesh-vault, nextcloud, restic; waits for a person: minio, mongodb, mssql, postgres - shanks: receives restic - gitea provides npm-package-registry, git: its consumers are sent again after it - gitea keeps data (ADR 0233): what it holds is backed up before it moves - influxdb provides influxdb-api: its consumers are sent again after it - influxdb keeps data (ADR 0233): what it holds is backed up before it moves - mailu provides smtp: its consumers are sent again after it - mailu keeps data (ADR 0233): what it holds is backed up before it moves - mesh-vault provides secret: its consumers are sent again after it - mesh-vault keeps data (ADR 0233): what it holds is backed up before it moves - minio waits for a person: its policy records (module) - minio provides s3-bucket: its consumers are sent again after it - minio keeps data (ADR 0233): what it holds is backed up before it moves - mongodb waits for a person: its policy records (module) - mongodb provides mongodb-database: its consumers are sent again after it - mongodb keeps data (ADR 0233): what it holds is backed up before it moves - mssql waits for a person: its policy records (module) - mssql provides mssql-database: its consumers are sent again after it - mssql keeps data (ADR 0233): what it holds is backed up before it moves - nextcloud keeps data (ADR 0233): what it holds is backed up before it moves - postgres waits for a person: its policy records (module) - postgres provides postgres-database: its consumers are sent again after it - postgres keeps data (ADR 0233): what it holds is backed up before it moves - restic keeps data (ADR 0233): what it holds is backed up before it moves **Transitions** - 2026-10-06 23:05 (new) → proposed (announced): novox/mesh-catalog#49 merged; its head was not heard by this owner, so it is made from the forge's word - 2026-10-06 23:05 proposed → held (merged-unchecked): merged without a passing check — a verdict known with it is taken first: only a person decides that it goes on The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-catalog#49