#!/bin/bash set -e BACKUP_DIR="/tmp/unms-backup-$(date +%Y%m%d_%H%M%S)" BUCKET="itpropartner-backups" AWS_ENDPOINT="https://s3.us-east-1.wasabisys.com" DATE=$(date +%Y-%m-%d) mkdir -p "$BACKUP_DIR" echo "=== UISP/UNMS Backup — $(date) ===" # 1. Dump PostgreSQL database(s) echo "→ Dumping PostgreSQL databases..." mkdir -p "$BACKUP_DIR/postgres" # Get list of databases from the running container DB_NAMES=$(docker exec unms-postgres psql -U postgres -t -c "SELECT datname FROM pg_database WHERE datistemplate = false;" 2>/dev/null | grep -v '^\s*$' | tr -d ' ') for DB in $DB_NAMES; do echo " Dumping: $DB" docker exec unms-postgres pg_dump -U postgres -d "$DB" --format=custom \ 2>/dev/null > "$BACKUP_DIR/postgres/${DB}.dump" || \ docker exec unms-postgres pg_dump -U postgres -d "$DB" --format=custom \ > "$BACKUP_DIR/postgres/${DB}.dump" 2>/dev/null || \ echo " WARN: Could not dump $DB (may not exist anymore)" done # Also dump the entire Postgres cluster for completeness echo " Dumping all globals..." docker exec unms-postgres pg_dumpall -U postgres -g 2>/dev/null > "$BACKUP_DIR/postgres/globals.sql" # 2. Copy Docker compose and config echo "→ Copying Docker compose & config..." mkdir -p "$BACKUP_DIR/unms-app" cp -a /home/unms/app/docker-compose.yml "$BACKUP_DIR/unms-app/" 2>/dev/null || true cp -a /home/unms/app/unms.conf "$BACKUP_DIR/unms-app/" 2>/dev/null || true cp -a /home/unms/app/metadata "$BACKUP_DIR/unms-app/" 2>/dev/null || true # 3. Copy data directory (postgres data etc.) echo "→ Copying data directory (this may take a while)..." mkdir -p "$BACKUP_DIR/data" rsync -a --relative /home/unms/data/./ "$BACKUP_DIR/data/" 2>/dev/null || \ cp -a /home/unms/data "$BACKUP_DIR/" 2>/dev/null || true # 4. Save Docker image info for version pinning echo "→ Saving container image versions..." docker ps --format '{{.Image}}' | sort -u > "$BACKUP_DIR/images.txt" # 5. Tar it all up echo "→ Creating archive..." ARCHIVE="/tmp/unms-full-backup-${DATE}.tar.gz" cd /tmp tar czf "$ARCHIVE" -C "$BACKUP_DIR" . 2>/dev/null # 6. Upload to Wasabi S3 echo "→ Uploading to Wasabi S3..." aws s3 cp "$ARCHIVE" "s3://${BUCKET}/uisp/${DATE}/" \ --endpoint-url "$AWS_ENDPOINT" 2>&1 # 7. Cleanup echo "→ Cleaning up..." rm -rf "$BACKUP_DIR" rm -f "$ARCHIVE" echo "=== Backup complete ===" echo "Bucket: ${BUCKET}/uisp/${DATE}/"