VigilanzaTurni/deploy/deploy.sh
marco370 7c9ba798ed Update deployment script to use npm commands for builds
Modify deploy.sh to utilize `npm run build` and `npm run db:push` for frontend builds and database migrations, and simplify PM2 process management.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 42d8028a-fa71-4ec2-938c-e43eedf7df01
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/6d543d2c-20b9-4ea6-93fe-70fe9b1d9f80/42d8028a-fa71-4ec2-938c-e43eedf7df01/AwjfjCW
2025-10-16 15:38:12 +00:00

130 lines
3.8 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
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"
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
# =================== 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 || echo "⚠️ Schema push skipped (database già aggiornato)"
# NOTA: NON facciamo npm prune perché Vite serve a runtime per il middleware
# Il server Express usa Vite per servire il frontend anche in produzione
# =================== RESTART APPLICATION ===================
# Trova PM2 (potrebbe essere in vari percorsi)
PM2_CMD=$(which pm2 2>/dev/null || echo "/usr/local/bin/pm2")
if [ ! -x "$PM2_CMD" ]; then
PM2_CMD="/usr/bin/pm2"
fi
if [ ! -x "$PM2_CMD" ]; then
PM2_CMD="$(npm root -g)/pm2/bin/pm2"
fi
echo "🔍 Usando PM2: $PM2_CMD"
# Carica variabili .env per PM2
if [ -f .env ]; then
source .env
export DATABASE_URL PGDATABASE PGUSER PGPASSWORD PGHOST PGPORT SESSION_SECRET NODE_ENV PORT
fi
# Restart applicazione con PM2
echo "🔄 Restart applicazione..."
if $PM2_CMD show $APP_NAME > /dev/null 2>&1; then
$PM2_CMD delete $APP_NAME
fi
# Start con comando diretto (più affidabile)
$PM2_CMD start npm --name $APP_NAME -- start
$PM2_CMD save
# Health check
echo "🏥 Health check..."
sleep 5
if $PM2_CMD show $APP_NAME | grep -q "online"; then
echo "✅ Deployment completato con successo!"
$PM2_CMD logs $APP_NAME --lines 20 --nostream
else
echo "❌ Errore: applicazione non online"
$PM2_CMD 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:-localhost} -U $PGUSER --dbname=$PGDATABASE
echo "✅ Database ripristinato"
fi
exit 1
fi
# =================== STATUS ===================
echo ""
echo "📊 Status PM2:"
$PM2_CMD 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"