#!/bin/bash # /home/aknuth/scripts/backup-invoice-db.sh # Daily PostgreSQL backup for quote-invoice-system โ†’ iDrive e2 set -euo pipefail BACKUP_DIR="/tmp/invoice-backups" TIMESTAMP=$(date +%Y%m%d_%H%M%S) BACKUP_FILE="invoice_db_${TIMESTAMP}.sql.gz" CONTAINER="quote_db" DB_USER="quoteuser" DB_NAME="quotes_db" RCLONE_REMOTE="invoice-backup:invoice-postgresdb" RETAIN_DAYS=30 echo "๐Ÿ—„๏ธ [BACKUP] Starting invoice DB backup..." # Create temp dir mkdir -p "$BACKUP_DIR" # Dump and compress docker exec "$CONTAINER" pg_dump -U "$DB_USER" "$DB_NAME" | gzip > "${BACKUP_DIR}/${BACKUP_FILE}" FILESIZE=$(du -h "${BACKUP_DIR}/${BACKUP_FILE}" | cut -f1) echo "๐Ÿ“ฆ Dump complete: ${BACKUP_FILE} (${FILESIZE})" # Upload to iDrive e2 rclone copy "${BACKUP_DIR}/${BACKUP_FILE}" "$RCLONE_REMOTE/" --log-level INFO echo "โ˜๏ธ Uploaded to ${RCLONE_REMOTE}/${BACKUP_FILE}" # Clean up local temp rm -f "${BACKUP_DIR}/${BACKUP_FILE}" # Remove remote backups older than 30 days rclone delete "$RCLONE_REMOTE" --min-age "${RETAIN_DAYS}d" --log-level INFO echo "๐Ÿงน Remote cleanup done (>${RETAIN_DAYS} days)" echo "โœ… [BACKUP] Invoice DB backup complete."