Adds a comprehensive DEPLOYMENT.md guide, a setup-server.sh script for AlmaLinux 9 to install Node.js, PostgreSQL, Nginx, and PM2, a deploy.sh script for CI/CD deployment, an nginx.conf for server configuration, and a push-to-gitlab.sh helper script for Replit integration. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 99f0fce6-9386-489a-9632-1d81223cab44 Replit-Commit-Checkpoint-Type: intermediate_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/6d543d2c-20b9-4ea6-93fe-70fe9b1d9f80/99f0fce6-9386-489a-9632-1d81223cab44/H8Wilyj
7.6 KiB
7.6 KiB
🚀 Guida Deployment VigilanzaTurni
Deployment automatico da Replit → GitLab → Server AlmaLinux 9
📋 Indice
- Prerequisiti
- Setup Iniziale Server
- Configurazione GitLab
- Configurazione Replit
- Primo Deployment
- Deployment Automatico
- Manutenzione
- Troubleshooting
1. Prerequisiti
Server AlmaLinux 9
- Server con accesso root/sudo
- Almeno 2GB RAM
- 20GB storage
- Indirizzo IP pubblico
- Dominio configurato (es. vigilanza.tuodominio.it)
Account e Accessi
- Account GitLab su git.alfacom.it
- SSH access al server
- Replit account con questo progetto
2. Setup Iniziale Server
2.1 Connessione al Server
ssh root@ip-del-tuo-server
2.2 Esecuzione Script Setup
# Download script setup
curl -o setup-server.sh https://git.alfacom.it/marco/VigilanzaTurni/-/raw/main/deploy/setup-server.sh
# 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 - User:
vigilanza_user - Password:
ChangeMe_ProductionPassword123!⚠️ CAMBIALA!
# Cambia password PostgreSQL
sudo -u postgres psql
ALTER USER vigilanza_user WITH PASSWORD 'TuaPasswordSicura123!';
\q
2.4 Configurazione SSL
# 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
# 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
# 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:
- GitLab → User Settings → Access Tokens
- Nome:
Replit Deploy - Scopes:
write_repository - Copia il token
In Replit, salva token nei Secrets:
# Secrets → Add new secret
Name: GITLAB_TOKEN
Value: <il-tuo-token>
4.3 Script Push Automatico
Crea file push-to-gitlab.sh in Replit:
#!/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:
cd /var/www/vigilanza-turni
cp .env.production.example .env
nano .env
Configura:
DATABASE_URL=postgresql://vigilanza_user:TuaPasswordSicura@localhost:5432/vigilanza_turni
SESSION_SECRET=$(openssl rand -base64 32)
REPLIT_DOMAINS=vigilanza.tuodominio.it
5.2 Configurazione Nginx
# 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
# Test configurazione
sudo nginx -t
# Reload Nginx
sudo systemctl reload nginx
5.3 Clone Repository Iniziale
cd /var/www/vigilanza-turni
git clone https://git.alfacom.it/marco/VigilanzaTurni.git .
5.4 Primo Deploy Manuale
bash deploy/deploy.sh
Verifica:
pm2 status
pm2 logs vigilanza-turni
6. Deployment Automatico
6.1 Push da Replit
# In Replit Shell
bash push-to-gitlab.sh
6.2 Trigger Pipeline GitLab
- Vai su GitLab → CI/CD → Pipelines
- La pipeline parte automaticamente
- Clicca su
deploy_productionquando vuoi deployare - Il deploy avviene in ~3-5 minuti
6.3 Flusso Automatico
Replit → Git Push → GitLab → CI/CD Pipeline → Deploy Server
Stages:
- 🏗️ Build - Compila TypeScript e Vite
- 🧪 Test - Esegue linting
- 🚀 Deploy - Deployment su server (manuale)
7. Manutenzione
7.1 Monitoring
# Status applicazione
pm2 status
# Logs real-time
pm2 logs vigilanza-turni
# Logs ultimi 100 righe
pm2 logs vigilanza-turni --lines 100
# Metriche sistema
pm2 monit
7.2 Backup Database
# 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
7.3 Aggiornamenti Sistema
# Update AlmaLinux
sudo dnf update -y
# Update Node.js packages
cd /var/www/vigilanza-turni
npm update
# Restart
pm2 restart vigilanza-turni
7.4 SSL Certificate Renewal
Certbot rinnova automaticamente, ma puoi forzare:
sudo certbot renew --dry-run # Test
sudo certbot renew # Rinnovo reale
sudo systemctl reload nginx
8. Troubleshooting
App non risponde
# Check PM2
pm2 status
pm2 restart vigilanza-turni
# Check logs
pm2 logs vigilanza-turni --lines 50
# Check Nginx
sudo nginx -t
sudo systemctl status nginx
Database Connection Error
# Verifica PostgreSQL
sudo systemctl status postgresql
sudo -u postgres psql -c "SELECT version();"
# Test connessione
psql "postgresql://vigilanza_user:password@localhost:5432/vigilanza_turni" -c "SELECT NOW();"
SSL Certificate Issues
# Test SSL
sudo certbot certificates
# Rinnovo manuale
sudo certbot renew --force-renewal
sudo systemctl reload nginx
Rollback Emergenza
In GitLab → CI/CD → Pipelines → clicca su "rollback"
Oppure manuale:
cd /var/www/vigilanza-turni
git log --oneline -10 # Trova commit precedente
git checkout <commit-hash>
bash deploy/deploy.sh
📞 Supporto
Logs Utili
# PM2 logs
pm2 logs vigilanza-turni --lines 200
# Nginx logs
sudo tail -f /var/log/nginx/vigilanza-turni-error.log
sudo tail -f /var/log/nginx/vigilanza-turni-access.log
# System logs
sudo journalctl -u nginx -f
sudo journalctl -xe
Comandi Rapidi
# Restart completo
pm2 restart vigilanza-turni && sudo systemctl reload nginx
# Deploy forzato
cd /var/www/vigilanza-turni && git pull && bash deploy/deploy.sh
# Clear cache PM2
pm2 delete vigilanza-turni
pm2 start npm --name vigilanza-turni -- start
pm2 save
✅ Checklist Post-Deployment
- Applicazione accessibile su https://tuodominio.it
- SSL certificate valido (lucchetto verde)
- Login funzionante
- Database connesso
- Logs puliti (no errori critici)
- PM2 status: online
- Backup database configurato
- Monitoring attivo
Ultima modifica: 2025-10-11
Versione: 1.0