feat: automated daily SQLite database backups with retention
New DatabaseBackupHostedService + SqliteDatabaseBackupRunner: - daily VACUUM INTO snapshot to <Data:Root>/backups (safe with WAL) - catch-up backup at startup when none exists from the last 24h - retention pruning (Backups:RetainCount, default 14) - warns and stays idle on MySQL/MariaDB where external backups apply Production previously had no automated database backup on Linux (the /api/backup endpoint is Windows-DPAPI-only). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -133,6 +133,10 @@ Common keys:
|
||||
- `Exports:DailyEnabled`: enable/disable daily export background job
|
||||
- `Exports:DailyFolder`: export destination (relative to `Data:Root` if not absolute)
|
||||
- `Exports:DailyHourLocal`: local hour (0–23) when the daily export runs
|
||||
- `Backups:Enabled`: enable/disable the automated SQLite backup job (default `true`)
|
||||
- `Backups:HourLocal`: local hour (0–23) when the daily database backup runs (default `3`)
|
||||
- `Backups:RetainCount`: how many backup files to keep in `<Data:Root>/backups` (default `14`)
|
||||
- Backups use SQLite `VACUUM INTO` (consistent snapshot, safe with WAL). A catch-up backup runs at startup when none exists from the last 24 h. For MySQL/MariaDB configure external backups instead (see `deploy/MARIADB.md`).
|
||||
- `Auth:GoogleClientId`: if set, enables JWT bearer validation for Google ID tokens
|
||||
- `Auth:JwtKey`: secret used to sign local JWTs for username/password login (set via env var `Auth__JwtKey`)
|
||||
- `Auth:JwtIssuer`: JWT issuer (default `JobTrackerApi`)
|
||||
|
||||
Reference in New Issue
Block a user