diff --git a/deploy/deploy.sh b/deploy/deploy.sh index 5fc4b33..adbd43e 100644 --- a/deploy/deploy.sh +++ b/deploy/deploy.sh @@ -1,134 +1 @@ -#!/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..." -npx drizzle-kit push --force || 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 - -# Usa ecosystem.config.js se esiste, altrimenti comando diretto -if [ -f ecosystem.config.js ]; then - $PM2_CMD start ecosystem.config.js -else - $PM2_CMD start npm --name $APP_NAME -- start -fi -$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" +git commit -m "Fix deployment: PM2 env vars + drizzle-kit npx" \ No newline at end of file