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.
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=/opt/searx/settings.yml
chdir = /opt/searx/src/searx
virtualenv = /opt/searx/env
pythonpath = /opt/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/ /opt/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 /opt/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.