Update deploy scripts to include database backup and restore functionality, configure Nginx for vt.alfacom.it, and modify server setup to use the provided database password. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 42d8028a-fa71-4ec2-938c-e43eedf7df01 Replit-Commit-Checkpoint-Type: intermediate_checkpoint
109 lines
3.0 KiB
Bash
109 lines
3.0 KiB
Bash
#!/bin/bash
|
|
set -e
|
|
|
|
# Script di deployment automatico per VigilanzaTurni
|
|
# Uso: bash deploy/deploy.sh
|
|
|
|
APP_DIR="/var/www/vigilanza-turni"
|
|
APP_NAME="vigilanza-turni"
|
|
BACKUP_DIR="/var/backups/vigilanza-turni"
|
|
|
|
echo "🚀 Deployment VigilanzaTurni - $(date)"
|
|
|
|
# Vai alla directory applicazione
|
|
cd $APP_DIR
|
|
|
|
# Pull ultime modifiche (se eseguito manualmente)
|
|
if [ -d .git ]; then
|
|
echo "📥 Pull ultime modifiche da GitLab..."
|
|
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
|
|
export $(cat .env | grep -v '^#' | xargs)
|
|
fi
|
|
|
|
# Esegui backup PostgreSQL
|
|
if command -v pg_dump &> /dev/null; then
|
|
PGPASSWORD=$PGPASSWORD pg_dump -h $PGHOST -U $PGUSER -d $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)"
|
|
else
|
|
echo "⚠️ pg_dump non trovato, skip backup"
|
|
fi
|
|
|
|
# =================== BUILD & DEPLOY ===================
|
|
# Installa TUTTE le dipendenze (serve per build e migrations)
|
|
echo "📥 Installazione dipendenze (include devDependencies)..."
|
|
npm ci
|
|
|
|
# Build frontend
|
|
echo "🏗️ Build frontend Vite..."
|
|
export NODE_ENV=production
|
|
npm run build
|
|
|
|
# Database migrations (serve Drizzle che è devDependency)
|
|
echo "🗄️ Verifica database schema..."
|
|
npm run db:push || true
|
|
|
|
# Rimuovi devDependencies dopo build e migrations
|
|
echo "🧹 Pulizia devDependencies (mantiene solo production)..."
|
|
npm prune --production
|
|
|
|
# =================== RESTART APPLICATION ===================
|
|
# Restart applicazione con PM2
|
|
echo "🔄 Restart applicazione..."
|
|
if pm2 show $APP_NAME > /dev/null 2>&1; then
|
|
pm2 reload $APP_NAME --update-env
|
|
else
|
|
pm2 start npm --name $APP_NAME -- start
|
|
pm2 save
|
|
fi
|
|
|
|
# Health check
|
|
echo "🏥 Health check..."
|
|
sleep 5
|
|
if pm2 show $APP_NAME | grep -q "online"; then
|
|
echo "✅ Deployment completato con successo!"
|
|
pm2 logs $APP_NAME --lines 20 --nostream
|
|
else
|
|
echo "❌ Errore: applicazione non online"
|
|
pm2 logs $APP_NAME --lines 50 --nostream
|
|
|
|
# Rollback: ripristina ultimo backup
|
|
echo "🔄 Tentativo rollback backup..."
|
|
LATEST_BACKUP=$(ls -t $BACKUP_DIR/backup_*.sql.gz 2>/dev/null | head -1)
|
|
if [ -f "$LATEST_BACKUP" ]; then
|
|
echo "📦 Ripristino da: $LATEST_BACKUP"
|
|
gunzip -c $LATEST_BACKUP | PGPASSWORD=$PGPASSWORD psql -h $PGHOST -U $PGUSER -d $PGDATABASE
|
|
echo "✅ Database ripristinato"
|
|
fi
|
|
|
|
exit 1
|
|
fi
|
|
|
|
# =================== STATUS ===================
|
|
echo ""
|
|
echo "📊 Status PM2:"
|
|
pm2 status
|
|
|
|
echo ""
|
|
echo "📈 Ultimi backup disponibili:"
|
|
ls -lht $BACKUP_DIR/*.gz 2>/dev/null | head -5 || echo "Nessun backup trovato"
|
|
|
|
echo ""
|
|
echo "🌐 Applicazione disponibile su: https://vt.alfacom.it"
|