58 lines
2.0 KiB
Bash
Executable File
58 lines
2.0 KiB
Bash
Executable File
#!/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"
|