DecaTec

Home-Server | Linux | Nextcloud | Raspberry Pi | Programmierung | Fotografie

Metasuchmaschine searx auf eigenem Server installieren (mit Docker und nginx)

searx Logo

Eine Suchmaschine ist eine der wichtigsten Tools im Internet. Google ist hier der unangefochtenen Platzhirsch: Die Marktmacht von Google lässt sich allein schon an der Tatsache erahnen, dass das Wort „googeln“ schon 2004 im Duden aufgenommen wurde.
Wer nun aber Wert auf Privatsphäre und Datenschutz im Internet legt, für den ist Google sicherlich nicht die beste Wahl.

Hier gilt es also, sich nach Alternativen umzusehen. Auf dem Markt gibt es zum Glück einige Suchmaschinen, die in Bezug auf Privatsphäre und Datenschutz besser dastehen als Google. Einfach eine andere Suchmaschine zu benutzen ist jedoch auch keine optimale Lösung – mehr dazu später.

Der folgende Artikel soll daher zeigen, wie man searx als eigene Metasuchmaschine mit Docker und nginx betreiben kann. Damit bleibt man auch bei der Suche im Internet Herr seiner eigenen Daten.

Update-Historie (letztes Update: 13.11.2019)
  • 13.11.2019:
    • Allgemeine Hinweise zum Betrieb einer eigenen searx-Instanz hinzugefügt (kleiner Nutzerkreis).
  • 21.10.2019:
    • Hinweis auf die von mir betriebene searx-Instanz searx.decatec.de hinzugefügt.
    • Hinweis auf das Anpassen der Standard-Einstellungen (/opt/searx/searx/settings.yml) hinzugefügt.

Warum eine eigene Suchmaschine betreiben?

Sehen wir uns den Markt der Suchmaschinen mal näher an:

Hier gibt es zum einen Suchmaschinen, die von den jeweiligen Anbietern betrieben werden, z.B. Google, Bing, Yahoo, etc. Nur diese großen Anbieter haben die Kapazitäten, eigene Suchindizes aufzubauen. Und wer hier investiert, der möchte mit dem Produkt natürlich auch Geld verdienen. Dies sind jedoch nicht die Suchmaschinen selbst, sondern das Produkt sind dabei die Benutzer (bzw. deren Daten). Die Benutzer-Daten können gesammelt und ausgewertet werden, um daraufhin z.B. personalisierte Werbung zu schalten.

Daneben gibt es die sog. Metasuchmaschinen. Dies sind Suchmaschinen, die keine eigenen Suchindizes verwalten, sondern Suchanfragen an andere Suchmaschinen (wie z.B. Google) weiterleiten. Der große Vorteil dabei ist, dass dadurch Suchanfragen anonymisiert werden können, da z.B. Google einen User nicht mehr eindeutig tracken kann. Der einzige Nachteil an einer Metasuchmaschine ist, dass die Suchergebnisse nicht mehr personalisiert werden. Daher hat man immer das Gefühl, dass die Suchergebnisse von Google direkt etwas besser ausfallen, als die Ergebnisse einer Metasuchmaschine. Google schafft dies allerdings nur, weil die User getrackt werden, und das wollen wir ja gerade verhindern.

Lange Zeit habe ich Startpage als Metasuchmaschine genutzt und empfohlen. Jedoch hat Startpage ab Oktober diesen Jahres mit System1 LLC einen neuen Anteilseigner (Quellen: hier bzw. hier). Dessen Geschäftsmodell basiert allerdings genau auf dem Sammeln und Auswerten von Daten. Dies passt meiner Meinung nach nicht zu den Grundsätzen von Startpage (lt. eigener Aussage „die diskreteste Suchmaschine der Welt“). Mit dieser Meinung stehe ich sicherlich nicht allein da, siehe Startpage and System1 Abuse Your Privacy Under the Guise of ‘Privacy One Group’.

Eine Alternative wäre hier z.B. DuckDuckGo (ebenfalls eine Metasuchmaschine). Allerdings wird diese von einem amerikanischen Anbieter betrieben, der lt. Gesetzt dazu verpflichtet ist, mit den US-Behörden zusammen zu arbeiten. Also kann man im Zweifelsfall auch davon ausgehen, dass hier Daten gespeichert und ausgewertet/weitergegeben werden.

Mit searx gibt es allerdings auch eine Metasuchmaschine, die auf einem eigenen Server betrieben werden kann. Ziel dieses Open Source Projektes ist der Schutz der Privatsphäre der Benutzer, indem keine IP-Adressen an die dahinter liegenden Suchmaschinen weitergegeben werden und deren Tracking-Cookies geblockt werden.

Voraussetzungen und Installationsvarianten

searx kann auf jedem Linux-System installiert werden, welches Python-Programme ausführen kann. Dies ist auf so gut wie allen Distributionen gegeben.

Dabei gibt es mehrere Installationsvarianten:

  • Die klassische Installation.
  • Das Bauen eines Docker-Images aus dem offiziellen Repositories und der Betrieb als Docker-Container.
  • Die Nutzung eines vorgefertigten Docker-Images (z.B. wonderfall/serx bei Docker Hub).
  • Die Nutzung des Docker-Images aus dem Projekt searx-docker.

Ich empfehle hier die zweite Variante, indem das Docker-Image aus dem offiziellen Repository gebaut wird. Genau diese Variante wird daher auch in diesem Artikel gezeigt.

Daher ist der Betrieb von Docker ebenfalls eine Installations-Voraussetzung. Eine Einführung zu Docker mit Installationsanweisungen kann dem Artikel Docker auf Ubuntu Server entnommen werden.

Wichtig ist hier auch, dass die Suchmaschine per HTTPS erreichbar ist, damit die Verbindung stets verschlüsselt ist. Hier wird nginx als Webserver verwendet, der die Anfragen an die Suchmaschine an den Docker-Container weiterleitet. Der Webserver ist hierbei für die Verschlüsselung per HTTPS zuständig. Wie man die entsprechenden TLS-Zertifikate mittels acme.sh erzeugen kann, ist im Artikel RSA und ECDSA-Zertifikate mit nginx (Hybrid-Lösung) zu finden.

Am einfachsten ist der Betrieb der Suchmaschine über eine eigene (Sub-)Domain. Wenn DynDNS verwendet wird, dann empfiehlt sich das Anlegen eines CNAME-Eintrags. Details dazu findet man im Artikel Nextcloud: Online-Office mit ONLYOFFICE (mit eigener Subdomain). Im folgenden gehe ich davon aus, dass die Suchmaschine unter der Domain searx.meinedomain.de betrieben wird.

Allgemeine Hinweise zum Betrieb einer eigenen searx-Instanz

Der Artikel zeigt, wie man schnell eine eigene searx-Instanz in Betrieb nehmen kann. Jedoch sollte man sich im Vorfeld Gedanken über den Nutzerkreis der Instanz machen.

Google, Bing & Co „sehen“ nur die IP-Adresse des searx-Servers. Wenn die eigene Suchmaschine nur von sehr wenigen Usern benutzt wird (im Extremfall von nur einem Benutzer), nutzt die Verschleierung der IP-Adressen der Clients durch searx hier wenig. Die Suchmaschinen können dann ebenso einfach ein Profiling vornehmen, als wenn man die diese direkt (d.h. ohne searx) verwenden würde – da die IP pro Nutzer immer die gleiche ist.

Daher sollte man eine searx-Instanz besser nicht mit sehr wenigen/einem einzelnen Benutzer betreiben. Je mehr Benutzer die Instanz verwenden, desto weniger können die Suchmaschinen ein Profiling vornehmen.

Wenn der Nutzerkreis der eigenen searx-Instanz vermutlich sehr klein ausfallen wird, ist es vielleicht eine Überlegung wert, statt einer privaten searx-Instanz auf eine der öffentlich verfügbaren searx-Instanzen auszuweichen.

searx installieren

Zunächst bringen wir das System auf den neusten Stand:

Anschließend wird das Git-Repository gecloned:

In den meisten Anleitungen wird das Docker-Image direkt aus dem Main-Branch des Projekts gebaut (Entwicklungsversion). Ich empfehle hier jedoch das Bauen des neusten Releases. Dazu listet man zunächst einmal die Releases des Projekts auf:

Auflisten der searx-Releases

Auflisten der searx-Releases

Momentan ist die Version v0.15.0 aktuell, daher rufen wir im Folgenden diesen Release ab:

Die Warnung („Detached Head“) kann hier ruhig ignoriert werden.

Auch wenn searx recht gute Standard-Einstellungen mitbringt (z.B. die zu verwendenden Suchmaschinen, die Standard-Sprache der Suche, das Theme, etc.), können diese Einstellungen individuell angepasst werden. Dazu wird vor dem Bauen des Docker-Images folgende Datei bearbeitet:

Die Inhalte dieser Datei sind eigentlich selbsterklärend und würden den Rahmen des Artikels sprengen. Daher wird an dieser Stelle nur auf die Möglichkeit hingewiesen, die Einstellungen der searx-Instanz individuell anzupassen.
Auch wenn alle Einstellungen auf Standard belassen werden, können die Benutzer der Suchmaschine später ihre individuellen Einstellungen vornehmen. Diese werden dann Client-seitig mittels eines Cookies gespeichert.

Das einzige, was ihr in der Datei settings.yml ändern solltet, ist der sog. secret_key: Dies kann mit folgendem Befehl schnell durchgeführt werden:

Das Docker-Image wird nun mit folgendem Befehl gebaut:

Nun kann man sich erst mal einen Kaffee holen, da dieser Vorgang durchaus ein paar Minuten dauert.

Anschließend kann der Container auch schon gestartet werden:

Die Parameter haben dabei die folgende Bedeutung:

  • -p 8888:8888: Der Port 8888 (Standard-Port von searx) wird vom Host-System an den Docker-Conatiner weitergeleitet.
  • --restart=always: Der Container soll bei jedem Systemstart automatisch gestartet werden.
  • -e IMAGE_PROXY=True: Aktiviert die Proxy-Funktion für Bilder, d.h. Bilder werden nicht direkt durch den Client-Browser abgerufen, sondern durch searx selbst.
  • -e BASE_URL=https://searx.meindomain.de: Hiermit wird die URL angegeben, unter der searx erreichbar sein soll. Hier muss auch das Protokoll (http/https) mit angegeben werden.

Der letzte Schritt ist nun das Hinzufügen eines virtuellen Hosts für nginx:

Beispielhaft kann die Konfiguration hier folgendermaßen aussehen:

Das Setzen der Settings für SSL und der Standard-Header des Webservers erfolgt hier über das Einbinden über includes. Interessant ist hier hauptsächlich der location-Block, mit dem die Anfrage an den Docker-Container von searx weitergeleitet wird. Diese Kommunikation erfolgt unverschlüsselt über HTTP, da diese nur Maschinen-intern stattfindet.

Wichtig: Damit absolut keine Daten gesammelt werden, sollten Access- und Error-Log für diesen virtuellen Host deaktiviert werden (access_log off bzw. error_log off). Wenn diese nicht deaktiviert werden, werden die IPs der Aufrufer automatisch über nginx geloggt!

Zu guter Letzt muss der Webserver noch neu gestartet werden:

Nun kann die Suchmaschine schon über den Browser aufgerufen werden: https://searx.meinedomain.de

searx in Firefox

searx in Firefox

Damit searx als Standard-Suchmaschine genutzt werden kann, muss diese Suchmaschine noch im Browser hinzugefügt werden. Bei Firefox kann dies über das Menü mit den drei Punkten in der Adress-Leiste erledigt werden.

searx als Suchmaschine in Firefox hinzufügen

searx als Suchmaschine in Firefox hinzufügen

Anschließend kann die Standard-Suchmaschine in den Einstellungen des Browsers gesetzt werden.

Die Nutzung von searx

Nachdem searx nun fertig installiert ist, können die Optionen der Suchmaschine über einen Klick auf Einstellungen (oben rechts) gesetzt werden (z.B. welche Suchmaschinen verwendet werden). Die wichtigste Einstellung ist hier vermutlich die Suchsprache, welche auf Deutsch – de gesetzt werden sollte, da ansonsten nur englische Suchergebnisse angezeigt werden:

Die Suchsprache in searx festlegen

Die Suchsprache in searx festlegen

Diese Einstellungen werden übrigens nicht bei searx gespeichert, sondern ausschließlich per Cookie auf dem Client.

Nun lohnt sich noch ein Blick auf die Such-Syntax. Hiermit können z.B. die Ergebnisse auf eine Suchmaschine begrenzt werden. Soll z.B. nur bei Wikipedia nach dem Suchbegriff „Nürnberg“ gesucht werden, sieht die Syntax folgendermaßen aus: !wp Nürnberg
Ebenso kann explizit nach Suchergebnissen einer bestimmten Sprache gesucht werden (z.B. Englisch): :en Nürnberg

searx updaten

Wenn eine neue Version von searx verfügbar ist, wird das alte Image entfernt und das GitHub-Repository einfach neu abgerufen, wie schon bei der initialen Installation:

searx-Instanz von decatec.de

Meine eigene Instanz ist übrigens unter searx.decatec.de zu erreichen. Diese wurde nach den Vorgaben dieses Artikels umgesetzt und es werden keine Daten gespeichert/gesammelt/ausgewertet.

Die Verbindung ist darüber hinaus dank HTTPS stets verschlüsselt, siehe Qualys SSL Labs und Mozilla Observatory.

Wenn ihr keine eigene searx-Instanz aufbauen wollt und einfach nur eine öffentliche Instanz sucht, dann lade ich euch ein, über searx.decatec.de zu suchen.

Fazit

Mittels Docker ist die eigene searx-Instanz schnell aufgesetzt. Durch das Hosten der Metasuchmaschine auf eigener Hardware und der Tatsache, dass keine IPs oder Suchanfragen geloggt werden, ist dies eine gute Lösung bzgl. Datenschutz und Privatsphäre.

Neben der Nutzung einer komplett eigenen Instanz kann auch eine öffentliche Instanz von searx genutzt werden. Eine Liste von öffentlichen Instanzen ist im Wiki des GitHub-Repositories zu finden: Searx instances

Bei der Verwendung einer öffentlichen Instanz muss man jedoch dem Administrator der Instanz vertraut werden (siehe Why use a private instance?). Von außen ist nämlich nicht ersichtlich, ob hier vielleicht doch Daten gesammelt/ausgewertet/weitergegeben werden. Absolut sicher gehen kann man hier nur durch eine eigene/persönliche Instanz von searx.

Welche Suchmaschine nutzt ihr? Ist euch hier Privatsphäre und Datenschutz wichtig, oder geht es euch mehr um den Komfort beim Suchen? Hinterlasst mir dazu doch einfach einen Kommentar.

Weiterführende Artikel

Links

, , , , , , , ,

Kommentare: 18

  • Bernd sagt:

    Whow super interessanter Artikel!
    Ich wusste gar nicht das es so etwas zum selbst hosten gibt!
    DANKE dafür!
    Kann man sowas auch auf der Nextcloud paralell installieren und nach draußen den Port 8888 frei geben?
    Oder sollte man das Ganze in Docker betreiben?

    Gruß Bernd

    • Jan sagt:

      Hallo Bernd,

      das Betreiben über Docker ist in meinen Augen die unkomplizierteste Lösung. Du kannst natürlich auch einen anderen Port nutzen. Diesen musst du dann nur über die Firewall freigeben. Dann ist nur zu beachten, dass es etwas umständlich ist, immer den Port mit angeben zu müssen.
      Eine andere Variante wäre es, searx über ein Unterverzeichnis einer bestehenden Domain zu hosten.

      Gruß,
      Jan

  • Tom sagt:

    Habe bisher auch startpage verwendet, bin jetzt aber (aus gleichen Gründen wie du) auf eine öffentliche searx-Instanz ausgewichen.

    Macht der Betrieb der searx auf einem Home-Server Sinn ?

    Google& Co kriegen die IP und die Anfragen vom Heim-Server (searx), das will man nicht mit evtl. privaten Anfragen aus dem Heimnetz verknüpfen wollen.
    (vor allem nicht wenn die searx überwiegend von mir verwendet wird und nicht auch noch durch andere, fremde Personen, genutzt wird)

    Genauso ist es wenn ich auf dem gleichen Server ein (privaten) VPN betreiben sollte.

    • Jan sagt:

      Hallo Tom,

      klar, je mehr User eine searx-Instanz nutzen, desto weniger kann Google & Co. ein Profil aus den Suchanfragen ableiten.
      Aber auch, wenn eine Instanz nur von einem einzelnen Benutzer genutzt wird, bietet searx Vorteile (z.B. können die Suchmaschinen keinen Benutzer eindeutig durch eine Browser-Kennung identifizieren, da solche Daten durch searx „gefiltert“ werden). Mehr dazu hier. Darüber hinaus ändert sich ja im Normalfall alle 24 Stunden die IP – zumindest bei Internet-Anschlüssen ohne feste IP.

      Also meiner Meinung nach macht der Betrieb auf einem Home-Server schon Sinn. Um so besser ist es allerdings, wenn mehrere Nutzer eine searx-Instanz nutzen. Aus diesem Grund habe ich ja auch einen Link auf meine Instanz hinzugefügt – vielleicht wird diese dann auch durch weitere Leute genutzt.

      Gruß,
      Jan

  • jochen sagt:

    Warum nicht das offizielle Image vom Dockerhub nutzen? Wie begründet sich deine Empfehlung das Image selbst aus den Quellen zu schreiben?
    Ansonsten dank für den Artikel. Ein Homeserver ist mein Herbst/Winter Projekt, da kommt dann auch searx drauf.

    • Jan sagt:

      Hallo Jochen,

      klar, du kannst auch ein vorgefertigtes Image verwenden. Welches würdest du denn als „offizielles“ Image bezeichnen (searx/searx ist ein Image, welches auf searx basiert, aber mit einigen zusätzlichen Dingen daher kommt, die man u.U. gar nicht braucht).
      Ein Vorteil, wenn man sich das Image selbst baut: Man kann die Standard-Einstellungen seiner eigenen Suche beliebig anpassen.

      Gruß,
      Jan

  • Saber sagt:

    Hallo Jan,

    klasse das du hier Searx bekannt machst und zeigst wie man es einrichtet.
    Ich würde gerne meine SearX Instanz, die als vHost in einem Subdirectory liegt, ausschließlich über IPv4 betreiben.
    Kannst du mir einen Tipp geben, wie ich den vHost dementsprechend einstellen muss oder funktioniert?

    PS Ich habe mal deine Instanz ausprobiert und festgestellt das Google nicht funktioniert. Mir haben die beiden Fixes geholfen:

    https://github.com/asciimoo/searx/pull/1597/commits/5c80eb8460b9fc516de5b73277d298c617d5c6aa

    und

    https://github.com/asciimoo/searx/pull/1628/commits/19f6fcc8869e2c4b066d34bbe293ec14e6d77e53.

    Kann auch sein, dass es schon nach dem ersten Fix funktioniert.

    Beste Grüße

    • Jan sagt:

      Hi,

      wenn nur IPv4 benötigt wird, dann lass einfach folgende Zeile im vHost von nginx Weg: listen [::]:443 ssl http2;

      Ja, Google hat wohl vor Kurzem an der Ergebnis-Seite der Suche etwas verändert. Darauf hin kann searx diese nicht mehr Parsen. Ich denke, dass da bald schon ein Update nachgereicht wird.
      Auf jeden Fall danke für dein Feedback!

      Gruß,
      Jan

      • Saber sagt:

        Hi Jan,

        danke für die Antwort.
        „listen [::]:443 ssl http2;“ ist doch im GatewayHost eingetragen.
        Würde ich dies im GatewayHost austragen, würde ich ja global für alle vHosts ipv6 deaktivieren.
        Ich will jedoch nur für einen einzelnen vHost IPv6 deaktivieren.

        • Jan sagt:

          Hi,

          dann geht bei dir ja alles über den Gateway-Host. Hier sind dann alle Applikationen per IPv6 erreichbar oder eben nicht.
          Warum willst du denn nur für eine Applikation den Zugriff über IPv6 unterbinden?

          Gruß,
          Jan

          • Saber sagt:

            Der Postfix meiner IPv6 Adresse ist statisch. Daher würde ich gerne zur besseren Verschleierung IPv4 nehmen, bei dem sich die Adresse bei mir alle 24h komplett ändert.

          • Jan sagt:

            Hi,

            OK, dann könnte die Lösung so aussehen, dass du die Domain, die nicht per IPv6 erreichbar sein soll, aus dem server_name des Gateway-Hosts heraus nimmst. Dafür erstellst du einen zweiten Gateway-Host, der nur auf die entsprechende Domain hört. Hier dann nur IPv4 aktivieren.

            Gruß,
            Jan

  • Norry sagt:

    An dieser Stelle möchte ich mich mal gaaaanz dolle bedanken. Ich habe einiges hier schon als Anregung mitgenommen und so auch jetzt wieder. Manchmal ist es schwierig, da ich mich für Apache entschieden habe und es für mich daher an bestimmten Stellen ein Umdenken erfordert.
    Der Artikel hat mich veranlasst eine eingene Instanz aufzubauen, ohne Docker und mit Apache aber die Anregung kam hier her.
    Ich freue mich schon auf die nächsten Artikel.
    Gruß Norry

  • Hallo Zusammen,
    ich habe mir auch mal eine kleine Suchmaschine genau nach dieser Anleitung eingerichtet. Dass ganze hat auch alles super funktioniert, wenn ich jetzt einen Suchbegriff eingebe kommt jedoch folgende Fehlermeldung:

    Fehler! Suchmaschinen können die Ergebnisse nicht empfangen.
    bing (Zeitüberschreitung), wikidata (Zeitüberschreitung), google (Zeitüberschreitung), wikipedia (Zeitüberschreitung)

    Hat jemand einen Tipp woran dass liegt?

    • Jan sagt:

      Hi,

      das ist mir auch schon aufgefallen, jedoch nur sporadisch. Bei der nächsten Suchanfragen kommen diese Fehler dann nicht mehr. Sind diese Fehler bei dir dauerhaft zu sehen?

      Zu Google: v0.15 von searx kann aktuell keine Ergebnisse von Google empfangen, da Google hier anscheinend etwas am Design der Results-Pages geändert hat. Das wird vermutlich erst in einer zukünftigen Version von searx behoben werden.

      Gruß,
      Jan

  • Martin sagt:

    Sollte man hier zusätzlich die ufw installieren und konfigurieren?

    https://wiki.ubuntuusers.de/ufw/

    • Jan sagt:

      Hi Martin,

      kann man natürlich machen. Da ich allerdings nicht wissen kann, was sonst noch so auf dem System läuft, wollte ich diesen Tipp nicht explizit mit aufnehmen. Das Aktivieren von ufw kann schnell mal dazu führen, dass irgendwelche Dienste scheinbar plötzlich nicht mehr funktionieren.

      Gruß,
      Jan

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.