#!/bin/sh # Database Backup Script for SEEN # Runs daily automated backups with retention policy set -e # Configuration BACKUP_DIR="/backups" TIMESTAMP=$(date +%Y%m%d_%H%M%S) BACKUP_FILE="${BACKUP_DIR}/seen_backup_${TIMESTAMP}.sql.gz" RETENTION_DAYS=${BACKUP_RETENTION_DAYS:-7} # Create backup directory if it doesn't exist mkdir -p "${BACKUP_DIR}" echo "[$(date)] Starting database backup..." # Perform backup PGPASSWORD="${POSTGRES_PASSWORD}" pg_dump \ -h "${POSTGRES_HOST}" \ -U "${POSTGRES_USER}" \ -d "${POSTGRES_DB}" \ --format=plain \ --no-owner \ --no-acl \ | gzip > "${BACKUP_FILE}" # Check if backup was successful if [ $? -eq 0 ]; then BACKUP_SIZE=$(du -h "${BACKUP_FILE}" | cut -f1) echo "[$(date)] Backup completed successfully: ${BACKUP_FILE} (${BACKUP_SIZE})" else echo "[$(date)] ERROR: Backup failed!" exit 1 fi # Clean up old backups echo "[$(date)] Cleaning up backups older than ${RETENTION_DAYS} days..." find "${BACKUP_DIR}" -name "seen_backup_*.sql.gz" -type f -mtime +${RETENTION_DAYS} -delete # List current backups echo "[$(date)] Current backups:" ls -lh "${BACKUP_DIR}"/seen_backup_*.sql.gz 2>/dev/null || echo "No backups found" echo "[$(date)] Backup process completed"