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:
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!