l’Almanet doLys Gnu/Linux – Open Source – Entreprises › Forums › L’almanet doLys Open Source › SearXNG où comment avoir son propre metamoteur souverain, sans résultats pollués par l’IA
Mots-clés : moteur de recherche
- This topic is empty.
- AuteurArticles
- août 15, 2023 à 4:19 pm #12536
SearXNG, c’est le retour à une vraie recherche web : des résultats nombreux et exploitables, sans extrait IA imposé, sans profilage publicitaire, sans annonces sponsorisées ni mise en avant commerciale.
Déployé sous Docker : outil isolé, mise à jour simple, portable sur serveur si besoin.
Ce tutoriel explique comment installer SearXNG avec Docker sur Linux, avec Valkey comme cache et un settings.yml court basé sur
use_default_settings.Les moteurs de recherche limitent de plus en plus les requêtes automatisées : CAPTCHA, erreur 403, 429 ou changement brutal de leur page de résultats. Une petite sélection de moteurs devient vite fragile. La configuration ci-dessous en utilise donc plusieurs en parallèle, avec des index différents et des moteurs spécialisés selon le type de recherche.
Attention : c’est précis et un peu fastidieux : plus pour curieux motivé ou avancé que pour quelqu’un qui veut du clef en main. Dans ce cas, utilisez une instance publique sur searx.space.
Résultat attendu
À la fin, vous avez une instance SearXNG locale accessible sur
localhost:8888, avec Docker, Valkey, une configuration maintenable, une bonne profondeur de résultats et plusieurs moteurs capables de prendre le relais lorsqu’un autre ne répond plus.Au programme :
- installation de Docker sur Debian/Ubuntu et Arch ;
- déploiement de SearXNG avec Docker Compose ;
- configuration de Valkey comme cache ;
- création d’un
settings.ymlmaintenable avecuse_default_settings; - moteurs généralistes et index indépendants ;
- recherche d’images, vidéos, actualités, code et publications scientifiques ;
- Marginalia et WolframAlpha avec leurs API ;
- tests, statistiques et mise à jour.
Installer Docker
Debian et dérivées :
sudo apt update sudo apt install ca-certificates curl gnupg sudo install -m 0755 -d /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg sudo chmod a+r /etc/apt/keyrings/docker.gpg echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \ https://download.docker.com/linux/debian \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null sudo apt update sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-pluginPour Ubuntu, utiliser le dépôt Docker Ubuntu à la place du dépôt Debian.
Arch, EndeavourOS, Manjaro et dérivées :
sudo pacman -S docker docker-composeDans les deux cas, activer Docker et rejoindre le groupe :
sudo systemctl enable --now docker sudo usermod -a -G docker $USER newgrp dockerLe
newgrpprend effet immédiatement sans déconnexion. Pour que ce soit permanent dans toutes les sessions, se reconnecter ou redémarrer.Philosophie de l’installation
J’organise mes services Docker dans
~/docker, avec un sous-dossier par service.Chaque service est autonome : son Compose, sa configuration et ses données. On peut tout arrêter, sauvegarder ou migrer service par service.
~/docker/ ├── searxng/ │ ├── docker-compose.yml │ └── config/ │ └── settings.yml │ ├── pihole/ │ ├── docker-compose.yml │ └── config/ │ └── dnscrypt-proxy/ ├── docker-compose.yml └── config/Pourquoi Valkey au lieu de Redis
SearXNG utilise une base rapide pour certaines fonctions qui nécessitent un état partagé.
Redis a changé de licence en 2024. Valkey est son fork communautaire compatible, maintenu sous gouvernance de la Linux Foundation.
Installer SearXNG avec Docker Compose
Créer l’arborescence :
mkdir -p ~/docker/searxng/config cd ~/docker/searxngCréer
docker-compose.yml:cat << 'EOF' > docker-compose.yml services: searxng: image: searxng/searxng:latest container_name: searxng ports: - "127.0.0.1:8888:8080" volumes: - "./config:/etc/searxng" - searxng_data:/var/cache/searxng environment: - SEARXNG_BASE_URL=http://localhost:8888/ - SEARXNG_INSTANCE_NAME=doLys - SEARXNG_VALKEY_URL=valkey://valkey:6379/0 restart: unless-stopped cap_drop: - ALL cap_add: - CHOWN - SETGID - SETUID deploy: resources: limits: cpus: '1.5' memory: 2G reservations: cpus: '0.5' memory: 1G valkey: image: valkey/valkey:9-alpine command: valkey-server --save 30 1 --loglevel warning restart: unless-stopped healthcheck: test: ["CMD", "valkey-cli", "ping"] interval: 30s timeout: 5s retries: 3 volumes: - valkey_data:/data volumes: searxng_data: valkey_data: networks: default: name: searxng_network EOFLe port
8888est publié uniquement sur127.0.0.1: SearXNG n’est donc pas accessible depuis les autres machines du réseau.Le volume
searxng_dataconserve le cache de SearXNG etvalkey_datales données de Valkey.Les blocs
deploy.resourceslimitent la consommation CPU et RAM. À adapter selon votre matériel.Valkey peut signaler au démarrage que
vm.overcommit_memoryn’est pas activé. Le réglage s’applique une seule fois :echo 'vm.overcommit_memory = 1' | sudo tee -a /etc/sysctl.conf sudo sysctl vm.overcommit_memory=1Clés API
Deux moteurs de cette configuration utilisent une clé.
Marginalia possède son propre index et fait notamment remonter des blogs, sites personnels et petits sites peu visibles dans les gros moteurs.
Une clé personnelle non commerciale peut être demandée gratuitement à :
contact@marginalia-search.comIndiquez simplement qu’il s’agit d’une instance SearXNG personnelle.
WolframAlpha sert au calcul et aux données structurées : mathématiques, physique, conversions, constantes, etc.
Créer un compte sur
developer.wolframalpha.com, puis créer un App ID.Dans le fichier ci-dessous, les vraies clés remplaceront :
VOTRE_CLE_MARGINALIA VOTRE_CLE_WOLFRAMALPHANe publiez ensuite jamais votre
settings.ymlavec ces valeurs réelles.Quels moteurs utiliser
SearXNG interroge plusieurs moteurs puis fusionne leurs réponses.
Tous les moteurs web généralistes partent ici avec un poids de
1.0. Un poids supérieur influence le classement mais ne rend pas un moteur plus fiable et ne contourne ni CAPTCHA ni limitation de requêtes.Recherche générale
Google CSE, Bing, Brave, Mojeek, Yandex, Yep, Seznam et Naver apportent les gros index et classements généralistes.
Marginalia, Mwmbl, Wiby et SearchMySite permettent de retrouver davantage de petits sites, blogs et pages indépendantes.
PrivacyWall, ResultHunter, SearchToday, Vuhuv et YaCy complètent les résultats tant qu’ils répondent correctement.
Qwant reste chargé comme dépendance technique de ses moteurs Vidéos et Actualités, mais n’est pas activé dans la recherche générale.
Wikipedia n’est pas utilisé comme moteur. Une page Wikipedia peut naturellement apparaître si Google, Bing ou un autre moteur la considère pertinente.
Images
Bing Images, Google CSE Images, PrivacyWall Images, Yandex Images, Mojeek Images, Naver Images, ResultHunter Images, Brave Images, Openverse, Wikimedia Commons et Flickr.
Vidéos
Bing Videos, Qwant Videos, PrivacyWall Videos, Naver Videos, Vuhuv Videos, Wikimedia Commons Videos, YouTube, Dailymotion, Brave Videos, PeerTube et SepiaSearch.
Actualités
Bing News, Qwant News, Mojeek News, Naver News, Brave News, Reuters et Wikinews.
IT / Linux / code
Arch Linux Wiki, GitHub, GitLab, Codeberg, Sourcehut, StackOverflow, AskUbuntu, SuperUser, Docker Hub, PyPI, npm, MDN, Mankier et discuss.python.
Science
arXiv, Crossref, PubMed, Semantic Scholar, OpenAIRE Publications, OpenAIRE Datasets et OpenAlex.
Cartographie, météo et outils
OpenStreetMap et Photon pour la cartographie, OpenMeteo et wttr.in pour la météo, Currency pour les conversions et WolframAlpha pour les calculs et données structurées.
Créer un settings.yml court avec use_default_settings
use_default_settingspermet de conserver les définitions internes de SearXNG au lieu de les recopier dans votre fichier.Avec
keep_only, seuls les moteurs choisis sont chargés. Le blocengines:sert à activer ceux qui sont désactivés par défaut, fournir les clés API ou modifier un réglage particulier.Créer
settings.yml:cat > ~/docker/searxng/config/settings.yml << 'EOF' use_default_settings: engines: keep_only: # Généralistes et index concurrents - "google cse" - bing - brave # Qwant reste chargé pour qwant videos / qwant news # mais n'est pas activé en recherche générale. - qwant - mojeek - yandex - yep - seznam - naver - marginalia - mwmbl - wiby - searchmysite - privacywall - resulthunter - searchtoday - vuhuv - yacy # Images - "bing images" - "google cse images" - "privacywall images" - "yandex images" - "mojeek images" - "naver images" - "resulthunter images" - brave.images - openverse - wikicommons.images - flickr # Vidéos - "bing videos" - "qwant videos" - "privacywall videos" - "naver videos" - "vuhuv videos" - wikicommons.videos - youtube - dailymotion - brave.videos - peertube - sepiasearch # Actualités - "bing news" - "qwant news" - "mojeek news" - "naver news" - brave.news - reuters - wikinews # Technique / développement - "arch linux wiki" - github - gitlab - codeberg - sourcehut - stackoverflow - askubuntu - superuser - "docker hub" - pypi - npm - mdn - mankier - discuss.python # Science - arxiv - crossref - pubmed - "semantic scholar" - openairepublications - openairedatasets - openalex # Cartographie / météo / outils - openstreetmap - photon - openmeteo - wttr.in - currency - wolframalpha plugins: searx.plugins.calculator.SXNGPlugin: active: true searx.plugins.hash_plugin.SXNGPlugin: active: true searx.plugins.tracker_url_remover.SXNGPlugin: active: true searx.plugins.unit_converter.SXNGPlugin: active: true searx.plugins.oa_doi_rewrite.SXNGPlugin: active: true searx.plugins.self_info.SXNGPlugin: active: false general: debug: false instance_name: "doLys" privacypolicy_url: false donation_url: false contact_url: false enable_metrics: true search: safe_search: 0 autocomplete: "" autocomplete_min: 4 default_lang: "all" ban_time_on_fail: 5 max_ban_time_on_fail: 120 formats: - html server: port: 8888 bind_address: "127.0.0.1" base_url: http://localhost:8888/ limiter: false public_instance: false secret_key: "REMPLACER_PAR_OPENSSL_RAND_HEX_32" image_proxy: true http_protocol_version: "1.0" method: "POST" default_http_headers: X-Content-Type-Options: nosniff X-Download-Options: noopen X-Robots-Tag: noindex, nofollow Referrer-Policy: no-referrer valkey: url: valkey://valkey:6379/0 ui: static_path: "" templates_path: "" query_in_title: false default_theme: simple center_alignment: false default_locale: "fr" theme_args: simple_style: auto search_on_category_select: true hotkeys: default outgoing: request_timeout: 5.0 max_request_timeout: 12.0 useragent_suffix: "" pool_connections: 100 pool_maxsize: 20 enable_http2: true categories_as_tabs: general: images: videos: news: map: music: it: science: engines: # Généralistes : même poids - name: "google cse" disabled: false weight: 1.0 - name: bing disabled: false weight: 1.0 - name: brave disabled: false weight: 1.0 - name: mojeek disabled: false weight: 1.0 - name: yandex disabled: false weight: 1.0 - name: yep disabled: false weight: 1.0 - name: seznam disabled: false weight: 1.0 - name: naver disabled: false weight: 1.0 - name: mwmbl disabled: false weight: 1.0 - name: wiby disabled: false weight: 1.0 - name: searchmysite disabled: false weight: 1.0 - name: privacywall disabled: false weight: 1.0 - name: resulthunter disabled: false weight: 1.0 - name: searchtoday disabled: false weight: 1.0 - name: vuhuv disabled: false weight: 1.0 - name: yacy disabled: false weight: 1.0 # Marginalia - name: marginalia api_key: "VOTRE_CLE_MARGINALIA" filter_name: "" disabled: false inactive: false weight: 1.0 # WolframAlpha - name: wolframalpha engine: wolframalpha_api api_key: "VOTRE_CLE_WOLFRAMALPHA" disabled: false inactive: false # Science - name: crossref disabled: false timeout: 30.0 - name: openalex disabled: false - name: arxiv disabled: false - name: pubmed disabled: false - name: "semantic scholar" disabled: false - name: openairepublications disabled: false - name: openairedatasets disabled: false # Images - name: "privacywall images" disabled: false - name: "yandex images" disabled: false - name: "mojeek images" disabled: false - name: "naver images" disabled: false - name: "resulthunter images" disabled: false - name: openverse disabled: false # Vidéos - name: "qwant videos" disabled: false - name: "privacywall videos" disabled: false - name: "naver videos" disabled: false - name: "vuhuv videos" disabled: false - name: peertube disabled: false - name: youtube disabled: false - name: sepiasearch disabled: false # Actualités - name: "qwant news" disabled: false - name: "mojeek news" disabled: false - name: "naver news" disabled: false - name: wikinews disabled: false # IT / Linux / code - name: codeberg disabled: false - name: gitlab disabled: false - name: sourcehut disabled: false - name: discuss.python disabled: false - name: stackoverflow disabled: false - name: askubuntu disabled: false - name: superuser disabled: false - name: github disabled: false - name: npm disabled: false - name: pypi disabled: false - name: mdn disabled: false - name: mankier disabled: false - name: "docker hub" disabled: false - name: "arch linux wiki" disabled: false # Cartographie / météo / outils - name: openstreetmap disabled: false - name: photon disabled: false - name: openmeteo disabled: false - name: wttr.in disabled: false - name: currency disabled: false EOFLe
filter_name: ""de Marginalia doit rester vide.La configuration ne surcharge volontairement pas
suspended_times. SearXNG utilise ainsi les valeurs prévues par la version installée et profite de leurs évolutions lors des mises à jour.Pour créer la clé secrète :
openssl rand -hex 32Copier le résultat à la place de :
REMPLACER_PAR_OPENSSL_RAND_HEX_32Puis remplacer également :
VOTRE_CLE_MARGINALIA VOTRE_CLE_WOLFRAMALPHADémarrer SearXNG
cd ~/docker/searxng docker compose up -d sleep 5 docker compose ps docker logs --tail=150 searxngSearXNG doit être accessible sur :
http://localhost:8888Docker doit afficher une publication de port de cette forme :
127.0.0.1:8888->8080/tcpValkey peut rester quelques secondes en
health: startingavant de passer àhealthy.Tester les résultats
La langue de recherche est réglée par défaut sur
all.C’est préférable pour les recherches techniques, scientifiques ou portant sur des noms propres : un terme comme
CachyOSne doit pas limiter les résultats aux seules pages françaises.Quelques recherches permettent déjà de vérifier le comportement :
CachyOS notaire rouvez docker compose searxngTester aussi les pages 2 et 3.
SearXNG permet d’isoler un moteur avec son raccourci :
!mar CachyOS !goc CachyOS !br CachyOS !mjk CachyOSLes deux pages suivantes sont très utiles :
http://localhost:8888/stats http://localhost:8888/stats/errorsLa première montre notamment les temps de réponse.
La seconde signale les CAPTCHA, erreurs HTTP, timeouts et erreurs d’analyse rencontrés par les moteurs.
Quelques erreurs ponctuelles sont normales. Les moteurs web modifient leurs protections et leur HTML sans prévenir ; l’intérêt de SearXNG est justement de ne pas dépendre d’un seul d’entre eux.
Pas d’extrait IA imposé
SearXNG n’ajoute pas de résumé génératif au-dessus de vos résultats.
Les pages restent des pages de recherche : titre, URL, extrait, provenance des moteurs et résultats suivants.
Cette configuration n’active pas Wikipedia comme moteur dédié. Wikipedia peut néanmoins apparaître comme résultat normal lorsqu’un moteur le renvoie.
SearXNG n’ajoute pas non plus de bloc publicitaire ou de résultat sponsorisé à l’interface. Un site commercial peut évidemment apparaître lorsqu’il correspond réellement à la requête.
Définir SearXNG comme moteur de recherche
Dans Firefox, ouvrir l’instance SearXNG puis l’ajouter aux moteurs disponibles depuis les paramètres de recherche du navigateur.
Vous pouvez ensuite le définir comme moteur par défaut pour que les recherches saisies dans la barre d’adresse passent directement par votre instance.
Mettre à jour SearXNG
Télécharger une nouvelle image Docker ne suffit pas : le conteneur en cours continue à utiliser l’ancienne tant qu’il n’est pas recréé.
Utiliser :
cd ~/docker/searxng docker compose pull docker compose up -d --force-recreate docker compose ps docker logs --tail=100 searxngPour vérifier que le conteneur utilise bien l’image
latestlocale :RUNNING=$(docker inspect -f '{{.Image}}' searxng) LOCAL=$(docker image inspect searxng/searxng:latest -f '{{.Id}}') echo "Image utilisée : $RUNNING" echo "Image latest : $LOCAL" [ "$RUNNING" = "$LOCAL" ] \ && echo "OK : conteneur à jour" \ || echo "Le conteneur utilise encore une ancienne image"Remplacer le logo
Créer
searxng-custom.pngetsearxng-custom.svgdans~/docker/searxng, puis :CONTAINER=$(docker ps --filter 'name=searxng' --format '{{.ID}}') DEST=/usr/local/searxng/searx/static/themes/simple/img/ docker cp ./searxng-custom.png $CONTAINER:${DEST}searxng.png docker cp ./searxng-custom.svg $CONTAINER:${DEST}searxng.svg docker compose restart searxngLe logo placé directement dans le conteneur est écrasé lors de sa recréation.
Script de mise à jour avec recopie automatique, à placer dans
~/docker/searxng/searxng-maj.sh:#!/usr/bin/env python3 import subprocess import os os.chdir(os.path.expanduser("~/docker/searxng")) def run(cmd, check=True): result = subprocess.run( cmd, shell=True, capture_output=True, text=True ) if check and result.returncode != 0: print(f"Erreur : {cmd}\n{result.stderr}") raise SystemExit(1) return result run("docker compose pull") run("docker compose up -d --force-recreate") result = run( "docker ps --filter 'name=searxng' --format '{{.ID}}'", check=False ) container_id = result.stdout.strip().split("\n")[0] if container_id: dest = "/usr/local/searxng/searx/static/themes/simple/img/" run( f"docker cp ./searxng-custom.png " f"{container_id}:{dest}searxng.png" ) run( f"docker cp ./searxng-custom.svg " f"{container_id}:{dest}searxng.svg" ) run("docker compose restart searxng") else: print("Conteneur SearXNG non trouvé.")chmod +x searxng-maj.sh ./searxng-maj.shEn amont, j’utilise Pi-hole pour le DNS et le filtrage des publicités :
Pour aller plus loin sur les moteurs disposant de leurs propres index :
https://seirdy.one/posts/2021/03/10/search-engines-with-own-indexes/
Carte des relations entre moteurs :
https://www.searchenginemap.com/
Questions fréquentes
SearXNG remplace-t-il Google ?
SearXNG interroge ici Google CSE avec de nombreux autres moteurs puis fusionne leurs résultats. Google devient l’une des sources de la recherche.
SearXNG génère-t-il des réponses avec une IA ?
Cette configuration n’utilise aucun moteur génératif pour résumer les résultats. SearXNG affiche les résultats transmis par les moteurs interrogés et ses propres réponses fonctionnelles, par exemple pour les conversions ou le calcul.
SearXNG rend-il les recherches anonymes ?
Le moteur interrogé reçoit la requête depuis l’instance SearXNG sans recevoir directement les cookies de votre navigateur ni son contexte habituel de navigation.
Il voit toutefois l’adresse IP de sortie de l’instance. Un moteur utilisé avec une clé API peut également associer les requêtes à cette clé.
Pourquoi désactiver l’autocomplétion ?
L’autocomplétion génère des requêtes supplémentaires pendant la frappe. Sur une instance personnelle, cela augmente inutilement le trafic vers les moteurs et peut accélérer leurs limitations.
Pourquoi la langue par défaut est-elle « all » ?
Les recherches techniques, scientifiques et les noms propres donnent souvent de meilleurs résultats sans filtre linguistique systématique.
L’interface reste en français et la langue peut toujours être choisie ponctuellement.
Faut-il un nom de domaine et HTTPS ?
Non pour un usage local.
Avec :
127.0.0.1:8888:8080Docker publie SearXNG uniquement sur la machine locale.
Pour exposer l’instance sur Internet, utilisez un reverse proxy comme Caddy ou Nginx Proxy Manager, activez HTTPS et adaptez les mécanismes de limitation à une instance publique.
Comment accéder depuis plusieurs machines du réseau local ?
Dans
docker-compose.yml, remplacer :- "127.0.0.1:8888:8080"par :
- "8888:8080"Puis recréer le conteneur :
docker compose up -d --force-recreateL’instance devient accessible via :
http://IP_DU_SERVEUR:8888Vérifiez le pare-feu de la machine avant d’ouvrir le port à d’autres appareils.
Un jeune site que j'aime bien, la ferrari du T-shirt ...bio en plus : GoudronBlanc
- AuteurArticles
- Vous devez être connecté pour répondre à ce sujet.