Initial Commit
This commit is contained in:
commit
e2f743e8bc
11 changed files with 3104 additions and 0 deletions
39
gunicorn.conf.py
Normal file
39
gunicorn.conf.py
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
"""
|
||||
gunicorn.conf.py — Gunicorn configuration for VideoPress.
|
||||
|
||||
Key choices:
|
||||
worker_class = gevent
|
||||
Gevent workers are required for Server-Sent Events (SSE). A standard
|
||||
sync worker would block on the SSE generator and starve other requests.
|
||||
Gevent patches blocking I/O so each SSE stream is handled as a
|
||||
lightweight greenlet, not a full OS thread.
|
||||
|
||||
workers = 1
|
||||
FFmpeg compression jobs are stored in an in-process dict (active_jobs).
|
||||
Multiple worker *processes* would not share that state. Keep workers=1
|
||||
and let gevent's concurrency handle multiple simultaneous HTTP clients.
|
||||
If you need multi-process resilience, replace the in-process job store
|
||||
with Redis or a database.
|
||||
|
||||
timeout = 0
|
||||
SSE streams are long-lived; the default 30-second worker timeout would
|
||||
kill them. Setting timeout=0 disables the timeout entirely for gevent
|
||||
workers (gevent uses its own internal greenlet scheduling).
|
||||
"""
|
||||
|
||||
import os
|
||||
|
||||
bind = f"0.0.0.0:{os.environ.get('PORT', '8080')}"
|
||||
workers = 1 # see note above — must stay at 1
|
||||
worker_class = 'gevent'
|
||||
worker_connections = 100 # max simultaneous greenlets per worker
|
||||
timeout = 0 # disable worker timeout for SSE streams
|
||||
keepalive = 5
|
||||
loglevel = os.environ.get('LOG_LEVEL', 'info')
|
||||
accesslog = '-' # stdout
|
||||
errorlog = '-' # stderr
|
||||
capture_output = True
|
||||
|
||||
# Forward the real client IP when behind a reverse proxy (nginx / Traefik)
|
||||
forwarded_allow_ips = '*'
|
||||
proxy_allow_ips = '*'
|
||||
Loading…
Add table
Add a link
Reference in a new issue