#!/usr/bin/env bash # Nightly backup of the HQ SQLite database to S3 (and a local rotation). # Usage: HQ_DATA_DIR=/var/lib/sims-hq/data S3_BUCKET=s3://your-bucket/hq-backups ./backup-hq.sh # Cron (2am daily): 0 2 * * * /opt/sims-hq/apps/hq/scripts/backup-hq.sh >> /var/log/sims-hq-backup.log 2>&1 set -euo pipefail DATA_DIR="${HQ_DATA_DIR:-/var/lib/sims-hq/data}" DB="$DATA_DIR/hq.db" STAMP="$(date +%Y%m%d-%H%M%S)" OUT="$DATA_DIR/backups" mkdir -p "$OUT" if [ ! -f "$DB" ]; then echo "no db at $DB"; exit 1; fi # Consistent snapshot even while the app is running (WAL-safe). sqlite3 "$DB" ".backup '$OUT/hq-$STAMP.db'" gzip -f "$OUT/hq-$STAMP.db" echo "local backup: $OUT/hq-$STAMP.db.gz" # Off-box copy (recommended). Requires awscli + an IAM role/keys with s3:PutObject. if [ -n "${S3_BUCKET:-}" ]; then aws s3 cp "$OUT/hq-$STAMP.db.gz" "$S3_BUCKET/hq-$STAMP.db.gz" echo "uploaded: $S3_BUCKET/hq-$STAMP.db.gz" fi # Keep the last 14 local snapshots. ls -1t "$OUT"/hq-*.db.gz 2>/dev/null | tail -n +15 | xargs -r rm -f echo "backup ok"