[uwsgi] strict = true # Fail if unknown config parameter found. plugins = python3 chdir = {{ project_dir }} home = {{ virtualenv }} module = project.wsgi master = true socket = /run/{{ site_name }}/django_uwsgi.sock processes = 3 # Reduced this again now that reports are deferred to a queued task. Could # potentially be further reduced. harakiri = 15 max-requests = 5000 vacuum = true # For Sentry, see https://docs.sentry.io/clients/python/advanced/#a-note-on-uwsgi. enable-threads = true log-prefix = {{ site_name }} # Enable uWSGI stats server for use with uwsgitop. # Run with: `sudo -u www-data uwsgitop /run/{{ site_name }}/django_uwsgi_stats.socket` stats = /run/{{ site_name }}/django_uwsgi_stats.socket # Memory reporting is useful for reviewing memory consumption with uwsgitop, but # makes the logs a little noiser. # memory-report = true # Always use UTF-8 as the encoding for reading/writing files and other, # regardless of system preferences. Will be default in Python 3.15. We were # originally specifying LANG=en_AU.UTF-8 here, to handle Unicode chars in # uploaded filenames, but this broke down when that locale wasn't # installed. Using Python's UTF Mode should side-step this. See # https://docs.python.org/3/library/os.html#utf8-mode. env = PYTHONUTF8=1 # Haven't decided how to securely handle code being able to write __pycache__ # directories and bytecode into read-only directories. env = PYTHONDONTWRITEBYTECODE=true # Per Django deployment checklist. env = PYTHONHASHSEED=random