Ops-dashboard/app
Madhura68 ab87c0fada feat(server-backup): restic dual-repo backup (NAS + B2) with dashboard UI
Adds a server-wide backup capability beyond the existing ops_dashboard
pg_dump flow:

- Daily systemd timer (03:30) runs pg_dumpall + Forgejo dump, then restic
  to a local NAS repo and an offsite Backblaze B2 repo with Object Lock.
  Phase-based script with single-instance flock, structured statusfile,
  systemd hardening, and live-datadir excludes (Postgres / Forgejo) so
  the dumps stay authoritative.
- Ops-agent gets nine new read-only/trigger commands (snapshots, stats,
  status, logs, plus two triggers) backed by sudoers-whitelisted wrapper
  scripts that source /etc/restic-backup.env so the agent never sees the
  restic password or B2 keys.
- Two new flows (server_backup_full, server_backup_restore_test) drive
  the dashboard's "Backup now" and "Restore test" buttons.
- /settings/backups gains a Server backup section with overall + per-phase
  status, NAS / B2 snapshot tables, restore-size / raw-data / dedup-ratio
  stats, and the last restore-test result. The existing pg_dump section
  is preserved unchanged.
- Runbook docs/runbooks/server-backup.md follows the tailscale-setup
  pattern (plan + addendum) and covers B2 Object Lock + scoped keys,
  Forgejo subplan with isolated restore-test stack, the off-server
  maintenance flow for B2 prune, and the integrity-check schedule.

Code-only change — installation on scrum4me-srv follows the runbook.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-15 13:03:00 +02:00
..
_components feat(widgets): voeg kleurbadges toe aan SystemdWidget en GitWidget 2026-05-13 22:14:01 +02:00
api feat(worker-logs): add worker run-log viewer page 2026-05-15 01:58:03 +02:00
audit feat(audit): add /audit list and /audit/[flow_run_id] detail pages 2026-05-13 18:00:37 +02:00
caddy feat(caddy): replace textarea with CodeMirror 6 editor in caddy-editor 2026-05-13 23:39:29 +02:00
docker feat(security): rate-limit /api/flows/start, CSRF double-submit cookie, CSP headers 2026-05-13 20:01:43 +02:00
flows feat(flows): redeploy_all flow + fix MCP-worker cache-bust 2026-05-14 12:05:39 +02:00
git feat(security): rate-limit /api/flows/start, CSRF double-submit cookie, CSP headers 2026-05-13 20:01:43 +02:00
login feat(security): rate-limit /api/flows/start, CSRF double-submit cookie, CSP headers 2026-05-13 20:01:43 +02:00
settings feat(server-backup): restic dual-repo backup (NAS + B2) with dashboard UI 2026-05-15 13:03:00 +02:00
systemd feat(security): rate-limit /api/flows/start, CSRF double-submit cookie, CSP headers 2026-05-13 20:01:43 +02:00
worker-logs feat(worker-logs): add worker run-log viewer page 2026-05-15 01:58:03 +02:00
favicon.ico feat: Next.js + Tailwind + shadcn/ui project skeleton 2026-05-13 16:59:21 +02:00
globals.css feat: Next.js + Tailwind + shadcn/ui project skeleton 2026-05-13 16:59:21 +02:00
layout.tsx feat(layout): integreer AppNav en update metadata 2026-05-13 21:57:19 +02:00
page.tsx feat(widgets): voeg relativeTime toe in lib/utils, expiringWarning-badge in CaddyWidget 2026-05-13 22:10:51 +02:00