74 lines
1.9 KiB
Bash
74 lines
1.9 KiB
Bash
#!/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"
|