download-storage.mjs importa storage-core.ts, che node non può caricare senza un loader TS; bun lo supporta nativamente ed è già una dipendenza del progetto. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
51 lines
1.7 KiB
Bash
Executable File
51 lines
1.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Backup completo di disaster recovery: schema + dati DB, utenti auth, file storage.
|
|
# Uso:
|
|
# ./backups/backup.sh crea backups/YYYYMMDD_HHMM/, comprime e cifra con gpg (chiede una passphrase)
|
|
# ./backups/backup.sh --no-encrypt come sopra ma lascia solo il tar.gz in chiaro
|
|
#
|
|
# Richiede: essere già collegati al progetto Supabase (supabase login + link, già fatto
|
|
# in questo repo), avere .env con VITE_SUPABASE_URL e SUPABASE_SERVICE_ROLE_KEY, e bun
|
|
# installato (esegue download-storage.mjs, che importa un modulo .ts).
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
STAMP="$(date +%Y%m%d_%H%M)"
|
|
RUN_DIR="$SCRIPT_DIR/$STAMP"
|
|
|
|
mkdir -p "$RUN_DIR"
|
|
echo "==> Backup in $RUN_DIR"
|
|
|
|
echo "==> Dump schema pubblico"
|
|
npx supabase db dump --linked -f "$RUN_DIR/schema_public.sql"
|
|
|
|
echo "==> Dump dati pubblici"
|
|
npx supabase db dump --linked --data-only -f "$RUN_DIR/data_public.sql"
|
|
|
|
echo "==> Dump schema auth"
|
|
npx supabase db dump --linked --schema auth -f "$RUN_DIR/schema_auth.sql"
|
|
|
|
echo "==> Dump dati auth (utenti)"
|
|
npx supabase db dump --linked --schema auth --data-only -f "$RUN_DIR/data_auth.sql"
|
|
|
|
echo "==> Download file storage (bucket)"
|
|
bun "$SCRIPT_DIR/download-storage.mjs" "$RUN_DIR/storage"
|
|
|
|
echo "==> Backup completato: $RUN_DIR"
|
|
|
|
TARBALL="$RUN_DIR.tar.gz"
|
|
echo "==> Comprimo in $TARBALL"
|
|
tar -C "$SCRIPT_DIR" -czf "$TARBALL" "$STAMP"
|
|
|
|
if [[ "${1:-}" == "--no-encrypt" ]]; then
|
|
echo "==> Archivio pronto: $TARBALL"
|
|
else
|
|
ARCHIVE="$TARBALL.gpg"
|
|
echo "==> Cifro in $ARCHIVE (verrà chiesta una passphrase)"
|
|
gpg --symmetric --cipher-algo AES256 -o "$ARCHIVE" "$TARBALL"
|
|
rm -rf "$RUN_DIR" "$TARBALL"
|
|
echo "==> Archivio cifrato pronto: $ARCHIVE"
|
|
echo " Per estrarlo: gpg -d $ARCHIVE | tar xz"
|
|
fi
|