gunicorn部署

"部署"

Posted by zwt on September 29, 2020

环境

1
2
pip install gevent
pip install gunicorn

配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import multiprocessing

bind = '0.0.0.0:8000'  # 绑定的ip及端口号,0.0.0.0表示接收任意ip的http请求
# workers = 8  # 用于处理工作进程的数量,为正整数,默认为1。worker推荐的数量为当前的CPU个数*2 + 1
# workers = 2 * multiprocessing.cpu_count() + 1
workers = 3

backlog = 2048  # 等待服务的客户的数量。一般设置为2048(64~2048),超过这个数字将导致客户端在尝试连接时错误
worker_class = "gevent"  # 使用gevent模式,默认的是sync模式,还支持tornado,gthread等形式
debug = False
worker_connections = 1000  # 最大客户端并发数量,默认情况下这个值为1000。此设置将影响gevent和eventlet工作模式
threads = 1  # 处理请求的工作线程数,使用指定数量的线程运行每个worker。为正整数,默认为1。
# chdir = './'        # 你项目的根目录,比如我的app.py文件在/home/ubuntu/app目录下,就填写'/home/ubuntu/app'
proc_name = 'gunicorn.proc'  # 设置进程名,在ps、top等命令中可以看到,缺省为default_proc_name配置
# daemon = True  # 以守护进程形式来运行Gunicorn进程,其实就是将这个服务放到后台去运行。
daemon = False

timeout = 30  # 超过这么多秒后工作将被杀掉,并重新启动。一般设定为30秒
keepalive = 1  # 在keep-alive连接上等待请求的秒数,默认情况下值为2。一般设定在1~5秒之间
max_requests = 0  # 重新启动之前,工作将处理的最大请求数。默认值为0。
limit_request_line = 4094  # HTTP请求行的最大大小,此参数用于限制HTTP请求行的允许大小,默认情况下,这个值为4094。该值的范围为0~8190。此参数可以防止任何DDOS攻击
limit_request_fields = 100  # 限制HTTP请求中请求头字段的数量。此字段用于限制请求头字段的数量以防止DDOS攻击,
# 与limit-request-field-size一起使用可以提高安全性。默认情况下,这个值为100,这个值不能超过32768

limit_request_field_size = 8190  # 限制HTTP请求中请求头的大小,默认情况下这个值为8190。
# 值是一个整数或者0,当该值为0时,表示将对请求头大小不做限制

reload = False  # 代码更新时将重启工作,默认为False。此设置一般用于开发,每当应用程序发生更改时,都会导致工作重新启动
check_config = False  # 显示现在的配置,默认值为False,即显示
preload_app = False  # 在工作进程被复制(派生)之前加载应用程序代码,默认为False。通过预加载应用程序,你可以节省RAM资源,并且加快服务器启动时间。
"""
raw_env:
设置环境变量(key=value),将变量传递给执行环境,如:
gunicorin -b 127.0.0.1:8000 -e abc=123 manager:app
在配置文件中写法:
raw_env=["abc=123"]

pidfile  : 设置pid文件的文件名,如果不设置将不会创建pid文件
worker_tmp_dir  :设置工作临时文件目录,如果不设置会采用默认值。
accesslog : 要写入的访问日志目录

access_log_format:要写入的访问日志格式。如:access_log_format = '%(h)s %(l)s %(u)s %(t)s'
errorlog:要写入错误日志的文件目录。
loglevel:错误日志输出等级。
"""

实施

1
2
3
4
5
6
7
8
9
10
from gevent import pywsgi, monkey
monkey.patch_all()


def start_service():
    if gunicorn:
        server = pywsgi.WSGIServer(('0.0.0.0', 8000), app)
        server.serve_forever()
    else:
        app.run(host='0.0.0.0', port=8000, debug=True)