Python è un linguaggio di programmazione, a mio avviso, maturo per lo sviluppo web, grazie alla sua sintassi semplice, alla sua versatilità e alla sua ricca offerta di moduli e librerie. Per creare siti web con Python, è possibile utilizzare dei framework web, cioè dei pacchetti software che forniscono le funzionalità di base per gestire le richieste HTTP, le rotte, i template, i database e altro ancora.
Tra i vari framework web disponibili per Python, uno dei più semplici e flessibili è Flask. Flask è un framework web leggero e minimalista, che segue il principio del microframework, cioè di fornire solo le componenti essenziali per lo sviluppo web, lasciando al programmatore la libertà di scegliere le estensioni e le librerie più adatte alle proprie esigenze. In questo articolo, vedremo come creare un sito web di base con Python e Flask.
Prerequisiti
Per seguire questo tutorial, avrai bisogno di:
- Python 3 o superiore installato sul tuo computer. Puoi verificare la versione di Python con il comando `
python --version
` nel terminale. - Pip, il gestore dei pacchetti di Python, installato sul tuo computer. Puoi verificare la versione di pip con il comando `
pip --version
` nel terminale. - Virtualenv, un modulo di Python che permette di creare ambienti virtuali isolati per le applicazioni Python, installato sul tuo computer. Puoi installare virtualenv con il comando `
pip install virtualenv
` nel terminale. - Un editor di codice a tua scelta, come Visual Studio Code, Sublime Text o Atom.
Creare un'applicazione Flask
Il primo passo per creare un sito web con Python e Flask è creare un'applicazione Flask sul tuo computer. Per farlo, segui questi passi:
1. Crea una cartella sul tuo computer dove vuoi salvare il codice del tuo sito web. Ad esempio, puoi creare una cartella chiamata `flask_website`.
2. Apri il terminale e spostati nella cartella appena creata con il comando `cd flask_website
`.
3. Crea un ambiente virtuale Python con il comando `python3 -m venv venv
`. Questo comando creerà una sottocartella chiamata `venv` nella cartella principale, dove verranno installati i moduli e le librerie necessari per il tuo sito web.
4. Attiva l'ambiente virtuale con il comando `source venv/bin/activate
` se usi Linux o macOS, o con il comando `venv\Scripts\activate` se usi Windows. Dopo aver attivato l'ambiente virtuale, il terminale mostrerà il prefisso `(venv)` prima del prompt.
5. Installa Flask nell'ambiente virtuale con il comando `pip install Flask
`. Questo comando installerà Flask e le sue dipendenze nell'ambiente virtuale.
6. Crea un file Python chiamato `app.py` nella cartella principale, e aprilo con il tuo editor di codice. In questo file, scriveremo il codice dell'applicazione Flask. Inizia a scrivere il seguente codice:
# Importa la classe Flask da flask
from flask import Flask
# Crea un'istanza dell'applicazione Flask
app = Flask(__name__)
# Definisci una rotta per la pagina principale
@app.route('/')
def index():
# Restituisci il messaggio "Ciao, mondo!"
return 'Ciao, mondo!'
In questo codice, abbiamo importato la classe Flask dal modulo flask, e abbiamo creato un’istanza dell’applicazione Flask chiamata app. Abbiamo poi definito una funzione chiamata index, che restituisce il messaggio “Ciao, mondo!” quando viene richiamata. Infine, abbiamo usato il decoratore @app.route(‘/’) per associare la funzione index alla rotta /, cioè la pagina principale del sito web.
Salva il file app.py
e torna al terminale. Esegui il comando flask run
per avviare il server di sviluppo di Flask e far girare l’applicazione Flask. Dovresti vedere un output simile a questo:
$ flask run
* Serving Flask app "app.py"
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
Questo output indica che l’applicazione Flask è in esecuzione all’indirizzo http://127.0.0.1:5000/, che corrisponde a localhost:5000. Apri il tuo browser e vai a questo indirizzo. Dovresti vedere il messaggio “Ciao, mondo!” sulla pagina.
Congratulazioni, hai appena creato la tua prima applicazione Flask!
Utilizzare Gunicorn per eseguire l'applicazione Flask in produzione
Gunicorn è un server HTTP WSGI per UNIX utilizzato per eseguire applicazioni Python in un ambiente di produzione. È noto per la sua efficienza e la sua capacità di gestire molteplici richieste simultaneamente.
L'utilizzo di Gunicorn invece del server web integrato di Flask è raccomandato per diversi motivi, soprattutto quando si passa da uno sviluppo locale o di test a un ambiente di produzione. Ecco alcuni dei motivi principali:
-
Robustezza e Affidabilità: Gunicorn è costruito per gestire più richieste contemporaneamente, il che lo rende molto più robusto e affidabile per un traffico web consistente. Il server integrato di Flask è progettato principalmente per lo sviluppo e il testing, non per gestire carichi di lavoro intensi.
-
Gestione delle Richieste in Concorrenza: Gunicorn è un server WSGI HTTP che utilizza il modello pre-fork worker. Questo significa che può gestire più richieste in parallelo, spartendole tra i processi worker. Questo è cruciale in un ambiente di produzione dove l'applicazione potrebbe ricevere un alto volume di traffico.
-
Maggiore Scalabilità: Con Gunicorn, è più facile scalare l'applicazione verticalmente (aggiungendo più risorse hardware) e orizzontalmente (tramite più istanze del server). È possibile aumentare o diminuire il numero di worker in base alle esigenze del carico di lavoro.
-
Miglior Integrazione con Sistemi di Produzione: Gunicorn è progettato per essere integrato facilmente con altri servizi e strumenti utilizzati in ambienti di produzione, come server Nginx, sistemi di bilanciamento del carico, e strumenti di monitoraggio.
-
Sicurezza Migliorata: I server utilizzati in produzione richiedono un livello di sicurezza superiore. Gunicorn, combinato con un web server come Nginx, offre una configurazione più sicura rispetto al server di sviluppo di Flask, che non è progettato per resistere agli attacchi comuni su internet.
-
Facilità di Configurazione e Deployment: Configurare e distribuire un'applicazione Flask con Gunicorn è relativamente semplice, e ci sono molte risorse disponibili per aiutare in questo processo. Questo aiuta a ridurre il tempo e lo sforzo necessari per mettere un'applicazione Flask in produzione.
Per utilizzare Gunicorn con la tua applicazione Flask, segui questi passi:
- Assicurati di aver attivato l'ambiente virtuale come descritto in precedenza.
- Installa Gunicorn nel tuo ambiente virtuale con il comando `
pip install gunicorn
`. - Dopo aver installato Gunicorn, puoi avviare il tuo sito web con il comando `
gunicorn app:app
`. Questo comando dirà a Gunicorn di eseguire l'istanza dell'applicazione Flask definita in `app.py`. - Gunicorn avvierà l'applicazione su un server di produzione, rendendola più adatta per l'uso in ambienti di produzione rispetto al server di sviluppo di Flask.
Mantenere l'applicazione live
Per mantenere l'applicazione Flask operativa e assicurarsi che si riavvii automaticamente in caso di crash, è utile impiegare un sistema di gestione dei processi come systemd. Questo strumento permette di configurare il sistema operativo per eseguire automaticamente l'applicazione Flask all'avvio e riavviarla se si verificano errori.
Ecco un esempio di configurazione per un servizio systemd che gestisce un'applicazione Flask con Gunicorn:
[Unit]
Description=WebHook GitHub
After=network.target
[Service]
ExecStart=/flask_website/venv/bin/gunicorn app:app -b 0.0.0.0:8888
WorkingDirectory=/opt/webhook
User=your_user
Restart=always
[Install]
WantedBy=multi-user.target
In questa configurazione:
[Unit]
specifica il servizio e le sue dipendenze. LaDescription
dovrebbe riflettere chiaramente lo scopo del servizio.[Service]
contiene i dettagli su come il servizio deve essere avviato e gestito.ExecStart
indica il comando per avviare l'applicazione, in questo caso Gunicorn con la tua applicazione Flask.WorkingDirectory
specifica la directory in cui il servizio deve essere eseguito, mentreUser
indica quale utente deve eseguire il servizio.Restart=always
assicura che il servizio venga riavviato automaticamente in caso di fallimento.[Install]
indica quando il servizio deve essere avviato automaticamente,WantedBy=multi-user.target
assicura che il servizio venga avviato con il normale processo di multi-user.
Con questa configurazione, la tua applicazione Flask sarà eseguita in modo efficiente e affidabile in un ambiente di produzione, garantendo disponibilità e resilienza.