【发布时间】:2012-08-29 11:17:27
【问题描述】:
与 Flask 捆绑在一起的服务器是否可以安全地部署在生产环境中?如果没有,我应该使用什么来在生产中部署 Flask?
【问题讨论】:
-
这个answer 为这个问题提供了更广泛的背景,并解释了为什么不应该使用与 Flask 捆绑的服务器。
与 Flask 捆绑在一起的服务器是否可以安全地部署在生产环境中?如果没有,我应该使用什么来在生产中部署 Flask?
【问题讨论】:
否。捆绑的服务器是 开发 服务器。它在设计时并未考虑到生产环境。
os.system('rm -rf /'))。 Flask 使用 Werkzeug 的开发服务器,文档也这么说:
开发服务器不适用于生产系统。它专为开发目的而设计,在高负载下表现不佳。有关部署设置,请查看 Application Deployment 页面。
推荐的方法是use a production WSGI server 来运行您的 Flask 应用程序。文档中有一个专门用于部署的部分:Deployment Options。
部署您的应用程序就像安装 uWSGI 或 gunicorn 之类的 WSGI 服务器并运行它而不是 Flask 的开发服务器一样简单:
gunicorn -w 4 -b 127.0.0.1:4000 myproject:app
如果您要提供图像或视频等任何静态资产、需要低级缓存或有更高的并发需求,建议使用像 nginx 这样的网络服务器并让它处理您的所有请求。
糟糕的 ASCII 格式:
+----------+
| Client 2 |
+----------+
|
V
+----------+ +-------+ +----------+
| Client 1 |----->| nginx |<-----| Client 3 |
+----------+ +-------+ +----------+
^
|
V
/--------------------\
| useful nginx stuff |
| like asset serving |
| and rate limiting |
\--------------------/
|
V
+-------------+
| WSGI server |
+-------------+
要真正运行 WSGI 服务器进程,你可以使用Supervisor。如果由于某种原因失败,它会自动重新启动服务器,保留日志并作为守护进程运行,以便您的服务在服务器启动时启动。
【讨论】:
supervisor + gunicorn + nginx。它非常易于设置和维护。
基本上没有。内置的开发服务器在生产环境中部署并不安全。
内置的开发服务器就是为了这个。要在生产中使用,您应该遵循here 详述的步骤之一。
这些包括实现 WSGI 规范的不同服务器,例如 Apache/mod_wsgi 或其中一个独立的 wsgi 服务器 http://flask.pocoo.org/docs/deploying/wsgi-standalone/
【讨论】:
虽然轻量级且易于使用,但 Flask 的内置服务器不适合生产,因为它不能很好地扩展,并且默认情况下一次只处理一个请求。 http://flask.pocoo.org/docs/0.12/deploying/
【讨论】: