← 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