From 204717cd9dd6fb75f9b83d898cf7bbcb3684f4f3 Mon Sep 17 00:00:00 2001 From: marco370 <48531002-marco370@users.noreply.replit.com> Date: Fri, 17 Oct 2025 08:52:00 +0000 Subject: [PATCH] Add option to import database backup from Git during deployment Modify the deployment script to allow importing the latest database backup from the Git repository when the 'db' argument is provided. This includes handling backup decompression and database restoration. Replit-Commit-Author: Agent Replit-Commit-Session-Id: e5565357-90e1-419f-b9a8-6ee8394636df Replit-Commit-Checkpoint-Type: intermediate_checkpoint --- deploy/deploy.sh | 91 ++++++++++++++++++++++++++++++++++++------------ 1 file changed, 69 insertions(+), 22 deletions(-) diff --git a/deploy/deploy.sh b/deploy/deploy.sh index 8b8f961..083e23d 100644 --- a/deploy/deploy.sh +++ b/deploy/deploy.sh @@ -2,11 +2,21 @@ set -e # Script di deployment automatico per VigilanzaTurni -# Uso: bash deploy/deploy.sh +# Uso: +# bash deploy/deploy.sh → deployment normale +# bash deploy/deploy.sh db → deployment + importa backup database da Git APP_DIR="/var/www/vigilanza-turni" APP_NAME="vigilanza-turni" BACKUP_DIR="/var/backups/vigilanza-turni" +GIT_BACKUP_DIR="$APP_DIR/database-backups" + +# Verifica parametro per import database +IMPORT_DB=false +if [ "$1" == "db" ]; then + IMPORT_DB=true + echo "🔄 Modalità: Deployment con import database da Git" +fi echo "🚀 Deployment VigilanzaTurni - $(date)" @@ -19,35 +29,72 @@ if [ -d .git ]; then git pull origin main || true fi -# =================== BACKUP DATABASE =================== -echo "💾 Backup database pre-deployment..." -mkdir -p $BACKUP_DIR -BACKUP_FILE="$BACKUP_DIR/backup_$(date +%Y%m%d_%H%M%S).sql" - # Load env vars if [ -f .env ]; then source .env fi -# Esegui backup PostgreSQL -if command -v pg_dump &> /dev/null; then - # Controlla che le variabili siano definite - if [ -z "$PGDATABASE" ] || [ -z "$PGUSER" ]; then - echo "⚠️ Variabili DB non trovate nel .env, skip backup" +# =================== IMPORT DATABASE DA GIT (se richiesto) =================== +if [ "$IMPORT_DB" = true ]; then + echo "📦 Import database da backup Git..." + + # Trova l'ultimo backup nella directory git + LATEST_GIT_BACKUP=$(ls -t $GIT_BACKUP_DIR/*.sql.gz 2>/dev/null | head -1) + + if [ -f "$LATEST_GIT_BACKUP" ]; then + echo "📥 Trovato backup: $LATEST_GIT_BACKUP" + + # Controlla che le variabili siano definite + if [ -z "$PGDATABASE" ] || [ -z "$PGUSER" ]; then + echo "❌ Variabili DB non trovate nel .env, impossibile importare" + exit 1 + fi + + # Chiedi conferma (opzionale - rimuovi se vuoi import automatico) + echo "⚠️ ATTENZIONE: Questo sovrascriverà il database corrente!" + echo "Backup da importare: $(basename $LATEST_GIT_BACKUP)" + read -p "Continuare? (s/n): " -n 1 -r + echo + + if [[ $REPLY =~ ^[Ss]$ ]]; then + # Decomprimi e importa + echo "🔄 Importazione database in corso..." + gunzip -c "$LATEST_GIT_BACKUP" | PGPASSWORD=$PGPASSWORD psql -h ${PGHOST:-localhost} -U $PGUSER --dbname=$PGDATABASE + echo "✅ Database importato con successo da Git!" + else + echo "❌ Import annullato dall'utente" + exit 1 + fi else - PGPASSWORD=$PGPASSWORD pg_dump -h ${PGHOST:-localhost} -U $PGUSER --dbname=$PGDATABASE > $BACKUP_FILE - echo "✅ Backup salvato: $BACKUP_FILE" - - # Comprimi backup - gzip $BACKUP_FILE - echo "✅ Backup compresso: ${BACKUP_FILE}.gz" - - # Pulisci backup vecchi (> 30 giorni) - find $BACKUP_DIR -name "backup_*.sql.gz" -mtime +30 -delete - echo "🧹 Backup vecchi eliminati (retention: 30 giorni)" + echo "❌ Nessun backup trovato in $GIT_BACKUP_DIR" + exit 1 fi else - echo "⚠️ pg_dump non trovato, skip backup" + # =================== BACKUP DATABASE NORMALE =================== + echo "💾 Backup database pre-deployment..." + mkdir -p $BACKUP_DIR + BACKUP_FILE="$BACKUP_DIR/backup_$(date +%Y%m%d_%H%M%S).sql" + + # Esegui backup PostgreSQL + if command -v pg_dump &> /dev/null; then + # Controlla che le variabili siano definite + if [ -z "$PGDATABASE" ] || [ -z "$PGUSER" ]; then + echo "⚠️ Variabili DB non trovate nel .env, skip backup" + else + PGPASSWORD=$PGPASSWORD pg_dump -h ${PGHOST:-localhost} -U $PGUSER --dbname=$PGDATABASE > $BACKUP_FILE + echo "✅ Backup salvato: $BACKUP_FILE" + + # Comprimi backup + gzip $BACKUP_FILE + echo "✅ Backup compresso: ${BACKUP_FILE}.gz" + + # Pulisci backup vecchi (> 30 giorni) + find $BACKUP_DIR -name "backup_*.sql.gz" -mtime +30 -delete + echo "🧹 Backup vecchi eliminati (retention: 30 giorni)" + fi + else + echo "⚠️ pg_dump non trovato, skip backup" + fi fi # =================== BUILD & DEPLOY ===================