Import source: app/scripts/pg-backup.sh
Import the existing local project snapshot. This commit organizes existing files; it does not represent newly developed functionality.
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
#!/bin/sh
|
||||
# Teknav nightly Postgres backup.
|
||||
# Loops forever inside the postgres-backup container; uses a 24h sleep so the
|
||||
# host cron doesn't have to know anything. Runs once at startup, then every 24h.
|
||||
#
|
||||
# Output: /backups/teknav-YYYYMMDD-HHMMSS.sql.gz
|
||||
# Retention: keep 14 days; older files auto-deleted.
|
||||
|
||||
set -eu
|
||||
|
||||
BACKUP_DIR="${BACKUP_DIR:-/backups}"
|
||||
RETENTION_DAYS="${BACKUP_RETENTION_DAYS:-14}"
|
||||
INTERVAL_SECONDS="${BACKUP_INTERVAL_SECONDS:-86400}" # 24h
|
||||
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
|
||||
run_once() {
|
||||
ts="$(date -u +%Y%m%d-%H%M%S)"
|
||||
out="${BACKUP_DIR}/teknav-${ts}.sql.gz"
|
||||
echo "[pg-backup] dumping → ${out}"
|
||||
PGPASSWORD="${POSTGRES_PASSWORD}" pg_dump \
|
||||
--host=postgres \
|
||||
--username="${POSTGRES_USER}" \
|
||||
--dbname="${POSTGRES_DB}" \
|
||||
--no-owner --no-privileges \
|
||||
--format=plain \
|
||||
| gzip -9 > "$out.tmp" \
|
||||
&& mv "$out.tmp" "$out"
|
||||
echo "[pg-backup] done → $(du -h "$out" | cut -f1)"
|
||||
|
||||
echo "[pg-backup] pruning files older than ${RETENTION_DAYS} days"
|
||||
find "$BACKUP_DIR" -maxdepth 1 -name 'teknav-*.sql.gz' -type f -mtime +"$RETENTION_DAYS" -print -delete || true
|
||||
}
|
||||
|
||||
while true; do
|
||||
run_once || echo "[pg-backup] dump failed; will retry next cycle"
|
||||
echo "[pg-backup] sleeping ${INTERVAL_SECONDS}s"
|
||||
sleep "$INTERVAL_SECONDS"
|
||||
done
|
||||
Reference in New Issue
Block a user