#!/bin/bash # scripts/backup.sh — Back up the ShortLink PostgreSQL database. # Run from the sk1 directory: ./scripts/backup.sh # Optionally set BACKUP_DIR in .env to change the backup location. set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "${SCRIPT_DIR}/.." # Load env set -a # shellcheck disable=SC1091 source .env set +a BACKUP_DIR="${BACKUP_DIR:-./backups}" TIMESTAMP="$(date +"%Y%m%d_%H%M%S")" BACKUP_FILE="${BACKUP_DIR}/shortlink_${TIMESTAMP}.sql.gz" mkdir -p "${BACKUP_DIR}" echo "Creating database backup..." docker exec shortlink_db pg_dump \ -U "${DB_USER}" \ -d "${DB_NAME}" \ --no-owner \ --clean \ | gzip > "${BACKUP_FILE}" SIZE="$(du -sh "${BACKUP_FILE}" | cut -f1)" echo "✓ Backup saved: ${BACKUP_FILE} (${SIZE})" # Keep only the 7 most recent backups KEPT=7 OLDER=$(ls -t "${BACKUP_DIR}"/shortlink_*.sql.gz 2>/dev/null | tail -n +"$((KEPT + 1))") if [ -n "$OLDER" ]; then echo "$OLDER" | xargs rm -f echo " Old backups removed (keeping last ${KEPT})." fi # ── To restore a backup ─────────────────────────────────────────────────────── # gunzip -c backups/shortlink_.sql.gz \ # | docker exec -i shortlink_db psql -U "$DB_USER" -d "$DB_NAME"