flaskgunicorn的简单介绍

本篇文章给大家谈谈flaskgunicorn,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

gunicorn部署Flask服务

作为一个Python选手,工作中需要的一些服务接口一般会用Flask来开发。

Flask非常容易上手,它自带的 app.run(host="0.0.0.0", port=7001) 用来调试非常方便,但是用于生产环境无论是处理高并发还是鲁棒性都有所欠缺,一般会配合WGSI容器来进行[生产环境的部署][1]。

小磊哥推荐了参考文章[1]中的部署方式,希望将已有的服务放到gunicorn或者Tornado中部署,并用supervisor来管理所有进程(有几个不同的服务)。

经过调研和尝试

首先pip安装gunicorn。

pip install gunicorn --user

由于是部署在公司云主机上,通常不会给root权亏没带限。之前都是提工单给SA sudo装的,后来发现更安全也更方便的方法是 pip install xxx --user ,美中不足是安装完以后需要 手动添加PATH

export PATH=/home/username/.local/bin:$PATH

方便起见可以加到 ~/.bash_profile 中

简单地,gunicorn可以通过 gunicorn -w 4 -b 127.0.0.1:4000 run:app 启动一个Flask应用。其中,

其中run.py中文件的可能形式是:

通过 gunicorn -h 可以看到gunicorn有非常多的配置项,因此通常会写成一个config.py文件来进行配置。看了一下文档似乎没有给出正确的config.py中配置项的命名,并且有些博客博主给出的配置项命名是错误的,导致配置没有生效,踩了不少的坑(我找不到那篇坑坑的文章了)。这篇博客[2]给出了一些比较常用且 正确 的配置。

我所用项目的配置察扒项如下:

生产环境不需要这个配置项,但调试的时候还是挺好用的。而且,开启debug项后,在启动gunicorn的时候可以看到所有可配置项的配置,如下所示。

之前在被上一篇博主欺骗的时候,仔细看了调试销芦信息,发现 accesslog 和 errorlog 都没有被配置,所以导致启动以后看不到任何日志。

config.py中只需要配置需要修改的项的,大部分采用默认配置即可。默认配置的具体配置内容可以通过 gunicorn -h 来查询。

* 配置文件和调试信息来自两个不同进程,因此信息可能有细微差异

worker_class是指开启的每个工作进程的模式类型,默认为sync模式,也可使用gevent模式。

workers 是工作进程数量,在上述 config.py 中,取的是CPU的数量。需要注意部署机器的性能,不能无限制多开。多篇文章中推荐了 multiprocessing.cpu_count() * 2 + 1 这个数量,考虑到我会在一个机器上部署两个服务,因此数量减半。

daemon = True 意味着开启后台运行,默认为 False

gunicorn的环境配置和使用都比较简单,也解决了我总是用nohup python run.py out.log 21 来启动Flask后台服务的问题。

在采用gunicorn部署之前,我也对后台服务的目录结构进行了调整。虽然只是便利工作的服务,也希望可以尽可能变的更加professional~

传送门: Flask目录调整

参考文章:

[1] 部署方式实践

[2]

部署flask应用时,为什么会需要gunicorn/uWSGI

Gunicorn(with gevent)性能和uwsgi差不多,但是纯裤肢Python,部署方便,也不需要编译uwsgi。

Nginx这里只是反代+server静态文件,不做雀肆其他工作,完全由Gunicorn也可以起服务 flask可以和gevent共用的,并发会好很多。胡岁世 用gevent monkey patch,可以尽。

Python3+Gunicorn+Nginx 部署Flask项目

前言: 之前在本地测试项目的过程中一直使用python app.py的方式来启动项目,这种方式在本地测试的亏明话还可以,但是在生产环境的话就不能使用这种方式。

原因:

1.可能会出现无响应情况

2.无法支持高并发和多线程

3.无法合理利用服务器资源

生产环境: Centos7、Python3

需要模块: Gunicon、Nginx、Flask

一、安装Gunicorn

Gunicorn是一个高效的Web服务器,地蠢橘位相当于Java中的Tomcat。简单来说gunicorn封装了HTTP的底层实现,我们通过gunicorn启动服务,用户请求与服务相应都经过gunicorn传输。

1.创建虚拟环境

项目上传到服务器指定目录下,然后创建python3的虚拟环境,激活并进去虚拟环境,在虚拟环境下可以看到命令前有虚拟环境的名称。(之前在使用Gunicorn模块的过程中,没有使用虚拟环境,导致我启动项目有一直提示没有找到gunicorn这个命令,可能是我在使用python全局环境的过程中,有某些模块影响到这个gunicorn模块,后面在使用虚拟环境就没有出现这个问题。)

2.安装项目所需的模块

3.安装gunicorn

二、项目配置启动

1.创建一个简易的web程序

2.启动服务

4--启动4个进程来分配服务

0.0.0.0--允许任意主机访问

5000--启动端口(与nginx转发的端口一致)

app:目标文件

app:指定模块

补充部分: gunicorn和nginx关系

gunicorn 可以单独提供服务,但生产环境一般不这样做。首先静态资源(带空团jscssimg)会占用不少的请求资源,而对于 gunicorn 来讲它本身更应该关注实际业务的请求与处理而不应该把资源浪费在静态资源请求上;此外,单独运行 gunicorn 是没有办法起多个进程多个端口来负载均衡的。

nginx 的作用就是弥补以上问题,首先作为前端服务器它可以处理一切静态文件请求,此时 gunicorn 作为后端服务器,nginx 将会把动态请求转发给后端服务器,因此我们可以起多个 gunicorn 进程,然后让 nginx 作均衡负载转发请求给多个 gunicorn 进程从而提升服务器处理效率与处理能力。最后,nginx 还可以配置很多安全相关、认证相关等很多处理,可以让你的网站更专注业务的编写,把一些转发规则等其它业务无关的事情交给 nginx 做。

参考链接:

[img]

Flask使用gunicorn和docker部署项目

使用gunicorn和gevent主要是为了弥补flask在并发上的不足

flask启动文件应该尽量简滚盯老洁则搜

执行 docker ps 看容器是否运行成功,也可以查大升看日志看容器运行情况。

至此,部署完成。若有错误或者疑问请留言!

Flask + Nginx + Gunicorn + Gevent部署

==本教程仅适用于Linux和Mac==

部署是建立在你已经基本完成开发的基础上,所以Python的安装什么的就不再进行说明了,上述依赖的安装也不再赘述,请根据自己的平台查找安装教程,这里主要对配置进行说明。

Gunicorn的配置相比于uWSGI简单了很多,基本上一行命令就可以把项目跑起来。性能上据说uWSGI更加强大一些,不过在差距上并不明显, 至少在我的日常使用中没有因为Gunicorn出现过性能瓶颈,真的到了那一天再进行更换也不是什么特别麻烦的事情。

在项目跟目录创建一个gunicorn.py文件,当然名字和文件位置你可以进行更改。

这里我们采用gevent模式来支持并发,可以根据你自己的实际情况来进行模式选择。我最近的项目因为阻塞主要是对SAP数据查询导致的,所使用的库并液首不是纯Python编写,也没有说明支持协程,所以我我采用了gthead模式。

首先我们调用了gevent的Monkey Patch黑科技,该方法hook了标准卡里面的大部分阻塞操作,使得在我们进行长时间IO操作时可以切换到别的协程,从而实现异步并发。然后我们创建log目录,设置log路径,设置端口什么的。

接着我们设置worker的数量,也就是进程数,通常设置为服务器孝埋猜核心数2倍+1,这也是官方文档事例中的配置。最后再设置一下worker的模式,这里填写的就是前文所说的gevent。

更多项目配置请参照官方文档

不管你是用flask-script还是flask-cli来启动项目,一定会有一个入口文件(这名字一定很不规范),里面创建并启动了Flask App实例。这里再创建一个程序入口,这个入口专门为Gunicorn服务,用来启动生产环境。

再根目录创建一个wsgi.py文件,名字目录还是可以随意更改。

这里和你普通的程序入口并没有什么区别,中间对logger的一顿操作是把app的logger修改为gunicorn的,这样我们再上一步设置的log路径才能生效。

测试配置是否正确最简单的方法就是跑一下。

如果你是用了虚拟环境,首先要先进入虚拟环境(这里强烈建议使用虚拟环境,我还是使用传统的virtualenv)。

然后执行命令:

gunicorn.py和wsgi:application根据前两部的文件名和变量名自行更改

Uninx哲学,没有消息就是最好的消息,如果没有报错,程序就顺利跑起来了。这时如果有图形界面或者设置的端口是开放给外网的,你就可以访问项目试试看是否成功运行,如果无法通过外网访问并没有图形界面,也可以通过wget命令进行测试,请确保这个步骤正确再进行下一步操作。如果这一步顺利完成,就可以Ctrl+C退出了,因为我们不需要手动启动项目,接下来我们将通过Supervisor来帮助我们管理项目的进程。

Supervisor是一个用Python编写的进程管理工具,我们这里通过他来管理我们的项目进程,开启关闭啥的。

首先检查是否存在配置文件,一般配置文件的路径是

如果配置文件不存在,我们可以通过命令来生成

配置文件的内容很多,项目配置可以参照官网文档

打开配置文件的最后一行

默认一般是注释掉的,我们可以取消注释,这行配置的作用也很浅显,就是导入设置的路径下的所有conf文件,这使得我们如果有多个项目可以不用都写在同一个配置文件里,可以一个项目一个配置文件,更适合管理。这里的路径也是可以按照实际需求随意更改。这里巧型需要重启Supervisor服务,我刚开始做的时候都是直接重启服务器,不过如果你没有把Supervisor自启动,重启后需要手动启动Supervisord

在设置的路径下新建一个配置文件,命令请根据上一步设置的扩展名。

project_name按照你的实际需求修改,作为你这个服务的唯一标识,用于启动停止服务时使用。

command修改为测试gunicorn时使用的命令,这里我因为使用了虚拟环境,所以我使用了绝对路径,指向了虚拟环境的gunicorn,这种配置我个人还是喜欢都使用绝对路径。

directory指定了工作路径,通常设置为项目根目录,我们填写的gunicorn.py和wsgi都是基于这个路径的。

更多配置请参照官网的配置文档。

管理Supervisor的项目是使用supervisorctl命令,我们可以启动项目试试看

如果没有报错,应该可以和上一步测试gunicorn一样可以正常访问项目了。

Nginx的各种好处就自行查询吧,我们这里就做一下简单的配置。

因为我的项目一般都是前后端分离的,所以这里这里还会配置CORS来解决跨域的问题

这里就不细说了,整段贴出来,说一下其中一些重点

add_header相关设置主要是CORS,解决跨域的

第一第二行末尾加了always作用是默认CORS只对2XX状态码有效,如果你用4XX或者别的错误状态返回结果依旧会提示跨域,所以加上always使得所有状态都可以正确返回。

Allow-Methods:请根据直接用到的请求方式进行设置,OPTIONS一定需要加上。

Allow-Headers:如果你在header的头部加上了自定义字段,请在这里也加上。

、、、

if ($request_method = 'OPTIONS') {

return 204;

}

、、、

CORS在进行POST请求前会发一次OPTIONS请求试探试探,这里我们只要检测到OPTIONS请求,我们就返回204,告诉浏览器来吧来吧。

proxy_pass就是设置Nginx转发的地址,也就是设置成Gunicorn设置的地址和端口

proxy_set_header请根据你设置Nginx Server的端口填写

最后重启一下Nginx就可以了

看着步骤很多,其实除了Gunicorn都不是必须的,Supervisor和Nginx你要是不想使用其实也可以不使用,我说得比较啰嗦,不过其实很容易。

flask - gunicorn 配置

python常见慧肆数的web部署搭配nginx+gunicorn,下面记录一下gunicorn的雹拦配置使用前首。

启动

关于flaskgunicorn和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

标签列表