#!/bin/bash # database/scripts/backup.sh set -e # ============================================================================ # CONFIGURATION # ============================================================================ CONTAINER_NAME="${CONTAINER_NAME:-aurganize-postgres}" # Host directory (on your laptop / machine) BACKUP_DIR="${BACKUP_DIR:-$HOME/workspace/db_backup/aurganize_backups}" DB_NAME="${DB_NAME:-aurganize_dev}" DB_USER="${DB_USER:-aurganize_backend_api}" RETENTION_DAYS="${RETENTION_DAYS:-30}" # Ensure host backup directory exists mkdir -p "${BACKUP_DIR}" # Timestamped filename on host TIMESTAMP=$(date +"%Y%m%d_%H%M%S") BACKUP_FILE="${BACKUP_DIR}/${DB_NAME}_${TIMESTAMP}.sql.gz" echo "===================================================================" echo "PostgreSQL Backup (Docker) - $(date)" echo "===================================================================" echo "Container: ${CONTAINER_NAME}" echo "Database : ${DB_NAME}" echo "Backup : ${BACKUP_FILE}" echo "" # ============================================================================ # BACKUP EXECUTION # ============================================================================ echo "Creating backup inside Docker container..." docker exec -i "${CONTAINER_NAME}" \ pg_dump -U "${DB_USER}" -d "${DB_NAME}" --format=plain --no-owner --no-privileges \ | gzip > "${BACKUP_FILE}" # ============================================================================ # VERIFY BACKUP # ============================================================================ if [ -f "${BACKUP_FILE}" ]; then SIZE=$(du -h "${BACKUP_FILE}" | cut -f1) echo "✓ Backup created successfully (${SIZE})" else echo "✗ Backup failed!" exit 1 fi # ============================================================================ # CLEANUP OLD BACKUPS # ============================================================================ echo "" echo "Cleaning up old backups (older than ${RETENTION_DAYS} days)..." find "${BACKUP_DIR}" -name "${DB_NAME}_*.sql.gz" -type f -mtime +${RETENTION_DAYS} -delete # ============================================================================ # LIST BACKUPS # ============================================================================ echo "" echo "Available backups:" ls -lh "${BACKUP_DIR}/${DB_NAME}"_*.sql.gz 2>/dev/null || echo "No backups found." echo "" echo "===================================================================" echo "Backup Complete!" echo "==================================================================="