Eigene Searx-Instanz unter Debian – uWSGI/Webserver einrichten (Teil 2/2)

Im vorherigen Beitrag zum Thema wurde die Basis-Installation von Searx auf einem Debian-artigen Linux-System demonstriert. In diesem Beitrag wird gezeigt, wie man die Searx-Instanz für den Produktiveinsatz einrichtet und über den uWSGI-Server mit einem WSGI-Proxy-fähigen Webserver wie Apache oder nginx als Reverse-Proxy verbindet. Die Installation und Basis-Konfiguration des Webservers sowie das Ausstellen der TLS-Zertifikate sind nicht Teil des Beitrags.

Beispiel: Searx-Suchmaske im dunklen Design

Schritt 1: Abhängigkeiten/Pakete installieren

Zur Installation des uWSGI-Servers müssen folgende Abhängigkeiten/Pakete installiert werden:

sudo apt install uwsgi uwsgi-plugin-python3

Schritt 2: uWSGI-Konfiguration erstellen

Nach der Installation des uWSGI-Servers muss eine neue Konfigurationsdatei für die Searx-Instanz mit nachfolgendem Inhalt im Verzeichnis /etc/uwsgi/apps-available/ erstellt werden. Ich benenne die Datei searx.ini:

[uwsgi]
uid = searx
gid = searx

processes = 20
workers = 4

env = LANG=C.UTF-8
env = LANGUAGE=C.UTF-8
env = LC_ALL=C.UTF-8
env = SEARX_SETTINGS_PATH=/usr/local/searx/settings.yml

chdir = /usr/local/searx/src/searx
virtualenv = /usr/local/searx/env
pythonpath = /usr/local/searx/src

disable-logging = true
enable-threads = true
single-interpreter = true
master = true
lazy-apps = true

module = searx.webapp
plugin = python3,http
cache2 = name=searxcache,items=2000,blocks=2000,blocksize=4096,bitmap=1
listen = 128 # Darf nicht größer als /proc/sys/net/core/somaxconn sein!

Schritt 3: uWSGI-Konfiguration aktivieren

Jetzt muss die soeben erstelle Konfigurationsdatei noch aktiviert werden. Dazu muss ein Symlink im Verzeichnis apps-enabled zur searx.ini im apps-available-Verzeichnis angelegt werden:

sudo ln -s ../apps-available/searx.ini /etc/uwsgi/apps-enabled

Danach kann der uWSGI-Daemon wie folgt neu gestartet und die Logdatei beobachtet werden:

sudo systemctl restart uwsgi & sudo tail -fn0 --retry /var/log/uwsgi/app/searx.log

Wenn alle Schritte erfolgreich durchgeführt wurden und es keine Fehlermeldungen in der Logdatei hagelt, kann der Webserver konfiguriert werden. Nachfolgend zwei Beispiele für die Platzhirschen Apache und nginx.

Schritt 4: Webserver als Reverse-Proxy konfigurieren

Der uWSGI-Daemon erzeugt standardmäßig das UNIX-Socket /run/uwsgi/app/searx/socket für die Searx-App. Auf dieses können wir nun von unserem Webserver aus zugreifen. Die folgenden Beispiele sind Minimal-Konfigurationen für Apache und nginx, die von euch noch angepasst werden müssen (TLS, Basic-Authentication, usw.).

Hinweis: Für die Verwendung von Apache muss zuerst noch das uWSGI-Proxy-Modul installiert und anschließend die beiden Module proxy und proxy_uwsgi über a2enmod in der Apache-Konfiguration aktiviert werden:

sudo apt install libapache2-mod-proxy-uwsgi
sudo a2enmod proxy proxy_uwsgi

Hinweis: Um die Searx-Instanz über eine Sub-URL verfügbar zu machen, bitte zusätzlich Schritt 5 befolgen!

Beispiel: Virtualhost-Konfiguration für Apache

<VirtualHost *:80>
	ServerName sx.example.org

	ProxyPass /static/ !
	ProxyPass / unix:/run/uwsgi/app/searx/socket|uwsgi://localhost

	Alias /static/ /usr/local/searx/src/searx/static/

	<Location /static/>
		Require all granted
	</Location>
</VirtualHost>

Beispiel: Virtualhost-Konfiguration für nginx

server {
	listen [::]:80 ipv6only=off;
	server_name sx.example.org;

	location / {
		include uwsgi_params;
		uwsgi_pass unix:/run/uwsgi/app/searx/socket;
	}

	location /static/ {
		alias /usr/local/searx/src/searx/static/;
	}
}

Schritt 5: Searx-Instanz über Sub-URL verfügbar machen (optional)

Falls man die Searx-Instanz nicht im Wurzelverzeichnis (/), sondern einem Unterverzeichnis (/custom/) erreichbar machen möchte, muss in der Searx-Konfigurationsdatei die Option server.base_url angepasst werden:

sed -i 's#base_url : False#base_url : "/custom/"#' ~searx/settings.yml

Außerdem müssen noch die Pfade in den Virtualhost-Konfigurationen angepasst werden:

Änderungen für Apache-Konfiguration

sed -i 's#ProxyPass /#ProxyPass /custom/#' apache-vhost.conf
sed -i 's#/static/#/custom/static/#' apache-vhost.conf

Änderungen für nginx-Konfiguration

sed -i 's#location /#location /custom/#' nginx-vhost.conf

Fertig!

Nachdem der Webserver und uWSGI-Daemon neu gestartet wurde, sollte alles wie erhofft funktionieren.

Der Autor

Hi. Ich bin Thomas. Hier veröffentliche ich in unregelmäßgen Abständen mehr oder weniger interessante Beiträge über Dies und Jenes, hauptsächlich über Computer und IT. Außerdem mag ich die Linux-Kommandozeile, vor allem wenn ich mit (m)einer mechanischen Tastatur darauf herumhacken kann. 😀