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 ===================