zkt26/sk1/backup-db.sh

41 lines
1.3 KiB
Bash
Executable File

#!/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 "============================================="