Linux: Searx als lokale Suchmaschine

Searx ist eine Metasuchmaschinen-Weboberfläche basierend auf Python, die auf einem Webserver aufgesetzt, lokal als eigene „Suchmaschine“ genutzt oder remote für andere Benutzer angeboten werden kann. Searx erstellt keine eigenen Suchindizes wie z. B. YaCy, sondern nutzt über Plugins bzw. APIs fremde Suchmaschinen und Informationsquellen wie z. B. Google, Startpage, Reddit usw. Änderungen können auf der Release-Seite eingesehen werden.

Die Anfragen können über einen HTTP-Proxy wie Privoxy und/oder per SOCKS über Tor weitergeleitet werden, um Suchanfragen zu anonymisieren. Persönliche Einstellungen werden in Cookies gespeichert – für die eigene, lokale „Suchmaschine“ wird besser die Searx Konfigurationsdatei editiert.

Searx Oberfläche
Searx Resultate

In der Anleitung wird Searx als lokale „Suchmaschine“ installiert. Statt Apache oder nginx wird Gunicorn als Webserver mitinstalliert. Über eine systemd Unit wird der Gunicorn Dienst und damit Searx gemanaged.

Installation

Pakete

sudo aptitude install git build-essential libxslt-dev python-dev python-virtualenv python-pybabel zlib1g-dev libffi-dev libssl-dev

Searx & Gunicorn

git clone https://github.com/asciimoo/searx.git
sudo mv searx/ /pfad/
sudo adduser --system --disabled-password --disabled-login --home /pfad/searx --shell /bin/bash --group searx
sudo chown searx:searx -R /pfad/searx
sudo -u searx -i
virtualenv searx-ve
. ./searx-ve/bin/activate
pip install --upgrade pip && pip install --upgrade setuptools
pip install gunicorn
pip install requests[socks]
./manage.sh update_packages
sed -i -e "s/ultrasecretkey/`openssl rand -hex 32`/g" searx/settings.yml
exit
sudo usermod -s /usr/sbin/nologin searx

Siehe auch Gunicorn Installations-Anleitung.

Aktualisierung

sudo usermod -s /bin/bash searx
sudo -u searx -i
. ./searx-ve/bin/activate
git config user.email "searx@host.domain.tld"
git config user.name "searx"
git stash
git pull origin master
git stash apply
./manage.sh update_packages
exit
sudo usermod -s /usr/sbin/nologin searx

Bei Startproblemen oder -fehlern nach einer Aktualisierung das syslog und/oder die Gunicorn Logdateien auswerten und die Konfiguration anpassen.

Konfiguration

Searx

sudo vi /pfad/searx/searx/settings.yml
settings.yml
general:
    debug : False
    instance_name : "searx" # Titelname, auch für Firefox-Suchleiste Suchmaschine-Erweiterung
 
search:
    safe_search : 0
    autocomplete : ""
    language : "all" # Sprache der Suchresulate
 
server:
    port : nnnn
    bind_address : "127.0.0.1"
    secret_key : "siehe oben"
    base_url : False
    image_proxy : True # Bilddateien werden auch per Searx geholt und nicht direkt vom Browser
    http_protocol_version : "1.1"
 
ui:
    themes_path : ""
    default_theme : oscar
    default_locale : de
 
outgoing:
    request_timeout : 12.0 # genereller Anfrage-Timeout in Sekunden
    useragent_suffix : ""
    pool_connections : 100
    pool_maxsize : 10
    proxies:
        http: http://127.0.0.1:port
        https: http://localhost:port
        # oder direkt über Tor:
        http: socks5://127.0.0.1:9050
        https: socks5://localhost:9050
 
engines: # Für jede Suchmaschine möglich:
    language : en_US # Sprache der Suchresultate
    categories : name oder name1, nameN # files, general, images, it, music, science videos, social media
    timeout : N.0 # spezifischer Anfrage-Timeout in Sekunden
    disabled : True # Suchmaschine deaktivieren
 
locales:
    en : English
    de : Deutsch (German)

IP-Adresse und Port sind nur relevant, wenn Searx direkt mit python gestartet wird:

python searx/webapp.py
Strg + C
exit

Gunicorn

Über die folgende systemd Unit wird mit -c /pfad/searx/pfad/config.py Gunicorn dazu veranlasst, die config.py Konfigurationsdatei auszuwerten, in der Einstellungen für Gunicorn vorgenommen werden können.

systemd

sudo vi /etc/systemd/system/gunicorn.service
gunicorn.service
[Unit]
Description=gunicorn-searx
After=network.target network-online.target
Wants=network-online.target
 
[Service]
RestrictAddressFamilies=AF_INET AF_UNIX
PIDFile=/run/gunicorn/gunicorn.pid
User=searx
Group=searx
RuntimeDirectory=gunicorn
WorkingDirectory=/pfad/searx
StandardError=null
ExecStart=/pfad/searx/searx-ve/bin/gunicorn --pid /run/gunicorn/gunicorn.pid --bind IP:PORT --workers 1 --threads 1 --access-logfile /var/log/gunicorn/access.log --error-logfile /var/log/gunicorn/error.log --log-level info -c /pfad/searx/pfad/config.py searx.webapp:app
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
Restart=on-failure
RestartSec=5s
PrivateTmp=true
PrivateDevices=true
ProtectHome=true
InaccessibleDirectories=/boot
ReadOnlyDirectories=/etc /usr
NoNewPrivileges=true
 
[Install]
WantedBy=multi-user.target

Wer keine Zugriffs- und Fehler-Logs benötigt, kann –access|error-logfile Optionen entfernen und braucht kein eigenes Gunicorn Logverzeichnis unter /var/log/ anlegen.

Firefox Such-Plugins

Vor dem Einpflegen der Such-Plugins muss die localhost:port Angabe in den XML-Dateien auf das eigene System angepasst werden.

Verweise auf aktuelle Seite