86 votes

Le serveur fourni avec Flask peut-il être utilisé en toute sécurité en production ?

Le serveur fourni avec Flask peut-il être déployé en toute sécurité dans un environnement de production ? Si ce n'est pas le cas, que dois-je utiliser pour déployer Flask dans un environnement de production ?

130voto

Blender Points 114729

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

  • Par défaut, il ne traitera pas plus d'une demande à la fois.
  • Si vous laissez le mode débogage activé et qu'une erreur survient, 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'est pas très évolutif.

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 ses performances sont médiocres en cas de charge élevée. Pour les configurations de déploiement, consultez la page Déploiement des applications pages.

L'approche recommandée est la suivante utiliser un serveur WSGI de production pour exécuter votre application Flask. Une section entière est consacrée au déploiement dans la documentation : Options de déploiement .

Le déploiement de votre application est aussi simple que l'installation d'un serveur WSGI comme uWSGI ou gunicorn et son exécution à la place du serveur de développement de Flask :

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

Si vous servez des éléments statiques tels que des images ou des vidéos, si vous avez besoin d'une mise en cache de bas niveau ou si vous avez des exigences plus élevées en matière de concurrence, il est recommandé d'utiliser un serveur web tel que nginx et lui demander de traiter toutes vos demandes.

Sous forme ASCII :

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

Pour réellement courir 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 fonctionne comme un démon, de sorte que votre service démarre lorsque le serveur démarre.

21voto

olly_uk Points 3365

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

Le système intégré développement est justement fait pour cela. Pour une utilisation en production, vous devez suivre l'une des étapes suivantes aquí .

Il s'agit notamment de différents serveurs qui mettent en œuvre la spécification WSGI, tels que Apache/mod_wsgi ou l'un de ces serveurs wsgi autonomes http://flask.pocoo.org/docs/deploying/wsgi-standalone/

Il existe également des uWSGI y FastCGI options disponibles

2voto

MasterEffect117 Points 69

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X