与Flask捆绑在一起的服务器是否可以安全地在生产环境中进行部署?如果没有,我应该使用什么来在生产中部署Flask?
答案 0 :(得分:71)
否即可。捆绑服务器是开发服务器。它的设计并非考虑到生产环境。
os.system('rm -rf /')
)。 Flask使用Werkzeug的开发服务器,文档也说了同样的事情:
开发服务器不适用于生产系统。它专为开发目的而设计,在高负载下性能很差。对于部署设置,请查看Application Deployment页。
推荐的方法是use a production WSGI server运行Flask应用程序。整个部分专门用于在文档中进行部署:Deployment Options。
部署应用程序就像安装WSWS服务器(如uWSGI或gunicorn)并运行它而不是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。如果由于某种原因失败,它会自动重启服务器,保留日志,并作为守护程序运行,以便在服务器启动时启动服务。
答案 1 :(得分:17)
基本上没有。内置开发服务器在生产环境中部署是不安全的。
内置的开发服务器就是这样的。要在生产中使用,您应该遵循详细here。
中的一个步骤这些包括实现WSGI规范的不同服务器,例如Apache/mod_wsgi或其中一个独立的wsgi服务器http://flask.pocoo.org/docs/deploying/wsgi-standalone/
答案 2 :(得分:1)
虽然重量轻且易于使用,但Flask的内置服务器不适合生产,因为它不能很好地扩展,默认情况下一次只能提供一个请求。 http://flask.pocoo.org/docs/0.12/deploying/