Quand tu fais flask run (ou python app.py), tu utilises le serveur de développement de Werkzeug.
Il est super pour débugger, mais il est dangereux et lent en production. Il n'est pas fait pour gérer 1000 connexions simultanées.
Le rôle du WSGI (Web Server Gateway Interface)
Flask est une application Python. Nginx (le serveur web) ne parle pas Python. Il faut un traducteur entre les deux : Le serveur WSGI.
Le plus connu pour Python/Flask est Gunicorn.
Installation
pip install gunicorn
Lancer l'app en prod
Au lieu de flask run, tu fais :
gunicorn -w 4 -b 0.0.0.0:8000 "app:create_app()"
-w 4: Lance 4 "workers" (processus). Si ton serveur a 4 cœurs CPU, c'est l'idéal.-b 0.0.0.0:8000: Écoute sur toutes les interfaces, port 8000."app:create_app()": Le chemin vers ton app factory.
Maintenant, ton application est capable de gérer de la charge. Mais Gunicorn n'est pas très doué pour servir des fichiers statiques (CSS/Images) ou gérer le HTTPS... C'est là qu'intervient Nginx.