53 lines
1.3 KiB
Python
53 lines
1.3 KiB
Python
# Gunicorn 生產環境配置
|
|
import multiprocessing
|
|
import os
|
|
|
|
# 服務器設置
|
|
bind = "0.0.0.0:5000"
|
|
workers = min(multiprocessing.cpu_count() * 2 + 1, 8) # 最多8個worker
|
|
worker_class = "sync"
|
|
worker_connections = 1000
|
|
max_requests = 1000
|
|
max_requests_jitter = 50
|
|
|
|
# 超時設置
|
|
timeout = 300
|
|
keepalive = 5
|
|
graceful_timeout = 300
|
|
|
|
# 日誌設置
|
|
accesslog = "-" # stdout
|
|
errorlog = "-" # stderr
|
|
loglevel = "info"
|
|
access_log_format = '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s" %(D)s'
|
|
|
|
# 進程設置
|
|
preload_app = True
|
|
daemon = False
|
|
pidfile = "/tmp/gunicorn.pid"
|
|
|
|
# 性能調優
|
|
worker_tmp_dir = "/dev/shm" # 使用內存作為臨時目錄
|
|
|
|
# 安全設置
|
|
limit_request_line = 8190
|
|
limit_request_fields = 100
|
|
limit_request_field_size = 8190
|
|
|
|
def when_ready(server):
|
|
server.log.info("Server is ready. Spawning workers")
|
|
|
|
def worker_int(worker):
|
|
worker.log.info("worker received INT or QUIT signal")
|
|
|
|
def pre_fork(server, worker):
|
|
server.log.info("Worker spawned (pid: %s)", worker.pid)
|
|
|
|
def post_fork(server, worker):
|
|
server.log.info("Worker spawned (pid: %s)", worker.pid)
|
|
|
|
def post_worker_init(worker):
|
|
worker.log.info("Worker initialized (pid: %s)", worker.pid)
|
|
|
|
def worker_abort(worker):
|
|
worker.log.info("Worker aborted (pid: %s)", worker.pid) |