Je suis un débutant dans l'administration de serveur Web. J'ai lu à plusieurs reprises que le serveur Web intégré de flask n'est pas conçu pour la "production" et doit être utilisé uniquement pour les tests et le débogage ...
Mais que se passe-t-il si mon application ne concerne qu'un millier d'utilisateurs qui envoient occasionnellement des données au serveur?
Si cela fonctionne, quand devrais-je me préoccuper de la configuration d'un serveur Web plus sophistiqué? (Je cherche des métriques approximatives).
En un mot, j'aimerais trouver ce que le serveur Web intégré peut faire (avec environ des seuils) et ce qu’il ne peut pas faire.
Merci beaucoup !
Il n’ya pas une bonne réponse à cette question, mais voici quelques points à garder à l’esprit:
Avec la bonne quantité de mise à l'échelle horizontale, il est fort possible que vous puissiez continuer à étendre l'utilisation du serveur de débogage pour toujours. Le moment précis où vous auriez besoin de commencer à vous adapter (ou à utiliser un "vrai" serveur Web) dépendrait également de l'environnement dans lequel vous êtes hébergé, des attentes des utilisateurs, etc.
Le problème principal que vous rencontrerez probablement est que le serveur est mono-thread. Cela signifie qu'il traitera chaque demande une à la fois, en série. Cela signifie que si vous essayez de traiter plusieurs demandes (y compris des favicons, des éléments statiques tels que des images, des fichiers CSS et Javascript, etc.), les demandes prendront plus de temps. Si une demande donnée prend beaucoup de temps (par exemple, 20 secondes), alors votre application entière ne répond pas pendant cette période (20 secondes). Ce n'est que par défaut, bien sûr: vous pouvez modifier le nombre de threads (ou faire en sorte que les demandes soient traitées dans d'autres processus), ce qui pourrait atténuer certains problèmes. Mais encore une fois, il peut encore être lent sous une charge "élevée". Ce qui est considéré comme une charge "élevée" dépendra de votre application et des attentes relatives à un temps de réponse maximum acceptable.
Un autre problème est la sécurité: si vous êtes préoccupé par TOUTES la sécurité (et pas seulement la sécurité des données dans l'application elle-même, mais également la sécurité de la boîte qui l'exécutera également), vous ne devez pas utiliser le serveur de développement. Il n'est pas prêt à résister à aucune sorte d'attaque.
Enfin, le serveur de développement pourrait tout simplement échouer. Il n'est pas conçu pour être utilisé comme un processus de longue haleine (jours, semaines, mois) et n'a donc pas été testé de manière satisfaisante pour fonctionner dans cette capacité.
Donc, oui, il y a des limites. Oui, vous pouvez toujours l'utiliser en production. Et oui, je recommanderais quand même l’utilisation d’un "vrai" serveur Web. Si vous n'aimez pas l'idée d'installer Apache ou Nginx, vous pouvez toujours choisir une solution aussi simple que "lancer un script python" en utilisant certains des serveurs WSGI Standalone , qui peut exécuter un serveur conçu pour être en production avec quelque chose d'aussi simple que d'exécuter python run_app.py
dans la ligne de commande. En règle générale, il vous suffit de créer un script python de 4 à 5 lignes pour importer et créer l'objet serveur, de le pointer vers votre Flask app
et de l'exécuter.
gunicorn peut être exécuté avec uniquement les éléments suivants sur la ligne de commande, aucun script supplémentaire n'est nécessaire:
gunicorn myproject:app
... où "myproject" est le package Python contenant l'objet app
Flask.
Le PO a évolué depuis longtemps, mais pour ceux qui rencontreront cette question à l'avenir, je voudrais juste ajouter que la mise en place d'un serveur Apache, même sur un ordinateur portable, est gratuite et assez facile. Il peut être facilement configuré pour autant ou autant de fonctionnalités que vous le souhaitez, simplement en annulant ou en commentant les lignes du fichier de configuration. Il pourrait y avoir une méthode d'interface graphique encore plus facile pour le faire de nos jours, mais il est simple de modifier les configurations.