#!/bin/bash set -e # ============================================================= # PasteVault - backup.sh # Dumps the PostgreSQL database and uploads to Azure Blob Storage. # # Prerequisites: # - postgresql-client installed (sudo apt install postgresql-client) # - Azure CLI installed and logged in # - .env file present with DB_PASS set # # Usage: # cd sk1/ # bash scripts/backup.sh # ============================================================= source .env DB_HOST="pastevault-db.postgres.database.azure.com" DB_USER="pvadmin" DB_NAME="pastevault" STORAGE_ACCOUNT="pastevaultstorage" CONTAINER="backups" TIMESTAMP=$(date +%Y%m%d_%H%M%S) BACKUP_FILE="pastevault_backup_${TIMESTAMP}.sql" TMP_PATH="/tmp/$BACKUP_FILE" echo "🔄 PasteVault Backup — $TIMESTAMP" echo "" # Check pg_dump is available if ! command -v pg_dump &> /dev/null; then echo "Installing postgresql-client..." sudo apt-get install -y postgresql-client -qq fi # Dump the database echo "1/2 — Dumping PostgreSQL database..." PGPASSWORD="$DB_PASS" pg_dump \ --host=$DB_HOST \ --username=$DB_USER \ --dbname=$DB_NAME \ --no-password \ --clean \ --if-exists \ --file=$TMP_PATH \ --sslmode=require echo " ✅ Dump complete: $BACKUP_FILE ($(du -sh $TMP_PATH | cut -f1))" # Upload to Azure Blob Storage echo "" echo "2/2 — Uploading to Azure Blob Storage..." az storage blob upload \ --account-name $STORAGE_ACCOUNT \ --container-name $CONTAINER \ --name $BACKUP_FILE \ --file $TMP_PATH \ --overwrite \ --output none rm $TMP_PATH echo " ✅ Upload complete" echo "" echo "✅ Backup saved: $BACKUP_FILE" echo "" echo " List all backups:" echo " az storage blob list --account-name $STORAGE_ACCOUNT --container-name $CONTAINER -o table" echo "" echo " Download a backup:" echo " az storage blob download --account-name $STORAGE_ACCOUNT --container-name $CONTAINER --name $BACKUP_FILE --file ./restore.sql"