Add scheduled and manual backups

Backups are .tar.gz archives of a consistent database snapshot (VACUUM
INTO) plus the images folder. They run on a cron schedule, daily at 3:00
by default, and the newest N scheduled ones are kept (7 by default).
Manual backups are never pruned.

Settings → Backups offers schedule presets or a custom cron expression,
retention, "Back up now", and download/delete for each backup. A small
built-in parser handles standard 5-field cron syntax with names, ranges,
steps and @daily-style shorthands.

Backups go to CANON_BACKUP_DIR (default data/backups). Compose mounts a
separate canon-backups volume at /backups, overridable with
CANON_BACKUP_PATH.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
cdnutterandClaude Opus 5.5 committed 2026-09-30 14:30:40 -07:00
1 parent 72b49d709a
commit f3185ba7bd
18 files changed
+940 -10

No files matched your search

+6
View File
@@ -20,11 +20,17 @@ CANON_IGDB_CLIENT_SECRET=
# CANON_HOST=0.0.0.0 # all network interfaces; 127.0.0.1 = this machine only
# CANON_PORT=4242
# CANON_LOG_LEVEL=debug
# CANON_BACKUP_DIR=./data/backups # outside Docker; Compose sets /backups
# Time zone for backup schedules (default UTC in Docker).
# TZ=America/Los_Angeles
# ---- Docker Compose only (not read by Canon itself) ----
# Where the database and images live. Default: the canon_canon-data volume.
# Use an absolute host path to keep them in a folder (writable by UID 1000).
# CANON_DATA_PATH=/srv/canon
# Where backups are written. Default: the canon_canon-backups volume.
# CANON_BACKUP_PATH=/mnt/nas/canon-backups
# Host address and port to publish on.
# CANON_BIND=0.0.0.0
# CANON_PUBLISH_PORT=4242