#!/usr/bin/env bash # ============================================================================= # backup-db.sh — Backup PostgreSQL from the Azure VM # ============================================================================= set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" [ -f "$SCRIPT_DIR/.env" ] && source "$SCRIPT_DIR/.env" LOC="${AZURE_LOCATION:-westeurope}" DNS="${AZURE_DNS_LABEL:-taskmanager-gs699he}" FQDN="${DNS}.${LOC}.cloudapp.azure.com" SSH_KEY="$HOME/.ssh/sk1_taskmanager" ADMIN="azureuser" BACKUP_DIR="$SCRIPT_DIR/backups" TIMESTAMP=$(date +%Y%m%d_%H%M%S) BACKUP_FILE="taskmanager_backup_${TIMESTAMP}.sql" echo "=============================================" echo " Database Backup — Task Manager" echo " Host: $FQDN" echo "=============================================" mkdir -p "$BACKUP_DIR" echo " Creating database dump..." ssh -o StrictHostKeyChecking=no -i "$SSH_KEY" "$ADMIN@$FQDN" \ "sudo docker exec taskapp-postgres pg_dump -U ${POSTGRES_USER:-taskuser} ${POSTGRES_DB:-taskmanager}" \ > "$BACKUP_DIR/$BACKUP_FILE" if [ -s "$BACKUP_DIR/$BACKUP_FILE" ]; then SIZE=$(du -h "$BACKUP_DIR/$BACKUP_FILE" | cut -f1) echo " ✓ Saved: $BACKUP_DIR/$BACKUP_FILE ($SIZE)" else echo " ✗ Backup failed" rm -f "$BACKUP_DIR/$BACKUP_FILE" exit 1 fi echo "============================================="