Searxng
Présentation de Searxng
Searxng est un métamoteur de recherche libre, c’est-à-dire qu'il ne gère pas lui-même la recherche mais s'appuie sur des moteurs de recherches tels que bing, google, duckduckgo, etc.
Préparation
Installez les dépendances :
sudo aptitude install python3-dev python3-babel python3-venv uwsgi uwsgi-plugin-python3 git build-essential libxslt-dev zlib1g-dev libffi-dev libssl-dev shellcheck libapache2-mod-proxy-uwsgi
Créez un utilisateur searxng :
sudo useradd --shell /bin/bash --system --home-dir "/usr/local/searxng" --comment 'Privacy-respecting metasearch engine' searxng
Créez le répertoire home ainsi que le sous répertoire pour le socket uWSGI :
sudo mkdir -p /usr/local/searxng/run/
Modifiez le propriétaire du répertoire home :
sudo chown -R "searxng:searxng" "/usr/local/searxng"
Installation de Searxng
Connectez-vous avec l'utilisateur searxng :
sudo -u searxng -i
Récupérez les sources de Searxng :
git clone "https://github.com/searxng/searxng" "/usr/local/searxng/searxng-src"
Créez l'environnement Python :
python3 -m venv "/usr/local/searxng/searx-pyenv"
Activez-le à chaque connexion :
echo ". /usr/local/searxng/searx-pyenv/bin/activate" >> "/usr/local/searxng/.profile"
Déconnectez-vous avec la commande
exit
Connectez-vous de nouveau avec l'utilisateur searxng :
sudo -u searxng -i
Mettre à jour les modules nécessaires :
pip install -U pip pip install -U setuptools pip install -U wheel pip install -U pyyaml
Lancez l'installation :
cd "/usr/local/searxng/searxng-src" pip install -e .
Configuration
Dans un autre terminal, créez le fichier de configuration :
sudo mkdir -p "/etc/searxng" sudo nano /etc/searxng/settings.yml
Copiez-y les lignes suivantes (modifiez la clé secrète et l'adresse mail) :
# SearXNG settings use_default_settings: true general: debug: false instance_name: "SearXNG" contact_url: mailto:contact@domaine.fr search: safe_search: 0 autocomplete: 'duckduckgo' formats: - html server: secret_key: "générez la clé secrète avec la commande : openssl rand -hex 16" limiter: true image_proxy: true redis: url: unix:///usr/local/searxng-redis/run/redis.sock?db=0 ui: # Custom static path - leave it blank if you didn't change static_path: "" static_use_hash: false # Custom templates path - leave it blank if you didn't change templates_path: "" # query_in_title: When true, the result page's titles contains the query # it decreases the privacy, since the browser can records the page titles. query_in_title: false # infinite_scroll: When true, automatically loads the next page when scrolling to bottom of the current page. infinite_scroll: false # ui theme default_theme: simple # center the results ? center_alignment: false # URL prefix of the internet archive, don't forgett trailing slash (if needed). # cache_url: "https://webcache.googleusercontent.com/search?q=cache:" # Default interface locale - leave blank to detect from browser information or # use codes from the 'locales' config section default_locale: "" # Open result links in a new tab by default results_on_new_tab: true theme_args: # style of simple theme: auto, light, dark simple_style: auto # preferences: # lock: # - autocomplete # - method enabled_plugins: - 'Hash plugin' - 'Search on category select' - 'Self Informations' - 'Tracker URL remover' - 'Ahmia blacklist' # - 'Hostname replace' # see hostname_replace configuration below # - 'Infinite scroll' # - 'Open Access DOI rewrite' # - 'Vim-like hotkeys' # plugins: # - only_show_green_results engines: - name: google engine: google shortcut: go # see https://searxng.github.io/searxng/src/searx.engines.google.html#module-searx.engines.google use_mobile_ui: true # additional_tests: # android: *test_android
Voici les principales options par défaut activées dans ce fichier configuration :
- safe_search: 0 → la Recherche sécurisée est désactivée
- autocomplete: 'duckduckgo' → l'autocomplétion est fournie par duckduckgo
- formats: - html → seule l'accès via le site est autorisée. L'accès via RSS/JSON est désactivée (seuls les bots utilisent ces accès)
- limiter: true → active le filtre anti-bot
- results_on_new_tab: true → ouvre les résultats dans un nouvel onglet
- use_mobile_ui: true → permet d'éviter le blocage de Google
Redis
Redis va stocker la base de donnée du plugin “limiter” servant à lutter contre les bots.
On va utiliser le script d'installation fourni par SearXNG pour l'installer et le configurer :
sudo -s sudo /usr/local/searxng/searxng-src/utils/searxng.sh install redis
Choisissez les réponses par défaut à chaque question.
uWSGI
uWSGI va nous permettre de démarrer l'instance Searx.
Créez le fichier de configuration pour uWSGI :
sudo nano /etc/uwsgi/apps-available/searxng.ini
Collez-y les lignes suivantes :
# -*- mode: conf; coding: utf-8 -*- [uwsgi] # uWSGI core # ---------- # # https://uwsgi-docs.readthedocs.io/en/latest/Options.html#uwsgi-core # Who will run the code / Hint: in emperor-tyrant mode uid & gid setting will be # ignored [1]. Mode emperor-tyrant is the default on fedora (/etc/uwsgi.ini). # # [1] https://uwsgi-docs.readthedocs.io/en/latest/Emperor.html#tyrant-mode-secure-multi-user-hosting # uid = searxng gid = searxng # set (python) default encoding UTF-8 env = LANG=C.UTF-8 env = LANGUAGE=C.UTF-8 env = LC_ALL=C.UTF-8 # chdir to specified directory before apps loading chdir = /usr/local/searxng/searxng-src/searx # SearXNG configuration (settings.yml) env = SEARXNG_SETTINGS_PATH=/etc/searxng/settings.yml # disable logging for privacy disable-logging = true # The right granted on the created socket chmod-socket = 666 # Plugin to use and interpreter config single-interpreter = true # enable master process master = true # load apps in each worker instead of the master lazy-apps = true # load uWSGI plugins plugin = python3,http # By default the Python plugin does not initialize the GIL. This means your # app-generated threads will not run. If you need threads, remember to enable # them with enable-threads. Running uWSGI in multithreading mode (with the # threads options) will automatically enable threading support. This *strange* # default behaviour is for performance reasons. enable-threads = true # plugin: python # -------------- # # https://uwsgi-docs.readthedocs.io/en/latest/Options.html#plugin-python # load a WSGI module module = searx.webapp # set PYTHONHOME/virtualenv virtualenv = /usr/local/searxng/searx-pyenv # add directory (or glob) to pythonpath pythonpath = /usr/local/searxng/searxng-src # speak to upstream # ----------------- socket = /usr/local/searxng/run/socket buffer-size = 8192 # uWSGI serves the static files and in settings.yml we use:: # # ui: # static_use_hash: true # static-map = /static=/usr/local/searxng/searxng-src/searx/static # expires set to one year since there are hashes static-expires = /* 31557600 static-gzip-all = True offload-threads = %k # Cache cache2 = name=searxngcache,items=2000,blocks=2000,blocksize=4096,bitmap=1
Activez le lancement au démarrage de Searx :
sudo ln -s /etc/uwsgi/apps-available/searxng.ini /etc/uwsgi/apps-enabled/
Démarrez Searx :
sudo service uwsgi start searxng
Configuration d'Apache
On va configurer Apache2 pour pouvoir accéder à notre instance Searx via un sous domaine style searx.domaine.fr (je ne traiterai pas la gestion du nom de domaine)
Activez les modules Apache2 nécessaires :
sudo a2enmod headers proxy proxy_http ssl proxy_uwsgi
Créez le fichier de config Apache2 :
sudo nano /etc/apache2/sites-available/searx.domaine.fr.conf
Copiez-y les lignes suivantes (remplacez le noom de domaine par le vôtre ainsi que l'emplacement des fichiers SSL) :
<VirtualHost *:80> ServerName searx.nomdedomaine.fr Redirect / https://searx.nomdedomaine.fr/ </VirtualHost> <VirtualHost *:443> ServerName searx.rasp.fr LogLevel warn ErrorLog ${APACHE_LOG_DIR}/searxng.error.log SSLEngine on SSLProxyEngine On ProxyRequests Off ProxyPreserveHost On SSLCertificateFile /etc/letsencrypt/live/nomdedomaine.fr/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/nomdedomaine.fr/privkey.pem AddDefaultCharset utf-8 HostnameLookups off UseCanonicalName off ProxyBadHeader Ignore KeepAlive off Header set Content-Security-Policy "upgrade-insecure-requests; default-src 'none'; script-src 'self'; style-src 'self' 'unsafe-inline'; form-action 'self'; font-src 'self'; frame-ancestors 'self'; base-uri 'self'; connect-src 'self' https://overpass-api.de; img-src *; frame-src https://www.youtube-nocookie.com https://player.vimeo.com https://www.dailymotion.com https://www.deezer.com https://www.mixcloud.com https://w.soundcloud.com https://embed.spotify.com; media-src *" ProxyPreserveHost On ProxyPass / unix:/usr/local/searxng/run/socket|uwsgi://uwsgi-uds-searxng/ # see limiter.py RequestHeader set X-Real-IP %{REMOTE_ADDR}s RequestHeader append X-Forwarded-For %{REMOTE_ADDR}s </VirtualHost>
Activez le fichier de configuration :
sudo a2ensite searx.nomdedomaine.fr.conf
Votre instance SearXNG est maintenant accessible à l'adresse searx.nomdedomaine.fr.
Mise à jour de SearXNG
Pour mettre à jour votre instance, il vous suffit de lancer la commande suivante :
sudo /usr/local/searxng/searxng-src/utils/searxng.sh instance update