gunicorn的配置使用

安装

pip安装

pip install gunicorn

源码安装

pip install git+https://github.com/benoitc/gunicorn.git

与github上的开发保持同步

pip install -U git+https://github.com/benoitc/gunicorn.git

指令

基本用法:

$ gunicorn [OPTIONS] [WSGI_APP]

WSGI_APP指的是模块名称:变量名称(程序入口)。模块名称可以是完整的路径。变量名称是指可在指定模块中找到的WSGI可调用项。

OPTIONS是gunicorn的参数

gunicorn参数

config

指定配置文件,通过配置文件中的参数启动

命令行:-c或者--config后面跟配置文件的路径或者python:module_name

gunicorn -c gunicorn.conf test.wsgi  # django项目
gunicorn -c gunicorn.conf test:app    # flask项目

默认是:./gunicorn.conf.py

wsgi_app

默认: None

模式中的WSGI应用程序路径$(MODULE_NAME):$(VARIABLE_NAME)模块名称:变量名称(程序入口)

示例代码

# main.py
from flask import Flask

app = Flask(__name__)

@app.route('/')
def test():
    return 'Hello World'

if '__name__' == '__main__':
    app.run()

启动命令

gunicorn -c gunicorn.conf main:app

reload

用于项目修改后自动重启

命令行:--reload

默认 :False

gunicorn -c gunicorn.conf --reload main:app

accesslog

要写入的访问日志文件。'-' 表示登录到标准输出。

命令行: --access-logfile FILE

默认: None

gunicorn --reload --access-logfile gunicorn.log main:app

access_log_format

写入日志的格式。

命令行: --access-logformat 日志格式

默认: '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"'

errorlog

要写入的错误日志文件。

命令行:--error-logfile FILE or --log-file FILE

默认: '-',使gunicorn日志记录到stderr。

loglevel

日志输出的等级,会将设置等级及以上的信息写入到errorlog参数指定的文件中。

命令行: --log-level LEVEL

默认: 'info'

gunicorn --reload --log-level error --access-logfile gunicorn.log --error-logfile error.log main:app

有效级别名称为:

  • 'debug'
  • 'info'
  • 'warning'
  • 'error'
  • 'critical'

capture_output

命令行: --capture-output

默认: False

将stdout / stderr重定向到errorlog中的指定文件。

chdir

命令行: --chdir

默认: '/home/docs/checkouts/readthedocs.org/user_builds/gunicorn-docs/checkouts/latest/docs/source'

加载应用程序之前,将目录更改为指定目录。

daemon

命令行: -D--daemon

默认: False

守护Gunicorn进程,进入后台运行

raw_env

命令行: -e ENV--env ENV

默认: []

在执行环境中设置环境变量。

应该是key=value格式的字符串列表。

例如在命令行上:

$ gunicorn -b 127.0.0.1:8000 --env FOO=1 test:app

或在配置文件中:

raw_env = ["FOO=1"]

pidfile

命令行:-p FILE``--pid FILE

默认: None

PID文件使用的文件名,会将当前服务所使用的pid写入文件。

如果未设置,则不会写入任何PID文件。

gunicorn --reload --log-level error --access-logfile gunicorn.log --error-logfile error.log --pid pid.txt main:app

user

命令行:-u USER--user USER

默认: 1005

将工作进程切换为以该用户身份运行。

有效的用户ID(作为整数)或可以通过调用pwd.getpwnam(value)None不更改工作进程用户的方式检索的用户名。可通过命令id查看当前用户的id或组。

group

命令行:-g GROUP``--group GROUP

默认: 205

切换工作进程以该组身份运行。

可以通过调用pwd.getgrnam(value)None不更改工作进程组来获取的有效组ID(作为整数)或用户名。

pythonpath

命令行: --pythonpath STRING

默认: None

用逗号分隔的目录列表,以添加到Python路径。

例如 '/home/djangoprojects/myproject,/home/python/mylibrary'

proxy_protocol

命令行: --proxy-protocol

默认: False

启用检测代理协议(代理模式)。

允许同时使用HTTP和代理。对于将stunnel作为HTTPS前端以及将Gunicorn作为HTTP服务器,它可能会很有用。

代理协议:http : //haproxy.1wt.eu/download/1.5/doc/proxy-protocol.txt

stunnel配置示例:

[https]
protocol = proxy
accept  = 443
connect = 80
cert = /etc/ssl/certs/stunnel.pem
key = /etc/ssl/certs/stunnel.key

bind

命令行:-b ADDRESS``--bind ADDRESS

默认: ['127.0.0.1:8000']

要绑定的套接字。

形式的字符串:HOSTHOST:PORTunix:PATHfd://FD。IP是有效的HOST

backlog

命令行: --backlog INT

默认: 2048

最大挂起连接数。

这是指可以等待服务的客户端数量。超过此数字将导致客户端在尝试连接时收到错误消息。它只应影响负载很大的服务器。

必须为正整数。通常设置在64-2048范围内。

workers

命令行:-w INT``--workers INT

默认: 1

处理请求的工作进程数。

worker_class

服务器的类型。

命令行: -k STRING--worker-class STRING

默认: 'sync'是同步服务器

  • sync
  • eventlet-需要eventlet> = 0.24.1(或通过安装 )pip install gunicorn[eventlet]
  • gevent -需要gevent> = 1.4(或通过安装 )pip install gunicorn[gevent]
  • tornado -需要tornado> = 0.2(或通过安装 )pip install gunicorn[tornado]
  • gthread -Python 2需要安装Futures软件包(或通过安装)pip install gunicorn[gthread]

性能最好的是gevent,推荐使用。异步服务器。

threads

命令行: --threads INT

默认: 1

用于处理请求的工作线程数。通常设置为2-4.

worker_connections

命令行: --worker-connections INT

默认: 1000

并发客户端的最大数量。

此设置仅影响Eventlet和Gevent工作者类型。

timeout

超时时间

命令行:-t INT``--timeout INT

默认: 30 ,通常,默认的三十秒就足够了。

keepalive

命令行: --keep-alive INT

默认: 2

等待“保持活动”连接上的请求的秒数。

对于直接连接到客户端的服务器,通常设置在1-5秒的范围内(例如,当您没有单独的负载平衡器时)。当将Gunicorn部署在负载均衡器后面时,将其设置为更高的值通常是有意义的。

注意:sync worker不支持持久连接,将忽略此选项。

使用配置文件示例

import multiprocessing
import os

from gevent import monkey

monkey.patch_all()

chdir = os.path.dirname(os.path.abspath(__file__))

bind = '0.0.0.0:8000'
backlog = 2048
timeout = 60
worker_class = 'gevent'

workers = multiprocessing.cpu_count() * 2 + 1
threads = multiprocessing.cpu_count() * 2
daemon = False

loglevel = 'info'
access_log_format = '%(t)s %(p)s %(h)s "%(r)s" %(s)s %(L)s %(b)s %(f)s" "%(a)s"'

accesslog = 'logs/gunicorn_access.log'
errorlog = 'logs/gunicorn_error.log'

pidfile = 'logs/gunicorn.pid'

启动

gunicorn -c gunicorn.conf.py test.wsgi

随系统启动systemctl

创建service文件

vim /etc/systemd/system/test.service

配置文件

[Unit]
Description=phytium_service
After=network.target

[Service]
User=root
WorkingDirectory=/root/xxx
ExecStart=/root/xxx/env/bin/gunicorn -c /root/xxx/gunicorn.conf.py xxx.wsgi
Restart=always
RestartSec=3

Environment=PYTHONUNBUFFERED=true
Environment=DJANGO_SETTINGS_MODULE=xxx.settings

[Install]
WantedBy=default.target

Description:描述服务
After:描述服务类别
[Service]服务运行参数的设置
Type=forking是后台运行的形式
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:[Service]的启动、重启、停止命令全部要求使用绝对路径
[Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3

其他命令

systemctl [操作命令] test.service

操作命令:
start,启动服务
disable,停止自启
status,查看服务状态
restart,重新启动服务
enable,
posted @ 2022-01-25 11:24  Lowell  阅读(4660)  评论(0编辑  收藏  举报