41 lines
1.3 KiB
Bash
Executable File
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 "============================================="
|