Table des matières

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 :

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