56 lines
1.6 KiB
Python
56 lines
1.6 KiB
Python
"""Gunicorn 生产部署配置
|
||
|
||
启动:gunicorn -c gunicorn.conf.py gvsds.wsgi:application
|
||
|
||
参数可通过环境变量覆盖:
|
||
GUNICORN_BIND 监听地址(默认 127.0.0.1:8000)
|
||
GUNICORN_WORKERS worker 数(默认 CPU*2+1)
|
||
GUNICORN_TIMEOUT 请求超时秒(默认 60)
|
||
GUNICORN_MAX_REQUESTS 单 worker 最大请求数(防内存泄漏,默认 1000)
|
||
"""
|
||
import os
|
||
import multiprocessing
|
||
|
||
Bind = os.environ.get('GUNICORN_BIND', '127.0.0.1:8000')
|
||
|
||
# worker 数:默认 CPU*2+1,可环境变量覆盖
|
||
Workers = int(os.environ.get('GUNICORN_WORKERS', multiprocessing.cpu_count() * 2 + 1))
|
||
|
||
# 同步 worker 模式(WSGI 标准,适合 Django)
|
||
WorkerClass = 'sync'
|
||
|
||
# 请求超时(秒)——长任务应卸载到 Celery
|
||
Timeout = int(os.environ.get('GUNICORN_TIMEOUT', 60))
|
||
|
||
# 优雅关闭超时
|
||
GracefulTimeout = 30
|
||
|
||
# 保持连接
|
||
Keepalive = 5
|
||
|
||
# 单 worker 最大请求数后重启,防止内存泄漏
|
||
MaxRequests = int(os.environ.get('GUNICORN_MAX_REQUESTS', 1000))
|
||
MaxRequestsJitter = 50
|
||
|
||
# 预加载应用(共享连接池,节省内存,加快启动)
|
||
PreloadApp = True
|
||
|
||
# 限制请求行/字段大小,防大文件攻击
|
||
LimitRequestLine = 8190
|
||
LimitRequestField = 8190
|
||
LimitRequestFieldSize = 8190
|
||
|
||
# 日志
|
||
Accesslog = '-'
|
||
Errorlog = '-'
|
||
Loglevel = os.environ.get('GUNICORN_LOG_LEVEL', 'info')
|
||
|
||
# 优雅重启:收到 SIGTERM 时等待请求完成
|
||
CaptureOutput = True
|
||
|
||
# 进程名(便于 ps/top 识别)
|
||
ProcName = 'gvsds-gunicorn'
|
||
|
||
# 当 SIGTERM 时,先停止接受新请求,等待 GracefulTimeout 后强杀
|
||
GracefulExist = True
|