Files
hermes-recovery/scripts/backup-uisp.sh
T

67 lines
2.3 KiB
Bash

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