From 01ee278e0357befae5bc466adcdec78cadc22a52 Mon Sep 17 00:00:00 2001 From: Andreas Knuth Date: Fri, 20 Mar 2026 14:32:17 -0500 Subject: [PATCH] backup db --- backup-invoice-db.sh | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100755 backup-invoice-db.sh diff --git a/backup-invoice-db.sh b/backup-invoice-db.sh new file mode 100755 index 0000000..0326231 --- /dev/null +++ b/backup-invoice-db.sh @@ -0,0 +1,38 @@ +#!/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." \ No newline at end of file