In questo articolo vedremo come configurare un ambiente di produzione robusto per FastAPI su una VPS AlmaLinux (versione 9 consigliata).
L’architettura che andremo a costruire segue le best practices DevOps attuali:
Nginx: Reverse Proxy e terminazione SSL.
Supervisor: Process Manager per assicurare che l’applicazione resti sempre attiva.
Gunicorn + Uvicorn: Application Server WSGI/ASGI per gestire le richieste Python in concorrenza.
Python 3.12: Runtime environment.
1. Preparazione del Sistema (AlmaLinux)
Prima di tutto, aggiorniamo il sistema e installiamo i repository necessari. AlmaLinux, essendo RHEL-based, utilizza dnf.
Aggiornamento e Repository EPEL
Molti pacchetti utili (come Supervisor e Certbot) si trovano nel repository EPEL (Extra Packages for Enterprise Linux).
| |
Installazione di Nginx
Nginx è il nostro reverse proxy e gestirà il traffico HTTP/HTTPS.
| |
Installazione di Certbot per SSL
Per la crittografia HTTPS, useremo Certbot con il plugin Nginx.
| |
Installazione di Supervisor
Supervisor è il nostro process manager, che manterrà in esecuzione il nostro server ASGI.
| |
Installazione di Python 3.12
AlmaLinux 9 include Python 3.9 per default. Dobbiamo installare Python 3.12 manualmente.
| |
Verifichiamo l’installazione:
| |
2. Preparazione dell’Applicazione FastAPI
Struttura del Progetto
La nostra applicazione FastAPI sarà strutturata come segue:
| |
File main.py
Il nostro file principale FastAPI:
| |
File requirements.txt
Le dipendenze necessarie:
| |
3. Configurazione di Nginx
File di Configurazione Nginx
Creiamo un file di configurazione per Nginx:
| |
4. Configurazione di Supervisor
File di Configurazione Supervisor
Creiamo un file di configurazione per Supervisor:
| |
5. Deploy dell’Applicazione
Installazione delle Dipendenze
| |
Avvio dell’Applicazione con Supervisor
| |
Configurazione di Nginx
| |
6. Verifica del Deploy
Verifichiamo che l’applicazione sia in esecuzione:
| |
Dovremmo vedere la risposta JSON: {"message": "Hello World"}.
7. Aggiornamento dell’Applicazione
Per aggiornare l’applicazione, seguiamo questi passaggi:
- Aggiorniamo il codice nell’applicazione.
- Riavviamo l’applicazione con Supervisor:
| |
8. Monitoraggio e Logging
Controlliamo i log per eventuali errori:
| |
9. Gestione dei Certificati SSL (Opzionale)
Se desideriamo utilizzare HTTPS, possiamo configurare un certificato SSL con Let’s Encrypt:
| |
Questo configurerà automaticamente Nginx per utilizzare HTTPS.
Conclusione
Abbiamo configurato un ambiente di produzione per un’applicazione FastAPI utilizzando Nginx, Supervisor e Uvicorn. Questo setup garantisce che l’applicazione sia sempre disponibile, scalabile e sicura.
