====== Searxng ======
===== Présentation de Searxng =====
[[https://github.com/searxngng/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) :
ServerName searx.nomdedomaine.fr
Redirect / https://searx.nomdedomaine.fr/
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
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