From ef9ad711c2d0408d0c21a889958a31fcb725ea4c Mon Sep 17 00:00:00 2001 From: Guillaume Pellerin Date: Tue, 29 Jun 2021 01:45:49 +0200 Subject: [PATCH] try uwsgi prod config by https://www.techatbloomberg.com/blog/configuring-uwsgi-production-deployment/ --- app/settings.py | 1 + app/wsgi.ini | 39 +++++++++++++++++++++++++++++++++++++++ app/wsgi.sh | 5 +---- teleforma/views/core.py | 2 ++ 4 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 app/wsgi.ini diff --git a/app/settings.py b/app/settings.py index fae33cc9..60cf799d 100644 --- a/app/settings.py +++ b/app/settings.py @@ -280,6 +280,7 @@ SESSION_ENGINE = "django.contrib.sessions.backends.cached_db" # SESSION_ENGINE = "django.contrib.sessions.backends.signed_cookies" #SESSION_ENGINE = "unique_session.backends.session_backend" UNIQUE_SESSION_WHITELIST = (1, 2042) +SESSION_EXPIRE_AT_BROWSER_CLOSE = False RECAPTCHA_PUBLIC_KEY = '6Ldq5DgbAAAAADkKg19JXlhx6F1XUQDsrXfXqSP6' RECAPTCHA_PRIVATE_KEY = '6Ldq5DgbAAAAAOVDOeF2kH8i2e2VSNHpqlinbpAJ' diff --git a/app/wsgi.ini b/app/wsgi.ini new file mode 100644 index 00000000..5026c5a2 --- /dev/null +++ b/app/wsgi.ini @@ -0,0 +1,39 @@ +[uwsgi] + +uid = www-data +gid = www-data + +strict = true +master = true +enable-threads = true +vacuum = true ; Delete sockets during shutdown +single-interpreter = true +die-on-term = true ; Shutdown when receiving SIGTERM (default is respawn) +need-app = true + +disable-logging = true ; Disable built-in logging +log-4xx = true ; but log 4xx's anyway +log-5xx = true ; and 5xx's + +harakiri = 60 ; forcefully kill workers after 60 seconds +py-callos-afterfork = true ; allow workers to trap signals + +max-requests = 1000 ; Restart workers after this many requests +max-worker-lifetime = 3600 ; Restart workers after this many seconds +reload-on-rss = 2048 ; Restart workers after this much resident memory +worker-reload-mercy = 60 ; How long to wait before forcefully killing workers + +cheaper-algo = busyness +processes = 128 ; Maximum number of workers allowed +cheaper = 8 ; Minimum number of workers allowed +cheaper-initial = 16 ; Workers created at startup +cheaper-overload = 1 ; Length of a cycle in seconds +cheaper-step = 16 ; How many workers to spawn at a time + +cheaper-busyness-multiplier = 30 ; How many cycles to wait before killing workers +cheaper-busyness-min = 20 ; Below this threshold, kill workers (if stable for multiplier cycles) +cheaper-busyness-max = 70 ; Above this threshold, spawn new workers +cheaper-busyness-backlog-alert = 16 ; Spawn emergency workers if more than this many requests are waiting in the queue +cheaper-busyness-backlog-step = 2 ; How many emergency workers to create if there are too many requests in the queue + +touch-reload = /srv/app/wsgi.py diff --git a/app/wsgi.sh b/app/wsgi.sh index 863d1621..832a9e26 100755 --- a/app/wsgi.sh +++ b/app/wsgi.sh @@ -3,7 +3,6 @@ # paths app='/srv/app' manage=$app'/manage.py' -wsgi=$app'/wsgi.py' static='/srv/static/' media='/srv/media/' src='/srv/src/' @@ -53,7 +52,5 @@ else chown -R www-data: $debug_log - uwsgi --socket :$port --wsgi-file $wsgi --chdir $app --master \ - --processes $processes \ - --uid $uid --gid $gid --logto $uwsgi_log --touch-reload $wsgi + uwsgi /srv/app/wsgi.ini fi diff --git a/teleforma/views/core.py b/teleforma/views/core.py index 0e490ae5..d5b274d0 100644 --- a/teleforma/views/core.py +++ b/teleforma/views/core.py @@ -55,6 +55,8 @@ from django.views.decorators.csrf import csrf_exempt from django.views.generic.base import TemplateResponseMixin, TemplateView, View from django.views.generic.detail import DetailView from django.views.generic.list import ListView +from django.core.cache import cache + from jsonrpc import jsonrpc_method from jsonrpc.proxy import ServiceProxy from rest_framework.permissions import IsAuthenticated -- 2.39.5