You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
sims-hq/apps/hq/scripts/backup-hq.sh

29 lines
1.0 KiB
Bash

#!/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"