mirror of
https://github.com/searxng/searxng.git
synced 2025-02-18 19:30:03 +00:00
As stated in .. and other posts, the defaults of uWSGI not suitable for a productive environment. To give just one example, the workers run indefinitely and the memory leaks aggregate. - "Configuring uWSGI for Production: The defaults are all wrong" EuroPython 2019 [1] - "Configuring uWSGI for Production Deployment" [2] - "When Paul has tested some PR on his instance, we could clearly see a memory leak over a week: the memory never dropped to the initial value. Same for my instance using Docker." [3] [1] https://av.tib.eu/media/44810 [2] https://www.bloomberg.com/company/stories/configuring-uwsgi-production-deployment/ [3] https://github.com/searxng/searxng/pull/3443#issuecomment-2094347004 Signed-off-by: Markus Heiser <markus.heiser@darmarit.de>
103 lines
3.0 KiB
INI
103 lines
3.0 KiB
INI
# -*- mode: conf-unix; coding: utf-8 -*-
|
|
[uwsgi]
|
|
|
|
# uWSGI core
|
|
# ----------
|
|
#
|
|
# https://uwsgi-docs.readthedocs.io/en/latest/Options.html#uwsgi-core
|
|
|
|
# Who will run the code / Hint: in emperor-tyrant mode uid & gid setting will be
|
|
# ignored [1]. Mode emperor-tyrant is the default on fedora (/etc/uwsgi.ini).
|
|
#
|
|
# [1] https://uwsgi-docs.readthedocs.io/en/latest/Emperor.html#tyrant-mode-secure-multi-user-hosting
|
|
#
|
|
uid = ${SERVICE_USER}
|
|
gid = ${SERVICE_GROUP}
|
|
|
|
# set (python) default encoding UTF-8
|
|
env = LANG=C.UTF-8
|
|
env = LANGUAGE=C.UTF-8
|
|
env = LC_ALL=C.UTF-8
|
|
|
|
# chdir to specified directory before apps loading
|
|
chdir = ${SEARXNG_SRC}/searx
|
|
|
|
# SearXNG configuration (settings.yml)
|
|
env = SEARXNG_SETTINGS_PATH=${SEARXNG_SETTINGS_PATH}
|
|
|
|
# disable logging for privacy
|
|
disable-logging = true
|
|
log-4xx = true # but log 4xx's anyway
|
|
log-5xx = true # and 5xx's
|
|
|
|
# The right granted on the created socket
|
|
chmod-socket = 666
|
|
|
|
# Plugin to use and interpreter config
|
|
single-interpreter = true
|
|
|
|
# enable master process
|
|
master = true
|
|
strict = true
|
|
vacuum = true # Delete sockets during shutdown
|
|
need-app = true
|
|
|
|
# load apps in each worker instead of the master
|
|
lazy-apps = true
|
|
|
|
# load uWSGI plugins
|
|
plugin = python3,http
|
|
|
|
# By default the Python plugin does not initialize the GIL. This means your
|
|
# app-generated threads will not run. If you need threads, remember to enable
|
|
# them with enable-threads. Running uWSGI in multithreading mode (with the
|
|
# threads options) will automatically enable threading support. This *strange*
|
|
# default behaviour is for performance reasons.
|
|
enable-threads = true
|
|
|
|
# Number of workers (usually CPU count)
|
|
workers = ${UWSGI_WORKERS:-%k}
|
|
threads = ${UWSGI_THREADS:-4}
|
|
harakiri = 60
|
|
# max-requests = 1000 # Restart workers after this many requests
|
|
# max-worker-lifetime = 3600 # Restart workers after this many seconds
|
|
reload-on-rss = 4096 # Restart workers after this much resident memory
|
|
worker-reload-mercy = 60 # How long to wait before forcefully killing workers
|
|
die-on-term = true # Shutdown when receiving SIGTERM (default is respawn)
|
|
py-callos-afterfork = true # allow workers to trap signals
|
|
|
|
# plugin: python
|
|
# --------------
|
|
#
|
|
# https://uwsgi-docs.readthedocs.io/en/latest/Options.html#plugin-python
|
|
|
|
# load a WSGI module
|
|
module = searx.webapp
|
|
|
|
# set PYTHONHOME/virtualenv
|
|
virtualenv = ${SEARXNG_PYENV}
|
|
|
|
# add directory (or glob) to pythonpath
|
|
pythonpath = ${SEARXNG_SRC}
|
|
|
|
|
|
# speak to upstream
|
|
# -----------------
|
|
|
|
# https://uwsgi-docs.readthedocs.io/en/latest/Options.html#plugin-http
|
|
# Native HTTP support: https://uwsgi-docs.readthedocs.io/en/latest/HTTP.html
|
|
|
|
http = ${SEARXNG_INTERNAL_HTTP}
|
|
buffer-size = 8192
|
|
|
|
# uWSGI serves the static files and in settings.yml we use::
|
|
#
|
|
# ui:
|
|
# static_use_hash: true
|
|
#
|
|
static-map = /static=${SEARXNG_STATIC}
|
|
# expires set to one day
|
|
static-expires = /* 86400
|
|
static-gzip-all = True
|
|
offload-threads = %k
|