33800 Docs

← Retour
#!/bin/bash # Dump PostgreSQL Supabase vers O2switch # Cron: 0 */6 * * * (toutes les 6h) set -e LOG="/var/log/o2switch-sync.log" O2_HOST="o2switch" O2_PATH="backup/postgres" TIMESTAMP=$(date '+%Y%m%d_%H%M') PROD_HOST="gouroubleu@192.168.1.12" TMP_FILE="/tmp/supabase_$TIMESTAMP.sql.gz" echo "[$(date '+%Y-%m-%d %H:%M:%S')] Starting PostgreSQL backup..." >> $LOG # Dump depuis prod-portainer (container supabase-db-prod) ssh $PROD_HOST "docker exec supabase-db-prod pg_dump -U postgres postgres" | gzip > $TMP_FILE # Vérifier que le dump n'est pas vide if [ ! -s "$TMP_FILE" ]; then echo "[$(date '+%Y-%m-%d %H:%M:%S')] ERROR: Empty dump file" >> $LOG rm -f $TMP_FILE exit 1 fi # Upload vers O2switch scp -q $TMP_FILE $O2_HOST:~/$O2_PATH/ # Cleanup local rm -f $TMP_FILE # Garder 14 derniers dumps sur O2switch (3.5 jours à 6h) ssh $O2_HOST "cd ~/$O2_PATH && ls -t *.gz 2>/dev/null | tail -n +15 | xargs -r rm" SIZE=$(ssh $O2_HOST "ls -lh ~/$O2_PATH/supabase_$TIMESTAMP.sql.gz | awk '{print \$5}'") echo "[$(date '+%Y-%m-%d %H:%M:%S')] PostgreSQL backup done: supabase_$TIMESTAMP.sql.gz ($SIZE)" >> $LOG