欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

gunicorn+gevent+nginx部署flask应用

程序员文章站 2022-06-13 20:37:41
...

一、项目结构

Ip_Asnproject/
├── asnenv   #虚拟环境中的python包
│   ├── bin
│   ├── include
│   ├── lib
│   ├── local
│   └── pip-selfcheck.json
├── AsnProc
│   ├── getres.py
│   ├── __init__.py
│   ├── models.py
│   ├── proctol.py
│   ├── settings.py
│   ├── show_asn.py
│   ├── show_domain.py
│   ├── Start.py
│   └── templates
├── debug.log
├── gun.conf
├── log
└── requirements.tx

二、基本软件包的安装

sudo apt-get install python-setuptools 
sudo apt-get install python-dev 
sudo apt-get install python-pip
sudo apt-get install python-virtualenv #安装虚拟环境

进入虚拟环境后,安装你的flask应用的所有扩展包,最好把所有的扩展包写入requirements.txt

pip install -r requirements.txt

安装gunicorn和gevent

pip install gunicorn
pip install gunicorn pip install gevent

三、启动gunicorn

注意:这里必须进入到项目的根目录且处于虚拟环境中,因为gunicron 是安装在虚拟环境下,也就是
asnenv目录中。

1、配置gunicorn配置文件

 在项目的根目录下 vi gun.conf,写下如下内容
import os
bind = '0.0.0.0:8421' #项目启动的端口号,允许任意地址访问
workers = 8           #workers进程数量
backlog = 2048        #允许挂起的链接数,官方推荐这个值设在64-2048
worker_class = "gevent"  #worker工作模式,默认是sync
#threads = 1  就是设置开启的多线程的数目,官方也是推荐设置为核心数的两至四倍,这个设置只对进程工作方式为Gthread的产生影响
worker_connections = 2048 #worker_connections 进程链接数,设置同时链接客户端的阀值。这个设置只对进程工作方式为Eventlet和Gevent的产生影响。
debug = True           #开启Debug模式,正式环境下不建议
chdir = '/home/lijiajia/Ip_Asnproject/AsnProc' falsk启动的位置
proc_name = 'gunicorn.proc'   #项目进程名称
pidfile='debug.log' #记录debug日志
loglevel='info' #记录日志信息级别,默认为info
pythonpath='/home/lijiajia/Ip_Asnproject/asnenv/bin'#执行项目的python路径,由于是在虚拟环境下需要配置python路径,否则有的安装包找不到

2、启动

方法1、先进入虚拟环境,然后进入项目根目录启动

gunicorn -c gun.conf Start:app    #其中app为Flask实例,Start 为项目启动项

方法2、通过虚拟环境的gunicorn进行启动

/home/path/to/asnenv/bin/gunicorn -c /path/to/gun.conf Start:app

使用 - c 参数进入gun.conf所在的文件路径,否则找不到配置文件。
启动结果如下

[2017-12-07 17:13:38 +0000] [5112] [INFO] Starting gunicorn 19.7.1
[2017-12-07 17:13:38 +0000] [5112] [DEBUG] Arbiter booted
[2017-12-07 17:13:38 +0000] [5112] [INFO] Listening at: http://127.0.0.1:8421 (5112)
[2017-12-07 17:13:38 +0000] [5112] [INFO] Using worker: gevent
[2017-12-07 17:13:38 +0000] [5117] [INFO] Booting worker with pid: 5117
[2017-12-07 17:13:38 +0000] [5120] [INFO] Booting worker with pid: 5120
[2017-12-07 17:13:38 +0000] [5121] [INFO] Booting worker with pid: 5121
[2017-12-07 17:13:38 +0000] [5127] [INFO] Booting worker with pid: 5127
[2017-12-07 17:13:38 +0000] [5128] [INFO] Booting worker with pid: 5128
[2017-12-07 17:13:38 +0000] [5135] [INFO] Booting worker with pid: 5135
[2017-12-07 17:13:38 +0000] [5139] [INFO] Booting worker with pid: 5139
[2017-12-07 17:13:38 +0000] [5143] [INFO] Booting worker with pid: 5143
[2017-12-07 17:13:38 +0000] [5112] [DEBUG] 8 workers

四、nginx的安装与配置

1、nginx的安装

sudo apt-get install nginx

2、添加配置文件

sudo vi /etc/nginx/sites-enabled/default#添加以下内容
server {
        listen   8002; #nginx监听的端口
        server_name  xxx.xxx.xxx.xxx; #公网IP或者已经被解析的域名
        location / {
            proxy_pass http://127.0.0.1:8421; #项目启动的端口
            #proxy_redirect off;
            proxy_set_header Host $host:8002;  
            proxy_set_header X-Real-IP $remote_addr;  #获取访问用户的真实IP
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

}

3、启动nginx

sudo service nginx start
sudo nginx -s reload

注意:如果启动失败,请查看 /var/log/nginx/error.log,查看是否端口已经被占用了

4、访问

打开浏览器访问:

http://localhost:8002

就可以看到你的Flask应用界面了。