67 lines
2.3 KiB
Bash
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}/"
|