6.4 KiB
6.4 KiB
Guida al Deployment in Produzione - Duxiter
Questa guida descrive come creare e deployare una versione di produzione del progetto Duxiter.
Panoramica
Il progetto Duxiter è composto da:
- Frontend: React/TypeScript con Vite
- Backend: Node.js/Express con TypeScript
- Database: MongoDB (Docker)
- Message Queue: RabbitMQ (Docker)
- Proxy: Nginx (configurazione separata)
Script Disponibili
1. Script di Deployment Completo
# Deployment completo con incremento versione
./deploy-production.sh [patch|minor|major] "messaggio commit"
# Esempi
./deploy-production.sh patch "Fix bug produzione"
./deploy-production.sh minor "Nuova funzionalità"
./deploy-production.sh major "Breaking changes"
2. Script di Build Server
# Build solo del server
cd server
./build-production.sh
3. Script di Versioning
# Incremento versione e git push
./git-push-version.sh [patch|minor|major] "messaggio"
Processo di Deployment Automatico
Lo script deploy-production.sh esegue automaticamente:
1. Verifica Prerequisiti
- ✅ Directory Git
- ✅ Docker e Docker Compose
- ✅ Node.js e npm
2. Gestione Versione
- 📦 Incrementa versione (semantic versioning)
- 🔄 Sincronizza versioni frontend/backend
- 📝 Commit automatico
- 🏷️ Creazione tag Git
- 🚀 Push su repository
3. Build Frontend
- 📦 Installazione dipendenze (
npm ci) - 🏗️ Build ottimizzato (
npm run build) - 📁 Output in
./dist/
4. Build Backend
- 🔧 Compilazione TypeScript
- 📦 Creazione package.json produzione
- 🗂️ Copia file statici
- 📁 Output in
./server/dist/
5. Servizi Docker
- 🗄️ Avvio MongoDB
- 🐰 Avvio RabbitMQ
- ✅ Test connessioni
Struttura File di Produzione
duxiter/
├── dist/ # Frontend buildato
│ ├── index.html
│ ├── assets/
│ └── ...
├── server/dist/ # Backend buildato
│ ├── index.js
│ ├── package.json
│ ├── node_modules/
│ └── static/
└── docker-compose.yml # Servizi (MongoDB, RabbitMQ)
Configurazione Produzione
Variabili d'Ambiente
Crea un file .env nella directory server/ con:
# Database
MONGODB_URI=mongodb://admin:password123@localhost:27017/duxiter?authSource=admin
# RabbitMQ
RABBITMQ_URL=amqp://admin:password123@localhost:5672
# JWT
JWT_SECRET=your-super-secret-jwt-key-here
# SendGrid (Email)
SENDGRID_API_KEY=your-sendgrid-api-key
SENDGRID_FROM_EMAIL=noreply@yourdomain.com
SENDGRID_FROM_NAME=DuxIter
# Server
PORT=3000
NODE_ENV=production
# CORS
CORS_ORIGIN=https://yourdomain.com
Configurazione Nginx
Esempio di configurazione nginx (/etc/nginx/sites-available/duxiter):
server {
listen 80;
server_name yourdomain.com;
# Frontend (React)
location / {
root /path/to/duxiter/dist;
try_files $uri $uri/ /index.html;
# Cache statico
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
}
# Backend API
location /api/ {
proxy_pass http://localhost:3000/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}
# RabbitMQ Management (opzionale)
location /rabbitmq/ {
proxy_pass http://localhost:15672/;
proxy_set_header Host $host;
}
}
Avvio in Produzione
1. Avvio Servizi Docker
# Avvio servizi in background
docker-compose up -d
# Verifica stato
docker-compose ps
2. Avvio Server Backend
# Metodo 1: Diretto
cd server/dist
npm start
# Metodo 2: Con PM2 (raccomandato)
npm install -g pm2
cd server/dist
pm2 start index.js --name "duxiter-server"
pm2 startup
pm2 save
3. Configurazione Nginx
# Copia configurazione
sudo cp nginx.conf /etc/nginx/sites-available/duxiter
sudo ln -s /etc/nginx/sites-available/duxiter /etc/nginx/sites-enabled/
# Test configurazione
sudo nginx -t
# Riavvio nginx
sudo systemctl reload nginx
Monitoraggio
Servizi Attivi
- Frontend: Servito da Nginx
- Backend: http://localhost:3000
- MongoDB: localhost:27017
- RabbitMQ: localhost:5672
- RabbitMQ Management: http://localhost:15672
Log
# Log server (se usando PM2)
pm2 logs duxiter-server
# Log Docker
docker-compose logs -f
# Log Nginx
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log
Backup
Database MongoDB
# Backup
docker exec duxiter-mongodb mongodump --out /backup --authenticationDatabase admin -u admin -p password123
# Restore
docker exec duxiter-mongodb mongorestore /backup --authenticationDatabase admin -u admin -p password123
Troubleshooting
Problemi Comuni
-
Server non si avvia
- Verifica variabili d'ambiente
- Controlla connessione MongoDB
- Verifica porta 3000 libera
-
Frontend non carica
- Verifica configurazione Nginx
- Controlla permessi file in
dist/ - Verifica CORS settings
-
Database non connette
- Verifica servizi Docker:
docker-compose ps - Controlla credenziali MongoDB
- Verifica rete Docker
- Verifica servizi Docker:
Comandi Utili
# Restart completo
docker-compose down
docker-compose up -d
pm2 restart duxiter-server
# Verifica stato
docker-compose ps
pm2 status
sudo systemctl status nginx
# Pulizia
docker system prune
npm cache clean --force
Sicurezza
Checklist Produzione
- Cambiare password default MongoDB/RabbitMQ
- Configurare JWT_SECRET sicuro
- Abilitare HTTPS/SSL
- Configurare firewall
- Limitare accesso RabbitMQ Management
- Configurare backup automatici
- Monitoraggio e alerting
- Rate limiting API
- Validazione input
Aggiornamenti
Per aggiornare la versione in produzione:
# 1. Pull ultime modifiche
git pull origin main
# 2. Nuovo deployment
./deploy-production.sh patch "Update produzione"
# 3. Restart server
pm2 restart duxiter-server
Nota: Questa guida assume un ambiente Linux/Ubuntu. Adatta i comandi per il tuo sistema operativo specifico.