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
This commit is contained in:
parent
ab7b3c7f90
commit
204717cd9d
@ -2,11 +2,21 @@
|
|||||||
set -e
|
set -e
|
||||||
|
|
||||||
# Script di deployment automatico per VigilanzaTurni
|
# 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_DIR="/var/www/vigilanza-turni"
|
||||||
APP_NAME="vigilanza-turni"
|
APP_NAME="vigilanza-turni"
|
||||||
BACKUP_DIR="/var/backups/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)"
|
echo "🚀 Deployment VigilanzaTurni - $(date)"
|
||||||
|
|
||||||
@ -19,35 +29,72 @@ if [ -d .git ]; then
|
|||||||
git pull origin main || true
|
git pull origin main || true
|
||||||
fi
|
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
|
# Load env vars
|
||||||
if [ -f .env ]; then
|
if [ -f .env ]; then
|
||||||
source .env
|
source .env
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Esegui backup PostgreSQL
|
# =================== IMPORT DATABASE DA GIT (se richiesto) ===================
|
||||||
if command -v pg_dump &> /dev/null; then
|
if [ "$IMPORT_DB" = true ]; then
|
||||||
# Controlla che le variabili siano definite
|
echo "📦 Import database da backup Git..."
|
||||||
if [ -z "$PGDATABASE" ] || [ -z "$PGUSER" ]; then
|
|
||||||
echo "⚠️ Variabili DB non trovate nel .env, skip backup"
|
# 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
|
else
|
||||||
PGPASSWORD=$PGPASSWORD pg_dump -h ${PGHOST:-localhost} -U $PGUSER --dbname=$PGDATABASE > $BACKUP_FILE
|
echo "❌ Nessun backup trovato in $GIT_BACKUP_DIR"
|
||||||
echo "✅ Backup salvato: $BACKUP_FILE"
|
exit 1
|
||||||
|
|
||||||
# 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
|
fi
|
||||||
else
|
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
|
fi
|
||||||
|
|
||||||
# =================== BUILD & DEPLOY ===================
|
# =================== BUILD & DEPLOY ===================
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user