Merge pull request #1449 from meeb/tcely-gunicorn-configuration
chore(gunicorn): review and update configuration
This commit is contained in:
@@ -21,4 +21,4 @@ then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
exec s6-setuidgid app \
|
exec s6-setuidgid app \
|
||||||
/usr/local/bin/gunicorn -c /app/tubesync/gunicorn.py --capture-output tubesync.wsgi:application
|
/usr/local/bin/gunicorn --config /app/tubesync/gunicorn.py
|
||||||
|
|||||||
@@ -2,37 +2,61 @@ import os
|
|||||||
import multiprocessing
|
import multiprocessing
|
||||||
|
|
||||||
|
|
||||||
def get_num_workers():
|
|
||||||
# Sane max workers to allow to be spawned
|
|
||||||
cpu_workers = multiprocessing.cpu_count() * 2 + 1
|
|
||||||
# But default to 3
|
|
||||||
try:
|
|
||||||
num_workers = int(os.getenv('GUNICORN_WORKERS', 3))
|
|
||||||
except ValueError:
|
|
||||||
num_workers = cpu_workers
|
|
||||||
if 0 < num_workers < cpu_workers:
|
|
||||||
return num_workers
|
|
||||||
else:
|
|
||||||
return cpu_workers
|
|
||||||
|
|
||||||
|
|
||||||
def get_bind():
|
def get_bind():
|
||||||
host = os.getenv('LISTEN_HOST', '127.0.0.1')
|
host = os.getenv('LISTEN_HOST', '127.0.0.1')
|
||||||
port = os.getenv('LISTEN_PORT', '8080')
|
port = os.getenv('LISTEN_PORT', '8080')
|
||||||
return '{}:{}'.format(host, port)
|
return f'{host}:{port}'
|
||||||
|
|
||||||
|
def get_num_workers():
|
||||||
|
# Sane max workers to allow to be spawned
|
||||||
|
cpu_workers = multiprocessing.cpu_count() * 2 + 1
|
||||||
|
# But default to 3
|
||||||
|
num_workers = 3
|
||||||
|
try:
|
||||||
|
gunicorn_workers = os.getenv('GUNICORN_WORKERS')
|
||||||
|
web_concurrency = os.getenv('WEB_CONCURRENCY')
|
||||||
|
if gunicorn_workers is not None:
|
||||||
|
try:
|
||||||
|
num_workers = int(gunicorn_workers)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
elif web_concurrency is not None:
|
||||||
|
try:
|
||||||
|
num_workers = int(web_concurrency)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
return max(1, min(num_workers, cpu_workers))
|
||||||
|
|
||||||
|
|
||||||
workers = get_num_workers()
|
### Configuration
|
||||||
timeout = 90
|
wsgi_app = 'tubesync.wsgi:application'
|
||||||
chdir = '/app'
|
|
||||||
|
##### Logging
|
||||||
|
# Access logs are printed to stdout from nginx
|
||||||
|
accesslog = None
|
||||||
|
errorlog = '-'
|
||||||
|
loglevel = 'info'
|
||||||
|
capture_output = True
|
||||||
|
|
||||||
|
##### Process
|
||||||
|
proc_name = 'gunicorn'
|
||||||
daemon = False
|
daemon = False
|
||||||
control_socket_disable = True
|
|
||||||
control_socket = '/run/app/gunicorn.ctl'
|
|
||||||
pidfile = '/run/app/gunicorn.pid'
|
|
||||||
user = 'app'
|
user = 'app'
|
||||||
group = 'app'
|
group = 'app'
|
||||||
loglevel = 'info'
|
chdir = '/app'
|
||||||
errorlog = '-'
|
control_socket = '/run/app/gunicorn.ctl'
|
||||||
accesslog = '/dev/null' # Access logs are printed to stdout from nginx
|
control_socket_disable = True
|
||||||
django_settings = 'django.settings'
|
pidfile = '/run/app/gunicorn.pid'
|
||||||
|
|
||||||
|
##### Server
|
||||||
bind = get_bind()
|
bind = get_bind()
|
||||||
|
django_settings = 'django.settings'
|
||||||
|
graceful_timeout = 120
|
||||||
|
keepalive = 60
|
||||||
|
max_requests = 1000
|
||||||
|
max_requests_jitter = 100
|
||||||
|
timeout = 90
|
||||||
|
worker_class = 'sync'
|
||||||
|
workers = get_num_workers()
|
||||||
|
|||||||
Reference in New Issue
Block a user