Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活、轻便、安全且容易上手。它可以很好地结合MVC模式进行开发,开发人员分工合作,小型团队在短时间内就可以完成功能丰富的中小型网站或Web服务的实现。另外,Flask还有很强的定制性,用户可以根据自己的需求来添加相应的功能,在保持核心功能简单的同时实现功能的丰富与扩展,其强大的插件库可以让用户实现个性化的网站定制,开发出功能强大的网站。
自己在Centos系统上捣鼓flask项目走了不少弯路,现在整理出来,供大家参考。这篇先给大家分享一些自己当时查阅的资料中帮助比较大的几篇文章作为理论学习资料,下一篇结合实际经验再写出来分享。总的来说有两大方法:
1.Nginx+Gunicorn+supervisor
gunicorn 可以单独提供服务,但生产环境一般不这样做。首先静态资源(jscssimg)会占用不少的请求资源,而对于 gunicorn 来讲它本身更应该关注实际业务的请求与处理而不应该把资源浪费在静态资源请求上;此外,单独运行 gunicorn 是没有办法起多个进程多个端口来负载均衡的。
nginx 的作用就是弥补以上问题,首先作为前端服务器它可以处理一切静态文件请求,此时 gunicorn 作为后端服务器,nginx 将会把动态请求转发给后端服务器,因此我们可以起多个 gunicorn 进程,然后让 nginx 作均衡负载转发请求给多个 gunicorn 进程从而提升服务器处理效率与处理能力。最后,nginx 还可以配置很多安全相关、认证相关等很多处理,可以让你的网站更专注业务的编写,把一些转发规则等其它业务无关的事情交给 nginx 做。
如果你需要进程一直执行,若该进程因各种原因中断,也会自动重启的话,supervisor是一个很好的选择。 supervisor管理进程,是通过fork/exec的方式将这些被管理的进程当作supervisor的子进程来启动,所以我们只需要将要管理进程的可执行文件的路径添加到supervisor的配置文件中就好了。此时被管理进程被视为supervisor的子进程,若该子进程异常终端,则父进程可以准确的获取子进程异常终端的信息,通过在配置文件中设置autostart=true,可以实现对异常中断的子进程的自动重启。
参考:
https://www.jianshu.com/p/da28ec28ef4b
https://www.linuxidc.com/Linux/2017-12/149986.htm
https://blog.csdn.net/bestallen/article/details/52821202
https://www.jb51.net/article/132849.htm 使用fabric实现远程操作和部署
2.Nginx+uWSGI
Nginx 是高效的 Web 服务器和反向代理服务器,可以用作负载均衡(当有 n 个用户访问服务器时,可以实现分流,分担服务器的压力),可以进行安全过滤,防DDOS攻击等。与 Apache 相比,Nginx 支持高并发,可以支持百万级的 TCP 连接,十万级别的并发连接,部署简单,内存消耗少,成本低,但 Nginx 的模块没有 Apache 丰富。
Nginx 支持 uWSGI 的 uwsgi 协议,因此我们可以将 Nginx 与 uWSGI 结合起来,Nginx 通过 uwsgi_pass 将动态内容交给 uWSGI 处理。
Flask 开发中自带了 web server,通过 Werkzeug,我们可以搭建 WSGI 服务,运行我们的网站,但 Flask 是 Web 框架,并不是 Web 服务器,尽管 Werkzeug 很强大,但只能用于开发,不能用于生产,对于 Web 服务器,我们有更专业的选择,那就是 uWSGI。
uWSGI 是一个全站式的托管服务,它实现了应用服务器(支持多种编程语言)、代理、进程管理器、监视器。取名为 uWSGI 是因为它最早实现的是 Python 语言的 WSGI。
参考资料:
https://blog.csdn.net/spark_csdn/article/details/80790929
https://segmentfault.com/a/1190000004294634
https://www.cnblogs.com/xiaoli3007/p/6020895.html
多个项目部署:
https://blog.csdn.net/zjw_python/article/details/78510005
Tips:
(1)如果安装好uWSGI后无法使用,则可能安装的Python目录不在/usr/bin目录下通过如下命令做个软链接:
ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi
(2)通过 pstree -ap|grep gunicorn查看gunicorn在进程中占用情况,再使用命令 killall -9 uwsgi关闭
(3)Nginx的配置文件为/etc/Nginx下Nginx.conf文件,Nginx启动、停止、重新启动命令
systemctl start nginx.service
systemctl stop nginx.service
systemctl restart nginx.service