serveur_hebergement:installer_une_instance_searx

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
serveur_hebergement:installer_une_instance_searx [2022/10/02 17:46] – [Préparation] fateserveur_hebergement:installer_une_instance_searx [2024/01/20 18:17] (Version actuelle) – [Redis] fate
Ligne 1: Ligne 1:
-====== Installer une instance Searx ======+====== Installer une instance Searxng ======
  
-===== Présentation de Searx =====+===== 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 ===== ===== Préparation =====
Ligne 7: Ligne 9:
 Installez les dépendances : <code bash>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</code> Installez les dépendances : <code bash>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</code>
  
-Créez un utilisateur searx :  +Créez un utilisateur searxng :  
-<code bash>sudo useradd --shell /bin/bash --system --home-dir "/usr/local/searx" --comment 'Privacy-respecting metasearch engine' searx</code>+<code bash>sudo useradd --shell /bin/bash --system --home-dir "/usr/local/searxng" --comment 'Privacy-respecting metasearch engine' searxng</code>
  
-Créez le répertoire home :  +Créez le répertoire home ainsi que le sous répertoire pour le socket uWSGI 
-<code bash>sudo  mkdir "/usr/local/searx"</code>+<code bash>sudo mkdir -p /usr/local/searxng/run/</code>
  
 Modifiez le propriétaire du répertoire home : Modifiez le propriétaire du répertoire home :
-<code bash>sudo  chown -R "searx:searx" "/usr/local/searx"</code>+<code bash>sudo  chown -R "searxng:searxng" "/usr/local/searxng"</code>
  
-===== Installation de Searx =====+===== Installation de Searxng =====
  
-Connectez-vous avec l'utilisateur searx :  +Connectez-vous avec l'utilisateur searxng :  
-<code bash>sudo  -u searx -i</code>+<code bash>sudo  -u searxng -i</code>
  
-Récupérez les sources de Searx +Récupérez les sources de Searxng 
-<code bash>git clone "https://github.com/searx/searx.git" "/usr/local/searx/searx-src"</code>+<code bash>git clone "https://github.com/searxng/searxng" "/usr/local/searxng/searxng-src"</code>
  
 Créez l'environnement Python : Créez l'environnement Python :
-<code bash>python3 -m venv "/usr/local/searx/searx-pyenv"</code>+<code bash>python3 -m venv "/usr/local/searxng/searx-pyenv"</code>
  
 Activez-le à chaque connexion : Activez-le à chaque connexion :
-<code bash>echo ". /usr/local/searx/searx-pyenv/bin/activate" >>  "/usr/local/searx/.profile"</code>+<code bash>echo ". /usr/local/searxng/searx-pyenv/bin/activate" >>  "/usr/local/searxng/.profile"</code>
  
-Déconnectez vous avec la commande <code bash>exit</code> +Déconnectez-vous avec la commande <code bash>exit</code> 
-Connectez-vous de nouveau avec l'utilisateur searx +Connectez-vous de nouveau avec l'utilisateur searxng 
-<code bash>sudo  -u searx -i</code>+<code bash>sudo -u searxng -i</code>
  
 Mettre à jour les modules nécessaires :  Mettre à jour les modules nécessaires : 
Ligne 44: Ligne 46:
 Lancez l'installation : Lancez l'installation :
 <code bash> <code bash>
-cd "/usr/local/searx/searx-src"+cd "/usr/local/searxng/searxng-src"
 pip install -e . pip install -e .
 </code> </code>
Ligne 50: Ligne 52:
 ===== Configuration ===== ===== Configuration =====
  
-Dans un autre terminal, copiez le fichier de configuration par défaut :+Dans un autre terminal, créez le fichier de configuration :
 <code bash> <code bash>
-sudo  mkdir -p "/etc/searx+sudo  mkdir -p "/etc/searxng
-sudo  cp "/usr/local/searx/searx-src/utils/templates/etc/searx/use_default_settings.yml" "/etc/searx/settings.yml"+sudo  nano /etc/searxng/settings.yml
 </code> </code>
  
-Ouvrez le fichier /etc/searx/settings.yml et remplacez la valeur de la secret_key par une suite de chiffres et de lettres.+Copiez-y les lignes suivantes (modifiez la clé secrète et l'adresse mail) : 
 +<code> 
 +# SearXNG settings
  
-Pour vérifiez que Searx se lance sans problème, activez le debug : +use_default_settingstrue
-<code bash>sudo  sed -i -e "s/debug : False/debug : True/g" "/etc/searx/settings.yml"</code>+
  
-Connectez-vous de nouveau avec l'utilisateur searx si vous vous êtes déconnectés +general: 
-<code bash>sudo  -u searx -i</code>+  debug: false 
 +  instance_name: "SearXNG" 
 +  contact_url: mailto:contact@domaine.fr 
 + 
 +search: 
 +  safe_search:
 +  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
  
-Puis lancez searx :  
-<code bash> 
-cd /usr/local/searx/searx-src 
-export SEARX_SETTINGS_PATH="/etc/searx/settings.yml" 
-python searx/webapp.py 
 </code> </code>
  
-Désactivez le mode debug +Voici les principales options par défaut activées dans ce fichier configuration 
-<code bash>sudo  sed --e "s/debug True/debug False/g" "/etc/searx/settings.yml"</code>+  * 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) 
 +  * limitertrue -> active le filtre anti-bot 
 +  * results_on_new_tabtrue -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 :
 +<code bash>
 +sudo -s 
 +sudo /usr/local/searxng/searxng-src/utils/searxng.sh install redis
 +</code>
 +
 +Choisissez les réponses par défaut à chaque question.
 ===== uWSGI ===== ===== uWSGI =====
  
Ligne 79: Ligne 163:
  
 Créez le fichier de configuration pour uWSGI : Créez le fichier de configuration pour uWSGI :
-<code bash>sudo nano /etc/uwsgi/apps-available/searx.ini</code>+<code bash>sudo nano /etc/uwsgi/apps-available/searxng.ini</code>
  
 Collez-y les lignes suivantes : Collez-y les lignes suivantes :
 <code bash> <code bash>
 +# -*- mode: conf; coding: utf-8  -*-
 [uwsgi] [uwsgi]
  
Ligne 90: Ligne 175:
 # https://uwsgi-docs.readthedocs.io/en/latest/Options.html#uwsgi-core # https://uwsgi-docs.readthedocs.io/en/latest/Options.html#uwsgi-core
  
-# Who will run the code +# Who will run the code / Hint: in emperor-tyrant mode uid & gid setting will be 
-uid = searx +# ignored [1].  Mode emperor-tyrant is the default on fedora (/etc/uwsgi.ini). 
-gid = searx+
 +# [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 # set (python) default encoding UTF-8
Ligne 100: Ligne 189:
  
 # chdir to specified directory before apps loading # chdir to specified directory before apps loading
-chdir = /usr/local/searx/searx-src/searx+chdir = /usr/local/searxng/searxng-src/searx
  
-searx configuration (settings.yml) +SearXNG configuration (settings.yml) 
-env = SEARX_SETTINGS_PATH=/etc/searx/settings.yml+env = SEARXNG_SETTINGS_PATH=/etc/searxng/settings.yml
  
 # disable logging for privacy # disable logging for privacy
Ligne 140: Ligne 229:
  
 # set PYTHONHOME/virtualenv # set PYTHONHOME/virtualenv
-virtualenv = /usr/local/searx/searx-pyenv+virtualenv = /usr/local/searxng/searx-pyenv
  
 # add directory (or glob) to pythonpath # add directory (or glob) to pythonpath
-pythonpath = /usr/local/searx/searx-src+pythonpath = /usr/local/searxng/searxng-src
  
  
 # speak to upstream # speak to upstream
 # ----------------- # -----------------
-# 
-# Activate the 'http' configuration for filtron or activate the 'socket' 
-# configuration if you setup your HTTP server to use uWSGI protocol via sockets. 
  
-# using IP: +socket = /usr/local/searxng/run/socket 
-+buffer-size = 8192
-# https://uwsgi-docs.readthedocs.io/en/latest/Options.html#pluginttp +
-# Native HTTP support: https://uwsgi-docs.readthedocs.io/en/latest/HTTP.html+
  
-http = 127.0.0.1:8888 +uWSGI serves the static files and in settings.yml we use::
- +
-using unix-sockets: +
-+
-# On some distributions you need to create the app folder for the sockets::+
 # #
-#   mkdir -p /run/uwsgi/app/searx +#   ui: 
-  chown -R searx:searx  /run/uwsgi/app/searx+    static_use_hashtrue
 # #
-# socket = /run/uwsgi/app/searx/socket+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 # Cache
-cache2 = name=searxcache,items=2000,blocks=2000,blocksize=4096,bitmap=1+cache2 = name=searxngcache,items=2000,blocks=2000,blocksize=4096,bitmap=1
 </code> </code>
    
 Activez le lancement au démarrage de Searx : Activez le lancement au démarrage de Searx :
-<code bash>sudo ln -s /etc/uwsgi/apps-available/searx.ini /etc/uwsgi/apps-enabled/</code>+<code bash>sudo ln -s /etc/uwsgi/apps-available/searxng.ini /etc/uwsgi/apps-enabled/</code>
  
 Démarrez Searx : Démarrez Searx :
-<code bash>sudo service uwsgi start searx</code>+<code bash>sudo service uwsgi start searxng</code>
  
 ===== Configuration d'Apache ===== ===== Configuration d'Apache =====
  
-On va configurer Apache2 pour pour voir accéder à notre instance Searx via un sous domaine style searx.domaine.fr (je ne traiterai pas la gestion du nom de domaine)+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 : Activez les modules Apache2 nécessaires :
-<code bash>sudo a2enmod headers proxy proxy_http</code>+<code bash>sudo a2enmod headers proxy proxy_http ssl proxy_uwsgi</code>
  
 Créez le fichier de config Apache2 : Créez le fichier de config Apache2 :
 <code bash>sudo nano /etc/apache2/sites-available/searx.domaine.fr.conf</code> <code bash>sudo nano /etc/apache2/sites-available/searx.domaine.fr.conf</code>
  
-Copiez-y les lignes suivantes (remplacez le noom de domaine par le votre ainsi que l'emplacement des fichiers SSL) : +Copiez-y les lignes suivantes (remplacez le noom de domaine par le vôtre ainsi que l'emplacement des fichiers SSL) : 
 <code apache> <code apache>
 <VirtualHost *:80> <VirtualHost *:80>
  
         ServerName searx.nomdedomaine.fr         ServerName searx.nomdedomaine.fr
-        ServerAdmin fate@nomdedomaine.fr 
  
         Redirect / https://searx.nomdedomaine.fr/         Redirect / https://searx.nomdedomaine.fr/
  
 </VirtualHost> </VirtualHost>
 +
 +<VirtualHost *:443>
 +        ServerName searx.rasp.fr
  
         LogLevel warn         LogLevel warn
-        #CustomLog ${APACHE_LOG_DIR}/searx.access.log combined +        ErrorLog ${APACHE_LOG_DIR}/searxng.error.log
-        ErrorLog ${APACHE_LOG_DIR}/searx.error.log+
  
-        <IfModule mod_ssl.c> 
-                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 *" 
-        </IfModule> 
  
-#       <FilesMatch \.xml$> +        SSLEngine on 
-#               SetEnv no-gzip 1 +        SSLProxyEngine On 
-#       </FilesMatch>+        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/
  
-        <FilesMatch "\.(cgi|shtml|phtml|php)$"> +        # see limiter.py 
-                SSLOptions +StdEnvVars +        RequestHeader set X-Real-IP %{REMOTE_ADDR}s 
-        </FilesMatch>+        RequestHeader append X-Forwarded-For %{REMOTE_ADDR}s 
  
-        ProxyPass / http://127.0.0.1:4004/ 
-        #ProxyPassReverse / http://localhost:4004/ 
- 
-        <Directory /usr/lib/cgi-bin> 
-                SSLOptions +StdEnvVars 
-        </Directory> 
- 
-        BrowserMatch "MSIE [2-6]" \ 
-        nokeepalive ssl-unclean-shutdown \ 
-        downgrade-1.0 force-response-1.0 
-        BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown 
  
 </VirtualHost> </VirtualHost>
  
-# modern configuration, tweak to your needs 
-SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1 
-SSLCipherSuite          ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256 
-SSLHonorCipherOrder     on 
-SSLCompression          off 
-SSLSessionTickets       off 
- 
-# OCSP Stapling, only in httpd 2.3.3 and later 
-SSLUseStapling          on 
-SSLStaplingResponderTimeout 5 
-SSLStaplingReturnResponderErrors off 
-SSLStaplingCache        shmcb:/var/run/ocsp(128000) 
 </code> </code>
  
 Activez le fichier de configuration : Activez le fichier de configuration :
 <code bash>sudo a2ensite searx.nomdedomaine.fr.conf</code> <code bash>sudo a2ensite searx.nomdedomaine.fr.conf</code>
 +
 +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 :
 +<code bash>sudo /usr/local/searxng/searxng-src/utils/searxng.sh instance update</code>
 +
 +
 +
 +
  
  
  • serveur_hebergement/installer_une_instance_searx.1664732809.txt.gz
  • Dernière modification : 2023/08/08 14:01
  • (modification externe)