Kontakt

Carsten Rieger IT Services
Am Danglfeld 8 | 83132 Pittenhart
Telefon: 08624.9009794
E-Mail: info@c-rieger.de

SearXNG – suchen ohne selbst gefunden zu werden

SearXNG, ein Fork von searx, ist eine leistungsstarke Meta-Suchmaschine, die Sie bspw. bei Providern wie Netcup oder Hetzner, aber auch auf einem RaspberryPI o.Ä. Geräten, selbst hosten und betreiben können. Im Gegensatz zu bekannten und herkömmlichen Suchmaschinen (google, bing etc.) stellt die Metasuche mittels SearXNG ein Art Suchmaschinenaggregation dar. Es wird also nicht direkt bei einzelenen Suchanbietern recherchiert, sondern viele verschiedene Suchmaschinen verwendet, um bzgl. der Anfragen zu recherchieren. Weitere Details finden Sie im GitHub-Repository.

In dieser Anleitung setzen wir einen bestehenden nginx-Webserver voraus, bspw. den Ihres bestehenden Nextcloud-Systems. Die Installation basiert also auf

  • einem Ubuntu 22.04 LTS 64BIT oder Debian 11/12 System,
  • verfügt über einen separaten FQDN (A/AAA-Record) – exemplarisch searx.ihredomain.de
  • und extern erreichbare IP v4 und IPv6-Adressen.

Voraussetzungen von SearXNG:

Zuallererst aktualisieren wir das bestehende System:

sudo -s
apt update && apt upgrade -V

Um SearXNG als Docker parallel neben Nextcloud betreiben zu können, richten wir die notwendigen Softwarepakete und Softwarerepositories ein:

apt install -y apt-transport-https ca-certificates curl software-properties-common

Ubuntu 22.04

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Debian 11/12

apt install -y gnupg
curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] https://download.docker.com/linux/debian bookworm stable" |tee /etc/apt/sources.list.d/docker.list > /dev/null 

Ubuntu und Debian:

apt update && apt install docker-ce docker-compose -y

Die Voraussetzungen sind somit bereits abgeschlossen und die Installation des SearXNG-Containers kann erfolgen:

Installation von SearXNG:

Zunächst laden wir das GitHub-Repository in das home-Verzeichnis herunter (klonen) und wechseln dann in das neue Searxng-docker Verzeichnis:

cd ~
git clone https://github.com/searxng/searxng-docker.git
cd searxng-docker

Generieren wir nun den privaten Schlüssel (secret-key) für ihre persönliche SearXNG-Instanz – beachten Sie bitte die Sensibilität dieses Keys und sorgen dafür, dass dieser nicht von Dritten eingesehen werden kann!

sed -i "s|ultrasecretkey|$(openssl rand -hex 32)|g" searxng/settings.yml

In der Datei

nano searxng/settings.yml

spiegeln sich alle relevanten Einstellungen wieder:

Wir empfehlen, die beiden Parameter

  • instance_name
  • contact_url

zu setzen.

# see https://docs.searxng.org/admin/engines/settings.html#use-default-settings
use_default_settings: true
general:
  instance_name: "Suchen: ihredomain.de"
  contact_url: https://www.ihredomain.de/
server:
  # base_url is defined in the SEARXNG_BASE_URL environment variable, see .env and docker-compose.yml
  secret_key: "~geheimer-Schlüssel~"  # change this!
  limiter: false  # can be disabled for a private instance
  image_proxy: true
  http_protocol_version: "1.1"
ui:
  static_use_hash: true
redis:
  url: redis://redis:6379/0

Der „instance_name“-Parameter ist der Name der SearXNG-Seite, die „contact_url“ entweder eine Webseite oder eine mailto:-Emailadressangabe zur Kontaktaufnahme mit Ihnen. Des Weiteren muss in der Datei „.env“ der Hostname eingetragen werden:

nano .env
[...]
SEARXNG_HOSTNAME=searx.ihredomain.de
[...]

Da wir in dieser Anleitung von einem Parallelbetrieb in einem bestehenden Webserver (nginx) ausgehen, werden die „caddy“-Blöcke auskommentiert. Ein eigenes Log kann verwendet werden, in der nachfolgenden Doku ist der Block diesbezüglich vorbereitet („searxng.png“) aber auskommentiert:

nano compose.yaml

Die gesamte Datei kann wie folgt übernommen werden:

# version: '3.7'

services:

#  caddy:
#    container_name: caddy
#    image: caddy:2-alpine
#    network_mode: host
#    volumes:
#      - ./Caddyfile:/etc/caddy/Caddyfile:ro
#      - caddy-data:/data:rw
#      - caddy-config:/config:rw
#    environment:
#      - SEARXNG_HOSTNAME=${SEARXNG_HOSTNAME:-http://localhost:80}
#      - SEARXNG_TLS=${LETSENCRYPT_EMAIL:-internal}
#    cap_drop:
#      - ALL
#    cap_add:
#      - NET_BIND_SERVICE
#      - DAC_OVERRIDE

  redis:
    container_name: redis
    image: "redis:alpine"
    command: redis-server --save "" --appendonly "no"
    networks:
      - searxng
    tmpfs:
      - /var/lib/redis
    cap_drop:
      - ALL
    cap_add:
      - SETGID
      - SETUID
      - DAC_OVERRIDE
    restart: always


  searxng:
    container_name: searxng
    image: searxng/searxng:latest
    networks:
      - searxng
    ports:
     - "127.0.0.1:8081:8080"
#    volumes:
#      - ./searxng:/etc/searxng:rw
#      - type: bind
#        source: ./searxng.png
#        target: /usr/local/searxng/searx/static/themes/simple/img/searxng.png
    environment:
      - SEARXNG_BASE_URL=https://${SEARXNG_HOSTNAME:-localhost}/
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - SETGID
      - SETUID
      - DAC_OVERRIDE
    logging:
      driver: "json-file"
      options:
        max-size: "1m"
        max-file: "1"
    restart: always
networks:
  searxng:
    ipam:
      driver: default

#volumes:
#  caddy-data:
#  caddy-config:

Neben der bestehende „nextcloud.conf“ (vHost-Datei) des nginx-Webservers wird dann eine neue searx.conf-Datei anegelegt.

nano /etc/nginx/conf.d/searx.conf

Die Datei kann wie folgt übernommen werden, muss nur entsprechend ihrer Domain angepasst werden:

server {
  listen 80;
  listen [::]:80;
  server_name searx.ihredomain.de;
  return 301 https://$server_name$request_uri; 
}
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name searx.ihredomain.de;
ssl_certificate /etc/letsencrypt/live/searx.ihredomain.de/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/searx.ihredomain.de/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/searx.ihredomain.de/chain.pem;
ssl_dhparam /etc/nginx/ssl/dhp-4096.pem;
ssl_session_timeout 1d;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers 'TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384';
ssl_ecdh_curve secp521r1:secp384r1;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:50m; 
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload;" always; 
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Robots-Tag none always;
add_header X-Download-Options noopen always;
add_header X-Permitted-Cross-Domain-Policies none always;
add_header Referrer-Policy no-referrer always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Permissions-Policy "interest-cohort=()";
fastcgi_hide_header X-Powered-By;
access_log  off;
error_log off;
location /{
proxy_pass http://127.0.0.1:8081;
proxy_set_header   Host             $host;
proxy_set_header   Connection       $http_connection;
proxy_set_header   X-Scheme         $scheme;
proxy_set_header   X-Real-IP        $remote_addr;
proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
 # proxy_buffering  off;
 # proxy_request_buffering off;
 # proxy_buffer_size 8k;
}
}

Erstellen Sie das TLS-Zertifikat:

mkdir -p /etc/letsencrypt/live/searx.ihredomain.de
chmod -R 770 /etc/letsencrypt
chown -R www-data:www-data /etc/letsencrypt
su - acmeuser
acme.sh --issue -d searx.ihredomain.de --server letsencrypt --keylength 4096 -w /var/www/letsencrypt --key-file /etc/letsencrypt/live/searx.ihredomain.de/privkey.pem --ca-file /etc/letsencrypt/live/searx.ihredomain.de/chain.pem --cert-file /etc/letsencrypt/live/searx.ihredomain.de/cert.pem --fullchain-file /etc/letsencrypt/live/searx.ihredomain.de/fullchain.pem --reloadcmd "sudo /bin/systemctl reload nginx.service"

Starten Sie den Webser neu.

systemctl restart nginx.service

Starten Sie nun den SearXNG-Container das erste Mal und rufen die Suchseite im Browser ihrer Wahl auf:

docker compose up -d

https://searx.ihredomain.de

Die Suchergebnisse werden in gewohnter Form, sowohl im Desktop-Browser, als auch auf mobilen Geräten dargestellt:

Mozilla Firefox / Linux Mint 21
Mozilla Firefox / Fairphone4 using e/OS

Ihre neue Suchmaschine lässt sich zudem als Standardsuchmaschine im Browser hinterlegen.

Bei manueller Pflege der Suchmaschinen kann als Suchstring folgende Syntax verwendet werden:

https://searx.ihredomain.de/search?q=%s

In der Datei „searxng/settings.yml“ lassen sich bei Bedarf weitere Einstellungen vornehmen. Um diese dann aktiv werden zu lassen muss der Container neu gestartet werden:

cd ~/searxng-docker
docker compose restart

Sichern Sie nun die relevanten Datei:

cp ~/searxng-docker/.env /ihr/sicherungsverzeichnis 
cp ~/searxng-docker/compose.yaml /ihr/sicherungsverzeichnis 
cp ~/searxng/settings.yml /ihr/sicherungsverzeichnis 

Update

Um den Container zu aktualisieren genügt es, das aktuelle Image zu laden, den Container zu stoppen udn neu zu starten. Gehen Sie dazu wie folgt vor:

cd ~/searxng
docker compose pull
docker compose down
docker compose up -d

Sie können SearXNG gerne testen:

Die Installation der Meta-Suchmaschine neben Ihrer Nextcloud-Instanz wurde erfolgreich abgeschlossen und so wünsche ich Ihnen viel Spaß damit. Über Ihre Unterstützung (diese wird ordnungsgemäß versteuert!) würden sich meine Frau, meine Zwillinge und ich sehr freuen!