在生产环境中,flask自带的服务器,无法满足性能要求,我们这里采用Gunicorn做wsgi容器,来部署flask程序。
Gunicorn(绿色独角兽)是一个Python WSGI的HTTP服务器。从Ruby的独角兽(Unicorn )项目移植。该Gunicorn服务器与各种Web框架兼容,实现非常简单,轻量级的资源消耗。Gunicorn直接用命令启动,不需要编写配置文件,相对uWSGI要容易很多。 Gunicorn 服务器与许多 Web 框架广泛兼容,简单实现,轻松服务器资源并且速度相当快。
区分几个概念:

WSGI:全称是Web Server Gateway Interface(web服务器网关接口),它是一种规范,它是web服务器和web应用程序之间的接口。它的作用就像是桥梁,连接在web服务器和web应用框架之间。
uwsgi:是一种传输协议,用于定义传输信息的类型。
uWSGI:是实现了uwsgi协议WSGI的web服务器。
我们的部署方式: nginx + gunicorn + flask

Gunicorn 服务器作为 wsgi app 的容器,能够与各种 Web 框架兼容(flask,django 等),得益于 gevent 等技术,使用 Gunicorn 能够在基本不改变 wsgi app 代码的前提下,大幅度提高 wsgi app 的性能。

安装命令

pip3 install gunicorn

基于Gunicorn启动我们的Flask项目(打开项目目录下执行)

gunicorn -w 4 -b 127.0.0.1:5001 manage:app   
用gunicorn启动flask服务
-w 4 [开启4个进程]
-b 127.0.0.1:5001 [启动flask服务的ip+端口]
manage [启动flask服务的文件名.py]
app [项目实例]

启动Flask项目后查看Gunicorn进程命令
1403368-20190814211832936-1801892500.png

项目指定的是本地回环地址【127.0.0.1】,也就是只有本机才可以访问这个项目;

为了我们的项目能够实现高并发我们还需要配置nginx;

Nginx反向代理Flask项目

nginx配置文件配置

server {
    # 监听80端口
    listen 80;
    # 将域名解析到主机后填写到server_name,多个用,号分割
    server_name www.yourdomain.com; 
    # 默认请求的url
    location / {
        #请求转发到gunicorn服务器
        proxy_pass http://127.0.0.1:5001;  # 这里的ip+端口就是我们启动flak的ip和端口
        #设置请求头,并将头信息传递给服务器端 
        proxy_set_header Host $host; 
    }
}

配置完nginx需要重启nginx配置文件才会生效,选用重载配置平滑启动。

防火墙

将flask使用的端口放开。
部分云服务器(如阿里云)还需要在控制台防火墙中设置放行。

终止gunicorn进程

查询主进程

pstree -ap | grep gunicorn

关闭主进程

kill -9 查询出的pid

标签: none

评论已关闭