railiance-platform/docs/forgejo-backup.md
tegwick 074e7f8441
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 3s
Add Forgejo daily backup automation (T04/T09 Option A)
make forgejo-backup runs forgejo dump + pg_dump, age-encrypts, uploads to
Nextcloud forgejo/ prefix. Includes dry-run, status, and operator docs.
2026-07-07 17:19:19 +02:00

65 lines
No EOL
2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Forgejo backup (railiance01)
Workplan: `RAIL-HO-WP-0005` T04/T09 · Decision: Option A (Nextcloud + age)
## What is backed up
| Artifact | Source | Format |
| --- | --- | --- |
| Blob state | `forgejo dump` in production pod | zip → age |
| PostgreSQL | `pg_dump -Fc` from CNPG `forgejo-db` | custom dump → age |
Covers git repos, packages (OCI/npm/generic), attachments, LFS, avatars, and DB metadata.
## Operator commands
```bash
cd ~/railiance-platform
make forgejo-backup-dry-run # local encrypt only, no upload
make forgejo-backup # encrypt + upload to Nextcloud forgejo/
make forgejo-backup-status # last success + 7-day gate hint
```
Requires: `kubectl`, `age`, `curl`, `KUBECONFIG=~/.kube/config-hosteurope`.
Preflight: `forgejo-db` pod must be Ready (`make forgejo-db-status`). A full dump
with 13 org repos is ~670MiB — allow 1020 minutes for stream + age on a typical
workstation link.
Decrypt: `~/.config/age/railiance-backup.key` (same key as other Railiance backups).
## Nextcloud layout
```
forgejo/forgejo-dump-<timestamp>.zip.age
forgejo/forgejo-db-<timestamp>.sql.age
forgejo/forgejo-dump-weekly-<timestamp>.zip.age # Sundays only
forgejo/forgejo-db-weekly-<timestamp>.sql.age
```
Retention target: **14 daily + 4 weekly** on Nextcloud (operator may prune old
objects in the WebDAV folder; local cache keeps 7 per type).
## Cron (workstation)
```cron
# Daily 02:15 UTC — Forgejo backup (RPO 24h)
15 2 * * * cd $HOME/railiance-platform && make forgejo-backup >>$HOME/.cache/railiance/backups/forgejo/cron.log 2>&1
```
## Promotion gate (tier-3 cutover)
Do not promote further production repos until:
1. `make forgejo-backup` succeeds **7 consecutive days** (check `success-log`).
2. One restore drill uses a Nextcloud artifact (not `/tmp/forgejo-drill/`).
## Restore
See `railiance-infra`:
- `tools/forgejo-restore-drill.sh`
- `docs/forgejo-restore-drill-evidence.md`
Download and decrypt a dump from Nextcloud, set `BACKUP_LOCAL` to the zip path,
then run the drill script.