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,


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM