python - traduccion - ¿El servidor incluido con Flask es seguro para usar en producción?
werkzeug traduccion (3)
¿El servidor incluido con Flask es seguro para su implementación en un entorno de producción? Si no, ¿qué debería usar para implementar Flask en producción?
Aunque es liviano y fácil de usar, el servidor integrado de Flask no es adecuado para la producción, ya que no escala bien y, por defecto, solo atiende una solicitud por vez. http://flask.pocoo.org/docs/0.12/deploying/
Básicamente, no. El servidor de desarrollo incorporado no es seguro para su implementación en un entorno de producción.
El servidor de desarrollo integrado es solo por eso. Para usar en producción, debe seguir uno de los pasos detallados aquí .
Estos incluyen diferentes servidores que implementan la especificación WSGI, como Apache/mod_wsgi o uno de estos servidores wsgi independientes http://flask.pocoo.org/docs/deploying/wsgi-standalone/
No El servidor incluido es un servidor de desarrollo . No está diseñado teniendo en cuenta los entornos de producción.
- No manejará más de una solicitud a la vez de forma predeterminada.
- Si deja el modo de depuración y aparece un error, se abre un shell que permite la ejecución de código arbitrario en su servidor (piense en el sistema
os.system(''rm -rf /'')
). - El servidor de desarrollo no escala bien.
Flask usa el servidor de desarrollo de Werkzeug, y la documentación dice lo mismo:
El servidor de desarrollo no está destinado a ser utilizado en sistemas de producción. Fue diseñado especialmente para fines de desarrollo y funciona mal bajo alta carga. Para las configuraciones de implementación, eche un vistazo a las páginas de Implementación de aplicaciones .
El enfoque recomendado es usar un servidor WSGI de producción para ejecutar su aplicación Flask. Hay una sección completa dedicada a la implementación en los documentos: Opciones de implementación .
Implementar su aplicación es tan simple como instalar un servidor WSGI como uWSGI o gunicorn y ejecutarlo en lugar del servidor de desarrollo de Flask:
gunicorn -w 4 -b 127.0.0.1:4000 myproject:app
Si está sirviendo cualquier activo estático como imágenes o videos, necesita almacenamiento en caché de bajo nivel o tiene una demanda de concurrencia más alta, se recomienda usar un servidor web como nginx y hacer que maneje todas sus solicitudes.
En forma de mierda ASCII:
+----------+
| Client 2 |
+----------+
|
V
+----------+ +-------+ +----------+
| Client 1 |----->| nginx |<-----| Client 3 |
+----------+ +-------+ +----------+
^
|
V
/--------------------/
| useful nginx stuff |
| like asset serving |
| and rate limiting |
/--------------------/
|
V
+-------------+
| WSGI server |
+-------------+
Para ejecutar realmente el proceso del servidor WSGI, puede usar Supervisor . Se reinicia automáticamente el servidor si falla por alguna razón, guarda registros y se ejecuta como daemon para que su servicio se inicie cuando se inicie el servidor.