与Flask捆绑在一起的服务器是否可以安全地部署在生产环境中?如果没有,我应该使用什么来在生产中部署Flask?
Answers:
没有。捆绑的服务器是开发服务器。它在设计时并未考虑生产环境。
os.system('rm -rf /')
)。Flask使用Werkzeug的开发服务器,并且文档说的是同一件事:
开发服务器不打算在生产系统上使用。它是专为开发目的而设计的,在高负载下性能较差。对于部署设置,请查看“应用程序部署”页面。
推荐的方法是使用生产WSGI服务器来运行Flask应用程序。文档中有一整节专门介绍部署:部署选项。
部署应用程序就像安装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
。设置和维护非常容易。
基本上没有 内置开发服务器对于在生产环境中进行部署并不安全。
内置的开发服务器就是为此而设计的。在生产中使用时,应遵循此处详述的步骤之一。
这些服务器包括实现WSGI规范的不同服务器,例如Apache / mod_wsgi或这些独立的wsgi服务器之一http://flask.pocoo.org/docs/deploying/wsgi-standalone/
Flask轻巧易用,但其内置服务器却无法很好地进行扩展,因为它无法很好地扩展,并且默认情况下一次只能处理一个请求。 http://flask.pocoo.org/docs/0.12/deploying/