web-dev-qa-db-fra.com

Le serveur est-il fourni avec Flask sûr à utiliser en production?

Le serveur est-il fourni avec Flask sûr pour le déploiement dans un environnement de production? Sinon, que dois-je utiliser pour déployer Flask en production?)

58
ensnare

Non . Le serveur fourni est un serveur développement. Il n'est pas conçu pour les environnements de production.

  • Il ne traitera pas plus d'une demande à la fois par défaut.
  • Si vous laissez le mode débogage activé et qu'une erreur apparaît, cela ouvre un shell qui permet d'exécuter du code arbitraire sur votre serveur (pensez os.system('rm -rf /')).
  • Le serveur de développement n'évolue pas bien.

Flask utilise le serveur de développement de Werkzeug, et la documentation dit la même chose:

Le serveur de développement n'est pas destiné à être utilisé sur des systèmes de production. Il a été conçu spécialement à des fins de développement et fonctionne mal sous une charge élevée. Pour les configurations de déploiement, consultez les pages Application Deployment .

L'approche recommandée est de tiliser un serveur WSGI de production pour exécuter votre Flask. Il y a une section entière dédiée au déploiement dans les documents: Options de déploiement .

Déployer votre application est aussi simple que d'installer un serveur WSGI comme uWSGI ou gunicorn et de l'exécuter à la place du serveur de développement de Flask:

gunicorn -w 4 -b 127.0.0.1:4000 myproject:app

Si vous diffusez des actifs statiques tels que des images ou des vidéos, avez besoin d'une mise en cache de bas niveau ou avez des demandes d'accès concurrentiel plus élevées, il est recommandé d'utiliser un serveur Web comme nginx et de le faire gérer toutes vos demandes.

En merde ASCII forme:

                +----------+
                | Client 2 |
                +----------+
                      |
                      V 
+----------+      +-------+      +----------+
| Client 1 |----->| nginx |<-----| Client 3 |
+----------+      +-------+      +----------+
                      ^
                      |
                      V
           /--------------------\
           | useful nginx stuff |
           | like asset serving |
           | and rate limiting  |
           \--------------------/
                      |
                      V
               +-------------+
               | WSGI server |
               +-------------+

Pour réellement exécuter le processus du serveur WSGI, vous pouvez utiliser Superviseur . Il redémarre automatiquement le serveur s'il échoue pour une raison quelconque, conserve les journaux et s'exécute en tant que démon afin que votre service démarre au démarrage du serveur.

76
Blender

En gros, non. Le serveur de développement intégré n'est pas sûr pour le déploiement dans un environnement de production.

Le serveur de développement intégré est pour cela. Pour une utilisation en production, vous devez suivre l'une des étapes détaillées ici .

Ceux-ci incluent différents serveurs qui implémentent la spécification WSGI, tels que Apache/mod_wsgi ou l'un de ces serveurs wsgi autonomes http://flask.pocoo.org/docs/deploying/wsgi -autonome /

Il existe également des options WSGI et FastCGI disponibles

17
olly_uk

Bien qu'il soit léger et facile à utiliser, le serveur intégré de Flask n'est pas adapté à la production car il ne s'adapte pas bien et par défaut ne sert qu'une seule demande à la fois. http://flask.pocoo.org/docs/0.12/deploying/

1
MasterEffect117