Architettura di Deployment: Sistema di Produzione a Zero Tempi Morti
Questo articolo spiega come distribuiamo e gestiamo il sito web con riavvii automatici e zero tempi morti.
Il Problema: Il Deployment Manuale è Rischioso
Il deployment tradizionale richiede:
-
Riavvio manuale del server: Causa tempi morti
-
Monitoraggio del servizio: Qualcuno deve vigilare sui crash
-
Aggiornamenti del codice: Richiede accesso SSH e passaggi manuali
-
Rollback: Processo manuale se qualcosa si rompe
Questo non scala e causa tempi morti durante gli aggiornamenti.
La Soluzione: Deployment Automatizzato con Systemd
Utilizziamo systemd per gestire (vedi Panoramica dell'Infrastruttura) l'applicazione:
-
Riavvio automatico: Si riavvia automaticamente in caso di crash o modifica del codice
-
Zero tempi morti: Riavvio graduale dei worker
-
Logging: Gestione centralizzata dei log
-
Gestione dei processi: Gestisce il ciclo di vita dei worker
Infrastruttura del Server
Server di Produzione
Il server di produzione ospita il sito web pubblico:
-
Scopo: Sito web pubblico che serve il catalogo prodotti e l'e-commerce
-
Modulo: Solo "web"
-
Ambiente: Produzione (Gunicorn + systemd)
-
Accesso: Pubblico (nessun login richiesto)
Server Applicativo
Gunicorn
Gunicorn è il server web di produzione:
- Multi-worker: Processi worker multipli
Integrazione con Systemd
Systemd gestisce Gunicorn:
-
Avvio automatico: All'avvio del server
-
Riavvio automatico: In caso di crash o modifica del codice
-
Logging: Integrazione con il journal di systemd
-
Gestione dei processi: Ciclo di vita dei worker
Configurazione
Configurazione dell'Ambiente
La configurazione è specifica per l'ambiente:
-
File di configurazione: Impostazioni specifiche per l'ambiente
-
Formato JSON: Coppie chiave-valore
-
Variabili d'ambiente: Segreti e chiavi API
-
Abilitazione moduli: Controlla quali funzionalità vengono caricate
Asset Statici
Gli asset statici sono serviti da S3 con CloudFront CDN:
-
Bucket S3: Archiviazione oggetti per file statici
-
CloudFront: CDN per la distribuzione globale degli asset
-
Caching: TTL lungo per i contenuti statici
-
Versioning: Invalida della cache con numeri di versione
Processo di Deployment
Deployment del Codice
Il codice viene distribuito via Git con systemd che gestisce il servizio applicativo:
- Commit e push: Le modifiche vengono inviate al repository Git
- Pull sul server: Il codice viene scaricato sul server di produzione
- Riavvio di Systemd: Il servizio si riavvia automaticamente in caso di crash
Deployment della Configurazione
La configurazione è gestita separatamente dal codice:
- File di configurazione: File di configurazione JSON in Git
- Variabili d'ambiente: Segreti caricati dall'ambiente
- Abilitazione moduli: Controlla quali funzionalità vengono caricate
Monitoraggio
Controlli di Salute
Gli endpoint di salute monitorano lo stato del server:
-
Endpoint di salute: Controllo di salute di base
-
Controllo database: Connettività al database
-
Controllo cache: Connettività alla cache
Logging
I log sono memorizzati in più posizioni:
-
Log di errore di Gunicorn: Errori dell'applicazione
-
Log di accesso di Gunicorn: Richieste HTTP
-
Log del servizio: Journal di systemd
Riepilogo
L'architettura di deployment fornisce:
-
Gunicorn: Server WSGI di produzione
-
Systemd: Riavvio automatico e gestione dei processi
-
Deployment Git: Gestione di codice e configurazione
-
S3 + CloudFront: Distribuzione di asset statici
-
Monitoraggio della salute: Endpoint di controllo della salute
-
Logging: Log di errore e di accesso