zkt26/sk1/backup.sh

45 lines
1.3 KiB
Bash

#!/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_<timestamp>.sql.gz \
# | docker exec -i shortlink_db psql -U "$DB_USER" -d "$DB_NAME"