diff --git a/plans/homelab-improvements/PLAN-BRIEF.md b/plans/homelab-improvements/PLAN-BRIEF.md index 654a33e..e1e1028 100644 --- a/plans/homelab-improvements/PLAN-BRIEF.md +++ b/plans/homelab-improvements/PLAN-BRIEF.md @@ -18,7 +18,7 @@ Before any phase or task, we should answer: | | | |---|---| -| **Priority theme** | Backups (TB-001 in progress) | +| **Priority theme** | Backups done (TB-001 complete) | | **Explicitly dropped** | _(none yet)_ | | **Notes** | _(conversation notes go here)_ | @@ -32,7 +32,7 @@ Each link opens an **interview-first** task brief. The conversation is the task. | Say this… | About | |-----------|--------| -| [TB-001](tasks/TB-001-backup-stack.md) | Automated backups — you don't have any yet | +| [TB-001](tasks/TB-001-backup-stack.md) | Automated backups — **done** (Kopia + B2) | | [TB-033](tasks/TB-033-public-surface-audit.md) | What's actually public on the internet? | | [TB-003](tasks/TB-003-recyclarr.md) | Sync *arr quality settings automatically | | [TB-004](tasks/TB-004-pin-infra-tags.md) | Stop `:latest` from breaking databases | diff --git a/plans/homelab-improvements/tasks/README.md b/plans/homelab-improvements/tasks/README.md index ce93462..6d0bc11 100644 --- a/plans/homelab-improvements/tasks/README.md +++ b/plans/homelab-improvements/tasks/README.md @@ -34,7 +34,7 @@ Parent: [PLAN-BRIEF.md](../PLAN-BRIEF.md) · Template: [_TEMPLATE.md](_TEMPLATE. | ID | One line | Brief | |----|----------|-------| -| TB-001 | Automated backups | [→](TB-001-backup-stack.md) | +| TB-001 | Automated backups ✓ | [→](TB-001-backup-stack.md) | | TB-002 | jd.ginnoir.com | [→](TB-002-jd-caddy-block.md) | | TB-003 | Recyclarr | [→](TB-003-recyclarr.md) | | TB-004 | Pin infra tags | [→](TB-004-pin-infra-tags.md) | diff --git a/plans/homelab-improvements/tasks/TB-001-backup-stack.md b/plans/homelab-improvements/tasks/TB-001-backup-stack.md index 7cd23db..ef511ce 100644 --- a/plans/homelab-improvements/tasks/TB-001-backup-stack.md +++ b/plans/homelab-improvements/tasks/TB-001-backup-stack.md @@ -1,6 +1,6 @@ # TB-001 — Backup stack -**Status:** in progress — stack drafted, needs B2 + Portainer deploy +**Status:** done — deployed 2026-06-11 **Your call:** **Do it** --- @@ -34,8 +34,8 @@ | | | |---|---| | **Decision** | Do it | -| **Notes** | Kopia + B2 TBD. `/config` + dumps (RomM DB). labdata: gitea, minio, romhacks, romm/assets (saves). **Skip:** entire `/storage1/Emulation` (legacy), romm/resources (art), registry, incoming. See `SCOPE.md`. | -| **Date** | 2026-06-10 | +| **Notes** | Kopia → Backblaze B2 (`ginnoir-backup`). Portainer stack #29. Scope per `stacks/backup/SCOPE.md`. UI: `backup.ginnoir.com`. ntfy topic `backup`. SQL dump + Kopia snapshot restore tested. | +| **Date** | 2026-06-10 (decided) · 2026-06-11 (deployed) | --- @@ -55,8 +55,8 @@ ### Done when -- [ ] Nightly backup runs without you -- [ ] At least one restore tested -- [ ] Failures ping ntfy +- [x] Nightly backup runs without you (cron 02:50 dumps, 03:00 snapshots) +- [x] At least one restore tested (postgres_resume dump + Gitea repos snapshot from B2) +- [x] Failures ping ntfy (topic `backup`; test ping verified) diff --git a/stacks/backup/README.md b/stacks/backup/README.md index 0bab4ae..2a81a51 100644 --- a/stacks/backup/README.md +++ b/stacks/backup/README.md @@ -26,7 +26,7 @@ Kopia → Backblaze B2. Backs up `/config`, **selected** `labdata` paths (see `S - UI: https://backup.ginnoir.com (LAN/Tailscale) — username `kopia`, password = `KOPIA_REPOSITORY_PASSWORD` in `stack.env` - Subscribe phone to ntfy topic `backup` (or path in `NTFY_URL`) -- **Restore test** (do once): pick a small dump from `/config/backup/dumps/`, restore to a throwaway container +- **Restore test** (done 2026-06-11): `postgres_resume` SQL dump + Gitea repos Kopia snapshot from B2 ## Schedule