diff --git a/DEPLOYMENT.md b/DEPLOYMENT.md index 9f71c73..a8d3ab8 100644 --- a/DEPLOYMENT.md +++ b/DEPLOYMENT.md @@ -1,209 +1,115 @@ -# πŸš€ Guida Deployment VigilanzaTurni +# πŸ“˜ Deployment Guide - VigilanzaTurni -Deployment automatico da Replit β†’ GitLab β†’ Server AlmaLinux 9 +Guida completa deployment sistema VigilanzaTurni su vt.alfacom.it + +--- ## πŸ“‹ Indice -1. [Prerequisiti](#prerequisiti) -2. [Setup Iniziale Server](#setup-iniziale-server) -3. [Configurazione GitLab](#configurazione-gitlab) -4. [Configurazione Replit](#configurazione-replit) -5. [Primo Deployment](#primo-deployment) -6. [Deployment Automatico](#deployment-automatico) -7. [Manutenzione](#manutenzione) -8. [Troubleshooting](#troubleshooting) +1. [Overview](#overview) +2. [Prerequisiti](#prerequisiti) +3. [Setup Iniziale](#setup-iniziale) +4. [Configurazione](#configurazione) +5. [Deployment](#deployment) +6. [Manutenzione](#manutenzione) +7. [Troubleshooting](#troubleshooting) --- -## 1. Prerequisiti +## Overview -### Server AlmaLinux 9 -- Server con accesso root/sudo -- Almeno 2GB RAM -- 20GB storage -- Indirizzo IP pubblico -- Dominio configurato (es. vigilanza.tuodominio.it) +**Architettura Deployment:** +``` +Replit/Local Dev + ↓ (git push) +GitLab Repository + ↓ (manual deploy) +AlmaLinux 9 Server + ↓ +https://vt.alfacom.it (Production) +``` -### Account e Accessi -- Account GitLab su git.alfacom.it -- SSH access al server -- Replit account con questo progetto +**Stack Produzione:** +- OS: AlmaLinux 9 +- Runtime: Node.js 20 +- Database: PostgreSQL 15 +- Process Manager: PM2 +- Web Server: Nginx (reverse proxy) +- SSL: Let's Encrypt (Certbot) --- -## 2. Setup Iniziale Server +## Prerequisiti -### 2.1 Connessione al Server +### Server Requirements +- AlmaLinux 9 (fresh install) +- Min 2GB RAM, 20GB disk +- Accesso root SSH +- Dominio: vt.alfacom.it (DNS configurato) + +### Locale Requirements +- Git installato +- SSH key configurata +- Accesso repository GitLab + +--- + +## Setup Iniziale + +### 1. Preparazione Server ```bash -ssh root@ip-del-tuo-server +# SSH nel server +ssh root@vt.alfacom.it + +# Clone repository +cd /var/www +git clone https://git.alfacom.it/marco/VigilanzaTurni.git vigilanza-turni +cd vigilanza-turni + +# Esegui setup automatico +sudo bash deploy/setup-server.sh ``` -### 2.2 Esecuzione Script Setup +Lo script `setup-server.sh` installa automaticamente: -```bash -# Download script setup -curl -o setup-server.sh https://git.alfacom.it/marco/VigilanzaTurni/-/raw/main/deploy/setup-server.sh +βœ… **Node.js 20** +- Runtime JavaScript/TypeScript +- npm package manager -# Rendi eseguibile -chmod +x setup-server.sh - -# Esegui setup -sudo bash setup-server.sh -``` - -Lo script installerΓ : -- βœ… Node.js 20 LTS -- βœ… PostgreSQL 15 -- βœ… PM2 (process manager) -- βœ… Nginx (reverse proxy) -- βœ… Git -- βœ… Firewall configurato -- βœ… Certbot (per SSL) - -### 2.3 Configurazione Database - -Lo script crea automaticamente: -- Database: `vigilanza_turni` +βœ… **PostgreSQL 15** +- Database relazionale - User: `vigilanza_user` -- Password: **Generata automaticamente** (mostrata a fine setup) +- Password: `553da84c94093919d46055d6ec37dfa2a03d0f46` +- Database: `vigilanza_turni` -⚠️ **IMPORTANTE**: Salva la password mostrata al termine del setup! +βœ… **PM2** +- Process manager Node.js +- Auto-restart on crash +- Log management +- Startup script + +βœ… **Nginx** +- Reverse proxy +- SSL termination +- Static files serving +- Gzip compression + +βœ… **Git** +- Version control + +βœ… **Firewall** +- HTTP (80) aperto +- HTTPS (443) aperto + +βœ… **Certbot** +- Let's Encrypt SSL certificates + +### 2. Configurazione Nginx ```bash -# La password Γ¨ salvata anche in: -cat /root/.vigilanza_db_password - -# Se persa, puoi cambiarla con: -sudo -u postgres psql -ALTER USER vigilanza_user WITH PASSWORD 'NuovaPasswordSicura123!'; -\q -``` - -### 2.4 Configurazione SSL - -```bash -# Sostituisci tuodominio.it con il tuo dominio -sudo certbot --nginx -d vigilanza.tuodominio.it -``` - -Certbot configurerΓ  automaticamente: -- Certificato SSL Let's Encrypt -- Redirect HTTP β†’ HTTPS -- Auto-rinnovo certificato - ---- - -## 3. Configurazione GitLab - -### 3.1 Variabili CI/CD - -Vai su GitLab: **Settings β†’ CI/CD β†’ Variables** - -Aggiungi queste variabili: - -| Variabile | Valore | Protected | Masked | -|-----------|--------|-----------|--------| -| `SSH_PRIVATE_KEY` | La tua chiave SSH privata | βœ… | βœ… | -| `DEPLOY_HOST` | IP o hostname del server | βœ… | ❌ | -| `DEPLOY_USER` | `root` o utente deploy | βœ… | ❌ | -| `DEPLOY_DOMAIN` | `vigilanza.tuodominio.it` | βœ… | ❌ | - -#### Generare SSH Key - -```bash -# Sul tuo computer locale -ssh-keygen -t ed25519 -C "gitlab-deploy" -f ~/.ssh/gitlab-deploy - -# Copia chiave pubblica sul server -ssh-copy-id -i ~/.ssh/gitlab-deploy.pub root@ip-del-server - -# Copia chiave privata (contenuto completo) -cat ~/.ssh/gitlab-deploy -# Copia output e incolla in GitLab come SSH_PRIVATE_KEY -``` - -### 3.2 Abilitare GitLab Runner - -Assicurati che il progetto abbia accesso a un Runner GitLab: -- Vai su **Settings β†’ CI/CD β†’ Runners** -- Abilita un Shared Runner o configura un Specific Runner - ---- - -## 4. Configurazione Replit - -### 4.1 Configurare Git Remote - -```bash -# In Replit Shell -git remote add production https://git.alfacom.it/marco/VigilanzaTurni.git - -# Verifica -git remote -v -``` - -### 4.2 Autenticazione GitLab - -Crea Personal Access Token su GitLab: -1. GitLab β†’ **User Settings β†’ Access Tokens** -2. Nome: `Replit Deploy` -3. Scopes: `write_repository` -4. Copia il token - -In Replit, salva token nei Secrets: -```bash -# Secrets β†’ Add new secret -Name: GITLAB_TOKEN -Value: -``` - -### 4.3 Script Push Automatico - -Crea file `push-to-gitlab.sh` in Replit: - -```bash -#!/bin/bash -git add . -git commit -m "Deploy: $(date '+%Y-%m-%d %H:%M:%S')" -git push production main -``` - ---- - -## 5. Primo Deployment - -### 5.1 Configurazione .env Produzione - -Sul server: - -```bash -cd /var/www/vigilanza-turni -cp .env.production.example .env -nano .env -``` - -Configura usando la password PostgreSQL generata durante setup: - -```bash -# Recupera password DB -DB_PASS=$(grep PGPASSWORD /root/.vigilanza_db_password | cut -d= -f2) - -# Configura .env -DATABASE_URL=postgresql://vigilanza_user:${DB_PASS}@localhost:5432/vigilanza_turni -SESSION_SECRET=$(openssl rand -base64 32) -REPLIT_DOMAINS=vigilanza.tuodominio.it -``` - -### 5.2 Configurazione Nginx - -```bash -# Copia configurazione Nginx -sudo cp /var/www/vigilanza-turni/deploy/nginx.conf /etc/nginx/conf.d/vigilanza-turni.conf - -# Modifica con il tuo dominio -sudo nano /etc/nginx/conf.d/vigilanza-turni.conf -# Sostituisci "tuodominio.it" con il tuo dominio +# Copia configurazione +sudo cp deploy/nginx.conf /etc/nginx/conf.d/vigilanza-turni.conf # Test configurazione sudo nginx -t @@ -212,210 +118,396 @@ sudo nginx -t sudo systemctl reload nginx ``` -### 5.3 Clone Repository Iniziale +### 3. SSL Certificate + +```bash +# Ottieni certificato Let's Encrypt +sudo certbot --nginx -d vt.alfacom.it + +# Auto-renewal (crontab) +sudo certbot renew --dry-run +``` + +### 4. Configurazione Ambiente ```bash cd /var/www/vigilanza-turni -git clone https://git.alfacom.it/marco/VigilanzaTurni.git . + +# Copia template +cp .env.production.example .env + +# Edita .env +nano .env ``` -### 5.4 Primo Deploy Manuale +**File .env completo:** ```bash -bash deploy/deploy.sh -``` +# Database +DATABASE_URL=postgresql://vigilanza_user:553da84c94093919d46055d6ec37dfa2a03d0f46@localhost:5432/vigilanza_turni +PGHOST=localhost +PGPORT=5432 +PGDATABASE=vigilanza_turni +PGUSER=vigilanza_user +PGPASSWORD=553da84c94093919d46055d6ec37dfa2a03d0f46 -Verifica: -```bash -pm2 status -pm2 logs vigilanza-turni +# Session (genera nuovo) +SESSION_SECRET=$(openssl rand -base64 32) + +# Application +NODE_ENV=production +PORT=5000 +APP_URL=https://vt.alfacom.it + +# Backup +BACKUP_ENABLED=true +BACKUP_DIR=/var/backups/vigilanza-turni +BACKUP_RETENTION_DAYS=30 + +# Logging +LOG_LEVEL=info ``` --- -## 6. Deployment Automatico +## Deployment -### 6.1 Push da Replit +### Workflow Semplificato (2 comandi) + +#### 1. Push da Replit/Local ```bash -# In Replit Shell -bash push-to-gitlab.sh +./push-to-gitlab.sh ``` -### 6.2 Trigger Pipeline GitLab +Questo script: +- Mostra modifiche da committare +- Chiede conferma +- Esegue git add + commit + push +- Mostra istruzioni deployment -1. Vai su GitLab β†’ **CI/CD β†’ Pipelines** -2. La pipeline parte automaticamente -3. Clicca su `deploy_production` quando vuoi deployare -4. Il deploy avviene in ~3-5 minuti +#### 2. Deploy su Server -### 6.3 Flusso Automatico - -```mermaid -Replit β†’ Git Push β†’ GitLab β†’ CI/CD Pipeline β†’ Deploy Server +```bash +ssh root@vt.alfacom.it "cd /var/www/vigilanza-turni && bash deploy/deploy.sh" ``` -**Stages:** -1. πŸ—οΈ **Build** - Compila TypeScript e Vite -2. πŸ§ͺ **Test** - Esegue linting -3. πŸš€ **Deploy** - Deployment su server (manuale) +Lo script `deploy.sh` esegue automaticamente: + +1. **Backup Database Pre-Deploy** + - Dump PostgreSQL completo + - Compressione gzip + - Salvataggio in `/var/backups/vigilanza-turni/` + - Pulizia backup > 30 giorni + +2. **Pull Modifiche** + - Git pull da GitLab + +3. **Build Applicazione** + - `npm ci` (install deps) + - `npm run build` (Vite build) + - `npm run db:push` (migrations) + - `npm prune --production` (cleanup) + +4. **Restart Applicazione** + - PM2 reload graceful + - Health check + - Log output + +5. **Rollback Automatico** + - Se deploy fallisce, ripristina ultimo backup DB --- -## 7. Manutenzione +## Manutenzione -### 7.1 Monitoring +### Gestione PM2 ```bash -# Status applicazione +# Status pm2 status # Logs real-time pm2 logs vigilanza-turni -# Logs ultimi 100 righe +# Logs storici pm2 logs vigilanza-turni --lines 100 -# Metriche sistema +# Restart +pm2 restart vigilanza-turni + +# Stop +pm2 stop vigilanza-turni + +# Info applicazione +pm2 show vigilanza-turni + +# Monitoring pm2 monit ``` -### 7.2 Backup Database +### Gestione Database +**Backup Manuale:** ```bash -# Backup manuale -sudo -u postgres pg_dump vigilanza_turni > backup_$(date +%Y%m%d).sql - -# Restore -sudo -u postgres psql vigilanza_turni < backup_20250110.sql +BACKUP_FILE="/var/backups/vigilanza-turni/backup_manual_$(date +%Y%m%d_%H%M%S).sql" +PGPASSWORD=553da84c94093919d46055d6ec37dfa2a03d0f46 \ + pg_dump -h localhost -U vigilanza_user -d vigilanza_turni > $BACKUP_FILE +gzip $BACKUP_FILE +echo "Backup salvato: ${BACKUP_FILE}.gz" ``` -### 7.3 Aggiornamenti Sistema +**Ripristino Backup:** +```bash +# Lista backup disponibili +ls -lht /var/backups/vigilanza-turni/*.gz + +# Ripristina specifico backup +BACKUP_FILE="/var/backups/vigilanza-turni/backup_20250116_143022.sql.gz" +gunzip -c $BACKUP_FILE | \ + PGPASSWORD=553da84c94093919d46055d6ec37dfa2a03d0f46 \ + psql -h localhost -U vigilanza_user -d vigilanza_turni + +# Restart applicazione +pm2 restart vigilanza-turni +``` + +**Accesso Database:** +```bash +PGPASSWORD=553da84c94093919d46055d6ec37dfa2a03d0f46 \ + psql -h localhost -U vigilanza_user -d vigilanza_turni +``` + +### Log Management + +**Nginx Logs:** +```bash +# Access log +tail -f /var/log/nginx/vigilanza-turni-access.log + +# Error log +tail -f /var/log/nginx/vigilanza-turni-error.log + +# Analisi traffico +cat /var/log/nginx/vigilanza-turni-access.log | \ + awk '{print $1}' | sort | uniq -c | sort -rn | head -10 +``` + +**PM2 Logs:** +```bash +# Real-time +pm2 logs vigilanza-turni + +# Last 50 lines +pm2 logs vigilanza-turni --lines 50 --nostream + +# Flush logs +pm2 flush vigilanza-turni +``` + +### SSL Certificate Renewal ```bash -# Update AlmaLinux +# Test renewal +sudo certbot renew --dry-run + +# Force renewal +sudo certbot renew --force-renewal + +# Check expiration +sudo certbot certificates +``` + +### System Updates + +```bash +# Update sistema sudo dnf update -y # Update Node.js packages cd /var/www/vigilanza-turni +npm outdated npm update -# Restart +# Rebuild dopo update +npm run build pm2 restart vigilanza-turni ``` -### 7.4 SSL Certificate Renewal - -Certbot rinnova automaticamente, ma puoi forzare: - -```bash -sudo certbot renew --dry-run # Test -sudo certbot renew # Rinnovo reale -sudo systemctl reload nginx -``` - --- -## 8. Troubleshooting +## Troubleshooting -### App non risponde +### Applicazione non Risponde ```bash -# Check PM2 +# 1. Check PM2 status pm2 status + +# 2. Check logs +pm2 logs vigilanza-turni --lines 100 + +# 3. Restart pm2 restart vigilanza-turni -# Check logs -pm2 logs vigilanza-turni --lines 50 - -# Check Nginx +# 4. Check Nginx sudo nginx -t sudo systemctl status nginx +sudo systemctl reload nginx + +# 5. Check firewall +sudo firewall-cmd --list-all ``` -### Database Connection Error +### Errore Database ```bash -# Verifica PostgreSQL +# 1. Verifica connessione +PGPASSWORD=553da84c94093919d46055d6ec37dfa2a03d0f46 \ + psql -h localhost -U vigilanza_user -d vigilanza_turni -c "SELECT version();" + +# 2. Check PostgreSQL sudo systemctl status postgresql -sudo -u postgres psql -c "SELECT version();" +sudo tail -f /var/lib/pgsql/data/log/postgresql-*.log -# Test connessione -psql "postgresql://vigilanza_user:password@localhost:5432/vigilanza_turni" -c "SELECT NOW();" +# 3. Restart PostgreSQL +sudo systemctl restart postgresql + +# 4. Verifica .env +cat /var/www/vigilanza-turni/.env | grep DATABASE_URL ``` -### SSL Certificate Issues +### Build Fallito ```bash -# Test SSL +# 1. Clean build +cd /var/www/vigilanza-turni +rm -rf node_modules dist + +# 2. Reinstall +npm ci + +# 3. Rebuild +npm run build + +# 4. Check errors +npm run build 2>&1 | tee build.log + +# 5. Restart +pm2 restart vigilanza-turni +``` + +### SSL Issues + +```bash +# 1. Check certificate sudo certbot certificates -# Rinnovo manuale +# 2. Renew certificate sudo certbot renew --force-renewal + +# 3. Reload Nginx sudo systemctl reload nginx + +# 4. Check SSL config +sudo nginx -t ``` -### Rollback Emergenza - -In GitLab β†’ CI/CD β†’ Pipelines β†’ clicca su "rollback" - -Oppure manuale: +### Performance Issues ```bash -cd /var/www/vigilanza-turni -git log --oneline -10 # Trova commit precedente -git checkout -bash deploy/deploy.sh -``` +# 1. Check server resources +htop +df -h +free -m ---- +# 2. PM2 monitoring +pm2 monit -## πŸ“ž Supporto - -### Logs Utili - -```bash -# PM2 logs -pm2 logs vigilanza-turni --lines 200 - -# Nginx logs -sudo tail -f /var/log/nginx/vigilanza-turni-error.log +# 3. Nginx access log analysis sudo tail -f /var/log/nginx/vigilanza-turni-access.log -# System logs -sudo journalctl -u nginx -f -sudo journalctl -xe +# 4. Database performance +PGPASSWORD=553da84c94093919d46055d6ec37dfa2a03d0f46 \ + psql -h localhost -U vigilanza_user -d vigilanza_turni -c \ + "SELECT query, calls, mean_exec_time FROM pg_stat_statements ORDER BY mean_exec_time DESC LIMIT 10;" ``` -### Comandi Rapidi +### Rollback Completo ```bash -# Restart completo -pm2 restart vigilanza-turni && sudo systemctl reload nginx +# 1. Stop applicazione +pm2 stop vigilanza-turni -# Deploy forzato -cd /var/www/vigilanza-turni && git pull && bash deploy/deploy.sh +# 2. Ripristina database +BACKUP_FILE=$(ls -t /var/backups/vigilanza-turni/*.gz | head -1) +gunzip -c $BACKUP_FILE | \ + PGPASSWORD=553da84c94093919d46055d6ec37dfa2a03d0f46 \ + psql -h localhost -U vigilanza_user -d vigilanza_turni -# Clear cache PM2 -pm2 delete vigilanza-turni -pm2 start npm --name vigilanza-turni -- start -pm2 save +# 3. Git rollback +cd /var/www/vigilanza-turni +git log --oneline -10 # Trova commit precedente +git reset --hard + +# 4. Rebuild +npm ci +npm run build + +# 5. Restart +pm2 restart vigilanza-turni ``` --- -## βœ… Checklist Post-Deployment +## Checklist Deployment -- [ ] Applicazione accessibile su https://tuodominio.it -- [ ] SSL certificate valido (lucchetto verde) +### Pre-Deployment +- [ ] Backup database eseguito +- [ ] Test locali passati +- [ ] Git push completato +- [ ] Server accessibile + +### During Deployment +- [ ] `./push-to-gitlab.sh` eseguito +- [ ] SSH server funzionante +- [ ] `bash deploy/deploy.sh` completato senza errori +- [ ] Health check PM2 OK + +### Post-Deployment +- [ ] Applicazione risponde: https://vt.alfacom.it - [ ] Login funzionante -- [ ] Database connesso -- [ ] Logs puliti (no errori critici) -- [ ] PM2 status: online -- [ ] Backup database configurato -- [ ] Monitoring attivo +- [ ] Database accessibile +- [ ] Logs puliti (no errori) +- [ ] SSL certificate valido --- -**Ultima modifica:** 2025-10-11 -**Versione:** 1.0 +## Sicurezza + +### Best Practices +1. βœ… SSL/TLS sempre attivo +2. βœ… Firewall configurato +3. βœ… Password database sicura +4. βœ… Backup automatici attivi +5. βœ… Logs monitorati +6. βœ… Sistema aggiornato regolarmente + +### Hardening Suggerito +- Fail2ban per brute-force protection +- SSH key-only authentication +- Database backup off-site +- Monitoring con Prometheus/Grafana +- Alert via email/Telegram + +--- + +## Contatti + +**Support:** Marco Alfacom +**Repository:** https://git.alfacom.it/marco/VigilanzaTurni +**Production:** https://vt.alfacom.it + +--- + +**Ultima revisione:** Ottobre 2025 diff --git a/QUICKSTART-DEPLOYMENT.md b/QUICKSTART-DEPLOYMENT.md index b0abb5b..23069ce 100644 --- a/QUICKSTART-DEPLOYMENT.md +++ b/QUICKSTART-DEPLOYMENT.md @@ -1,105 +1,78 @@ # πŸš€ Quick Start - Deployment VigilanzaTurni -Guida rapida per deployment da Replit β†’ GitLab β†’ Server AlmaLinux 9 +Guida rapida per deployment: Replit β†’ GitLab β†’ vt.alfacom.it ## πŸ“ Checklist Pre-Deployment - [ ] Server AlmaLinux 9 disponibile (min 2GB RAM) -- [ ] Dominio configurato (es. vigilanza.tuodominio.it) -- [ ] Account GitLab su git.alfacom.it +- [ ] Dominio vt.alfacom.it configurato +- [ ] Account GitLab - [ ] SSH access al server --- -## ⚑ Setup Rapido (15 minuti) +## ⚑ Setup Iniziale (15 minuti) ### 1️⃣ Setup Server (5 min) ```bash # SSH nel server -ssh root@ip-del-server +ssh root@vt.alfacom.it -# Download e esegui setup automatico -curl -o setup.sh https://git.alfacom.it/marco/VigilanzaTurni/-/raw/main/deploy/setup-server.sh -chmod +x setup.sh -sudo bash setup.sh +# Clone repository +cd /var/www +git clone https://git.alfacom.it/marco/VigilanzaTurni.git vigilanza-turni +cd vigilanza-turni -# ⚠️ IMPORTANTE: Salva la password PostgreSQL mostrata! +# Esegui setup automatico +sudo bash deploy/setup-server.sh ``` -### 2️⃣ Configura GitLab CI/CD (3 min) +Lo script installa automaticamente: +- Node.js 20 +- PostgreSQL 15 (con password: 553da84c94093919d46055d6ec37dfa2a03d0f46) +- PM2 +- Nginx +- Certbot (SSL) -**Genera SSH Key:** -```bash -# Sul tuo PC -ssh-keygen -t ed25519 -C "gitlab-deploy" -f ~/.ssh/gitlab-deploy -ssh-copy-id -i ~/.ssh/gitlab-deploy.pub root@ip-del-server -cat ~/.ssh/gitlab-deploy # Copia output -``` - -**GitLab β†’ Settings β†’ CI/CD β†’ Variables:** - -| Nome | Valore | -|------|--------| -| `SSH_PRIVATE_KEY` | [chiave privata copiata sopra] | -| `DEPLOY_HOST` | ip-del-server | -| `DEPLOY_USER` | root | -| `DEPLOY_DOMAIN` | vigilanza.tuodominio.it | - -### 3️⃣ Configura Replit (2 min) +### 2️⃣ Configura Nginx (2 min) ```bash -# In Replit Shell -git remote add production https://git.alfacom.it/marco/VigilanzaTurni.git - -# Crea Personal Access Token su GitLab e salvalo in Replit Secrets -# GitLab β†’ User Settings β†’ Access Tokens β†’ write_repository -``` - -### 4️⃣ Configura Server .env (3 min) - -```bash -# Sul server -cd /var/www/vigilanza-turni - -# Clone iniziale -git clone https://git.alfacom.it/marco/VigilanzaTurni.git . - -# Crea .env -cp .env.production.example .env -nano .env -``` - -**Inserisci:** -```bash -# Password DB dal setup (vedi /root/.vigilanza_db_password) -DATABASE_URL=postgresql://vigilanza_user:PASSWORD_GENERATA@localhost:5432/vigilanza_turni -SESSION_SECRET=$(openssl rand -base64 32) -REPLIT_DOMAINS=vigilanza.tuodominio.it -``` - -### 5️⃣ Nginx e SSL (2 min) - -```bash -# Copia config Nginx +# Copia configurazione Nginx sudo cp deploy/nginx.conf /etc/nginx/conf.d/vigilanza-turni.conf -# Modifica con il tuo dominio -sudo nano /etc/nginx/conf.d/vigilanza-turni.conf -# Sostituisci "tuodominio.it" β†’ "vigilanza.tuodominio.it" - # Test e reload sudo nginx -t sudo systemctl reload nginx # SSL Certificate -sudo certbot --nginx -d vigilanza.tuodominio.it +sudo certbot --nginx -d vt.alfacom.it ``` -### 6️⃣ Primo Deploy (1 min) +### 3️⃣ Configura .env (2 min) + +```bash +cd /var/www/vigilanza-turni + +# Crea .env produzione +cp .env.production.example .env +nano .env +``` + +**Inserisci in .env:** +```bash +DATABASE_URL=postgresql://vigilanza_user:553da84c94093919d46055d6ec37dfa2a03d0f46@localhost:5432/vigilanza_turni +SESSION_SECRET=$(openssl rand -base64 32) +NODE_ENV=production +PORT=5000 +APP_URL=https://vt.alfacom.it +BACKUP_ENABLED=true +BACKUP_DIR=/var/backups/vigilanza-turni +``` + +### 4️⃣ Primo Deploy (2 min) ```bash -# Sul server cd /var/www/vigilanza-turni bash deploy/deploy.sh ``` @@ -108,19 +81,26 @@ bash deploy/deploy.sh ## πŸ”„ Workflow Quotidiano -### Da Replit β†’ Produzione +### Deploy in 2 Comandi + +**Da Replit o locale:** ```bash -# 1. Fai modifiche in Replit -# 2. Push a GitLab -bash push-to-gitlab.sh +# 1. Push a GitLab +./push-to-gitlab.sh -# 3. Vai su GitLab -https://git.alfacom.it/marco/VigilanzaTurni/-/pipelines - -# 4. Clicca su "deploy_production" quando pronto +# 2. Sul server: Deploy +ssh root@vt.alfacom.it "cd /var/www/vigilanza-turni && bash deploy/deploy.sh" ``` +**Il deploy automaticamente:** +- βœ… Esegue backup database +- βœ… Pull ultime modifiche da GitLab +- βœ… Build frontend Vite +- βœ… Esegue migrations database +- βœ… Restart applicazione PM2 +- βœ… Health check + --- ## πŸ“Š Comandi Utili @@ -135,38 +115,59 @@ pm2 logs vigilanza-turni # Restart pm2 restart vigilanza-turni -# Backup database -sudo -u postgres pg_dump vigilanza_turni > backup_$(date +%Y%m%d).sql +# Verifica backup +ls -lht /var/backups/vigilanza-turni/ + +# Ripristina backup +gunzip -c /var/backups/vigilanza-turni/backup_20250116_143022.sql.gz | \ + PGPASSWORD=553da84c94093919d46055d6ec37dfa2a03d0f46 \ + psql -h localhost -U vigilanza_user -d vigilanza_turni ``` --- -## πŸ†˜ Problemi Comuni +## πŸ†˜ Troubleshooting **App non risponde:** ```bash pm2 restart vigilanza-turni +pm2 logs vigilanza-turni --lines 50 sudo systemctl reload nginx ``` **Errore database:** ```bash -# Verifica password in .env corrisponde a quella in /root/.vigilanza_db_password -cat /root/.vigilanza_db_password +# Verifica connessione +PGPASSWORD=553da84c94093919d46055d6ec37dfa2a03d0f46 \ + psql -h localhost -U vigilanza_user -d vigilanza_turni -c "SELECT version();" ``` -**SSL scaduto:** +**Build fallito:** ```bash -sudo certbot renew -sudo systemctl reload nginx +cd /var/www/vigilanza-turni +rm -rf node_modules dist +npm ci +npm run build +pm2 restart vigilanza-turni ``` --- -## πŸ“š Documentazione Completa +## 🌐 Accesso -Per dettagli completi: [DEPLOYMENT.md](./DEPLOYMENT.md) +**Applicazione:** https://vt.alfacom.it + +**Backup automatici:** +- Directory: `/var/backups/vigilanza-turni/` +- Retention: 30 giorni +- Formato: `backup_YYYYMMDD_HHMMSS.sql.gz` --- -**Setup completato?** βœ… Vai su https://vigilanza.tuodominio.it +## πŸ“š File Importanti + +- `deploy/deploy.sh` - Script deployment automatico +- `deploy/setup-server.sh` - Setup iniziale server +- `deploy/nginx.conf` - Configurazione reverse proxy +- `.env` - Variabili ambiente produzione +- `push-to-gitlab.sh` - Helper push GitLab diff --git a/replit.md b/replit.md index f422839..8252c63 100644 --- a/replit.md +++ b/replit.md @@ -315,38 +315,50 @@ All interactive elements have `data-testid` attributes for automated testing. - **Sistema Deployment Automatico** βœ…: - Pipeline CI/CD GitLab (.gitlab-ci.yml) con stages build/test/deploy - Script setup server AlmaLinux 9 (deploy/setup-server.sh) - - Script deployment automatico (deploy/deploy.sh) + - Script deployment automatico con backup DB (deploy/deploy.sh) - Configurazione Nginx reverse proxy con SSL - - Password PostgreSQL autogenerata (sicurezza) - - Workflow: Replit β†’ GitLab β†’ CI/CD β†’ Server produzione + - Workflow semplificato: 2 comandi (push + deploy) + - Backup automatico database pre-deploy (retention 30 giorni) + - Rollback automatico su errore deployment + - Dominio produzione: vt.alfacom.it - Documentazione completa (DEPLOYMENT.md, QUICKSTART-DEPLOYMENT.md) - - Helper script push-to-gitlab.sh per deployment rapido + - Helper script push-to-gitlab.sh ## Deployment ### Setup Produzione -Il sistema supporta deployment automatico su server AlmaLinux 9 tramite GitLab CI/CD: +Sistema deployment automatico su vt.alfacom.it (AlmaLinux 9): -**Workflow Deployment:** -``` -Replit (modifiche) β†’ Git Push β†’ GitLab CI/CD β†’ Deploy Server +**Workflow Semplificato (2 comandi):** +```bash +# 1. Push da Replit +./push-to-gitlab.sh + +# 2. Deploy su server +ssh root@vt.alfacom.it "cd /var/www/vigilanza-turni && bash deploy/deploy.sh" ``` **File Deployment:** - `.gitlab-ci.yml` - Pipeline CI/CD (build, test, deploy, rollback) - `deploy/setup-server.sh` - Setup iniziale server (Node, PostgreSQL, Nginx, PM2) -- `deploy/deploy.sh` - Script deployment automatico -- `deploy/nginx.conf` - Configurazione reverse proxy -- `.env.production.example` - Template variabili ambiente produzione +- `deploy/deploy.sh` - Script deployment automatico con backup DB +- `deploy/nginx.conf` - Configurazione Nginx per vt.alfacom.it +- `.env.production.example` - Template variabili ambiente +- `push-to-gitlab.sh` - Helper push GitLab -**Documentazione:** -- `DEPLOYMENT.md` - Guida completa step-by-step -- `QUICKSTART-DEPLOYMENT.md` - Setup rapido 15 minuti +**FunzionalitΓ  Deploy:** +- βœ… Backup automatico database pre-deploy +- βœ… Build frontend Vite + migrations DB +- βœ… Restart graceful PM2 +- βœ… Health check post-deploy +- βœ… Rollback automatico su errore +- βœ… Retention backup: 30 giorni **Security:** -- Password PostgreSQL autogenerata (non hard-coded) -- SSL/TLS con Let's Encrypt -- Firewall configurato automaticamente +- Password PostgreSQL sicura (non hard-coded) +- SSL/TLS con Let's Encrypt (vt.alfacom.it) +- Firewall configurato (HTTP/HTTPS only) +- Backup compressi in /var/backups/vigilanza-turni/ ## Future Enhancements