| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- #!/bin/sh
- # briven — nightly pg_dump of every data-plane project schema + control meta-DB
- # intended to run as a Dokploy cron (or plain host crontab) on the KVM that
- # hosts the postgres containers.
- #
- # required env:
- # BRIVEN_BACKUP_B2_KEY_ID — Backblaze B2 application key id
- # BRIVEN_BACKUP_B2_APP_KEY — Backblaze B2 application key secret
- # BRIVEN_BACKUP_B2_BUCKET — target bucket name (e.g. briven-backups)
- # BRIVEN_BACKUP_CONTROL_URL — postgres://… for briven_control
- # BRIVEN_BACKUP_DATA_URL — postgres://… for briven_data
- #
- # optional env:
- # BRIVEN_BACKUP_PREFIX — key prefix inside the bucket (default: prod/)
- # BRIVEN_BACKUP_RETENTION_DAYS — not enforced here; set a bucket lifecycle
- # rule instead (kept as a doc hint).
- #
- # restore is documented in infra/backups/RESTORE.md
- set -eu
- ts=$(date -u +%Y%m%d-%H%M%S)
- prefix=${BRIVEN_BACKUP_PREFIX:-prod}
- tmp=/tmp/briven-backup-$ts
- mkdir -p "$tmp"
- echo "[briven-backup $ts] control-plane pg_dump"
- pg_dump --format=custom --compress=6 --file "$tmp/control.dump" \
- "$BRIVEN_BACKUP_CONTROL_URL"
- echo "[briven-backup $ts] data-plane pg_dump (all schemas)"
- pg_dump --format=custom --compress=6 --file "$tmp/data.dump" \
- "$BRIVEN_BACKUP_DATA_URL"
- # Optional SHA256 manifest — cheap integrity check at restore time.
- ( cd "$tmp" && sha256sum *.dump > sha256sums.txt )
- echo "[briven-backup $ts] uploading to b2://$BRIVEN_BACKUP_B2_BUCKET/$prefix/$ts/"
- export B2_APPLICATION_KEY_ID="$BRIVEN_BACKUP_B2_KEY_ID"
- export B2_APPLICATION_KEY="$BRIVEN_BACKUP_B2_APP_KEY"
- b2 sync --delete "$tmp" "b2://$BRIVEN_BACKUP_B2_BUCKET/$prefix/$ts"
- rm -rf "$tmp"
- echo "[briven-backup $ts] done"
|