Backup & recovery
Restic to Cloudflare R2, an hourly/nightly/weekly policy, broad scope, and the rule that an untested backup is not a backup.
Restic backs up the durable state to Cloudflare R2 on an hourly/nightly/weekly cadence — never only on the same VPS.
Scope
- Convex data
- SQLite memory
- procedural memory
- strategy definitions
- experiment definitions
- configuration
- Parquet research data
- Grafana dashboards
- critical logs
- encrypted secrets (separately)
Policy
Three cadences, each off-box and encrypted — never only on the same VPS:
| Frequency | What runs |
|---|---|
| Hourly | Critical operational snapshots where safe |
| Nightly | Convex export, SQLite checkpoints, config & strategy definitions → encrypted to R2 |
| Weekly | Full retained backup, automated integrity check, restore drill in isolation |
Destination — Cloudflare R2
Backups go off-box to Cloudflare R2 via Restic; encrypted secrets are backed up separately from operational data. The free tier covers early needs:
10 GBFree tier / monththen $0.015 per GB-month
$0Egressfree Internet egress
1M / 10MClass A / B ops freeper month
An untested backup is not a backup
A backup is not considered reliable until it has been restored successfully. The weekly drill restores into an isolated environment and runs an integrity check — recovery is the part that actually matters.