# TB-001 — Backup stack **Status:** done — deployed 2026-06-11 **Your call:** **Do it** --- ## Talk first > **Stop.** Don't read Reference until we've talked. > In chat, say **"let's do TB-001"** or **"backup stack"**. **In one sentence:** Set up automatic nightly backups of configs and databases, with a copy off the server. **Why it came up:** Right now nothing backs up /config or your databases — ZFS snapshots don't help if the whole machine dies. ### Questions 1. Does losing valhalla overnight scare you, or is 'I'll deal with it' okay for now? 2. Do you already have offsite storage (Backblaze, Wasabi, another machine)? 3. Kopia (has a UI) vs Restic (simpler CLI) — want a recommendation or don't care? ### Your options | Option | Meaning | |--------|---------| | **Do it** | We're doing this — I'll implement or walk you through it | | **Later** | Keep on the list, not now | | **Drop** | Remove from plan — totally fine | | **Tweak** | Change scope; tell me how | ### What we decided | | | |---|---| | **Decision** | Do it | | **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) | ---
Reference (only open if we're doing it) ### Stack / files `backup` new stack ### If we do it — rough steps 1. Pick Kopia or Restic 2. New stacks/backup/ with nightly schedule + ntfy on failure 3. Script dumps for all Postgres/MariaDB/CouchDB 4. One restore test so we know it works ### Done when - [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)