45 lines
1.3 KiB
Bash
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"
|