Files
BrainKP/scripts/backup-bd.sh
T

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"