====== Installer une instance 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