#!/bin/bash # Backup PostgreSQL databases → Google Drive (BD) set -e DATE=$(date +%Y%m%d_%H%M%S) BACKUP_DIR="/tmp/backup-bd" DEST="gdrive:BD" echo "[$(date)] Backup BD started" # Cleanup old temp rm -rf "$BACKUP_DIR" mkdir -p "$BACKUP_DIR" # Find Supabase DB container SUPA_CONTAINER=$(docker ps --filter "name=supabase-db" --format "{{.Names}}" | head -n 1) if [ -n "$SUPA_CONTAINER" ]; then echo "Supabase DB found: $SUPA_CONTAINER" # Get schemas excluding system ones SCHEMAS=$(docker exec "$SUPA_CONTAINER" psql -U postgres -d postgres -t -c "SELECT schema_name FROM information_schema.schemata WHERE schema_name NOT LIKE 'pg_%' AND schema_name NOT LIKE '\_%' AND schema_name != 'information_schema';" 2>/dev/null || echo "") for SCHEMA in $SCHEMAS; do SCHEMA=$(echo "$SCHEMA" | xargs) if [ -n "$SCHEMA" ]; then echo "Backing up schema: $SCHEMA" docker exec "$SUPA_CONTAINER" pg_dump -U postgres -d postgres -n "$SCHEMA" > "$BACKUP_DIR/schema-${SCHEMA}.sql" 2>/dev/null || true tar -czf "$BACKUP_DIR/supabase-${SCHEMA}-$DATE.tar.gz" -C "$BACKUP_DIR" "schema-${SCHEMA}.sql" 2>/dev/null || true rm -f "$BACKUP_DIR/schema-${SCHEMA}.sql" fi done else echo "Supabase DB not found, skipping" fi # Gitea DB backup GITEA_DB_CONTAINER=$(docker ps --filter "name=coolify-db" --format "{{.Names}}" | head -n 1) if [ -n "$GITEA_DB_CONTAINER" ]; then docker exec "$GITEA_DB_CONTAINER" pg_dump -U postgres postgres > "$BACKUP_DIR/gitea-db.sql" 2>/dev/null || true if [ -s "$BACKUP_DIR/gitea-db.sql" ]; then tar -czf "$BACKUP_DIR/gitea-db-$DATE.tar.gz" -C "$BACKUP_DIR" "gitea-db.sql" 2>/dev/null || true fi rm -f "$BACKUP_DIR/gitea-db.sql" else echo "Gitea DB (Postgres) not found, skipping" fi # Sync to Google Drive rclone copy "$BACKUP_DIR" "$DEST" --progress # Keep only last 7 days in GDrive rclone delete "$DEST" --min-age 7d # Cleanup local rm -rf "$BACKUP_DIR" echo "[$(date)] Backup BD finished"