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应用界面了。