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 [2024/01/20 18:17] – [Redis] fateserveur_hebergement:installer_une_instance_searx [2026/08/11 15:39] (Version actuelle) fate
Ligne 1: Ligne 1:
-====== Installer une instance Searxng ======+====== Searxng ======
  
 ===== Présentation de Searxng ===== ===== Présentation de Searxng =====
Ligne 7: Ligne 7:
 ===== Préparation ===== ===== Préparation =====
  
-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>+On va déployer Searxng via docker, donc il faut que docker-compose soit installé sur votre système
  
-Créez un utilisateur searxng :  +===== Installation de Searxng =====
-<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 ainsi que le sous répertoire pour le socket uWSGI +Créer un répertoire Searxng et dans ce répertoire, créez le fichier docker-compose.yml avec ce contenu 
-<code bash>sudo mkdir -/usr/local/searxng/run/</code>+<code bash> 
 +# Read the documentation before using the `docker-compose.yml` file: 
 +# https://docs.searxng.org/admin/installation-docker.html
  
-Modifiez le propriétaire du répertoire home : +name: searxng
-<code bash>sudo  chown -R "searxng:searxng" "/usr/local/searxng"</code>+
  
-===== Installation de Searxng =====+services: 
 +  core: 
 +    container_name: searxng-core 
 +    image: docker.io/searxng/searxng:${SEARXNG_VERSION:-latest} 
 +    restart: always 
 +    ports: 
 +      - ${SEARXNG_HOST:+${SEARXNG_HOST}:}${SEARXNG_PORT:-8080}:${SEARXNG_PORT:-8080} 
 +    env_file: ./.env 
 +    volumes: 
 +      - ./core-config/:/etc/searxng/:
 +      - ./core-data:/var/cache/searxng/
  
-Connectez-vous avec l'utilisateur searxng :  +  valkey: 
-<code bash>sudo  -u searxng -i</code>+    container_name: searxng-valkey 
 +    imagedocker.io/valkey/valkey:9-alpine 
 +    command: valkey-server --save 30 1 --loglevel warning 
 +    restart: always 
 +    volumes: 
 +      - ./valkey-data:/data/
  
-Récupérez les sources de Searxng +volumes
-<code bash>git clone "https://github.com/searxng/searxng" "/usr/local/searxng/searxng-src"</code>+  core-data: 
 +  valkey-data: 
 +</code>
  
-Créez l'environnement Python +Dans le même répertoire, créez le fichier .env avec le contenu suivant (vous pouvez modifier le port 8085) :  
-<code bash>python3 -m venv "/usr/local/searxng/searx-pyenv"</code>+<code bash> 
 +# Read the documentation before using the `docker-compose.yml` file: 
 +# https://docs.searxng.org/admin/installation-docker.html 
 +
 +# Additional ENVs: 
 +# https://docs.searxng.org/admin/settings/settings_general.html#settings-general 
 +# https://docs.searxng.org/admin/settings/settings_server.html#settings-server
  
-Activez-le à chaque connexion : +# Use a specific version tag. E.g. "latestor "2026.3.25-541c6c3cb"
-<code bash>echo "/usr/local/searxng/searx-pyenv/bin/activate>>  "/usr/local/searxng/.profile"</code>+SEARXNG_VERSION=latest
  
-Déconnectez-vous avec la commande <code bash>exit</code> +# Listen to a specific address. 
-Connectez-vous de nouveau avec l'utilisateur searxng : +SEARXNG_HOST=[127.0.0.1]
-<code bash>sudo -u searxng -i</code>+
  
-Mettre à jour les modules nécessaires :  +# Listen to a specific port. 
-<code bash> +SEARXNG_PORT=8085
-pip install -U pip +
-pip install -U setuptools +
-pip install -U wheel +
-pip install -U pyyaml+
 </code> </code>
  
-Lancez l'installation +Lancez la commande suivante pour démarrer le conteneur :  
-<code bash> +<code bash>sudo docker compose up -d</code>
-cd "/usr/local/searxng/searxng-src" +
-pip install -e . +
-</code>+
  
 ===== Configuration ===== ===== Configuration =====
  
-Dans un autre terminal, créez le fichier de configuration :+Ouvrez le fichier core-config/settings.yml et modifiez-le comme suit :
 <code bash> <code bash>
-sudo  mkdir -p "/etc/searxng+# Read the documentation before extending the defaults: 
-sudo  nano /etc/searxng/settings.yml +# https://docs.searxng.org/admin/settings/
-</code> +
- +
-Copiez-y les lignes suivantes (modifiez la clé secrète et l'adresse mail) : +
-<code> +
-# SearXNG settings+
  
 use_default_settings: true 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: server:
-  secret_key: "générez la clé secrète avec la commande : openssl rand -hex 16"+  secret_key: "dQmtqyS1rEuuFLQgW0xHgFSQ2CP5cZS" 
 +  image_proxy: true
   limiter: true   limiter: true
-  image_proxy: true +valkey
- +  url: valkey://valkey:6379/0 
-redis+</code>
-  url: unix:///usr/local/searxng-redis/run/redis.sock?db=+
- +
-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+
  
 +Si vous voulez rendre mon instance privée mais accessible depuis n'importe quelle IP, vous pouvez utilisez le système de jeton. Dans votre fichier settings.yml, ajoutez les lignes suivantes : 
 +<code bash>
 engines: engines:
-  - name: google +  - name: google cse 
-    enginegoogle +    tokens['MonMotDePasseSecret123!'] 
-    shortcutgo +  - namebing 
-    # see https://searxng.github.io/searxng/src/searx.engines.google.html#module-searx.engines.google +    tokens['MonMotDePasseSecret123!'
-    use_mobile_uitrue +  nameduckduckgo 
-    # additional_tests: +    tokens['MonMotDePasseSecret123!']
-    #   android: *test_android +
 </code> </code>
  
-Voici les principales options par défaut activées dans ce fichier configuration : +Pour pouvoir accéder à ces moteurs, vous devez coller votre token (ça peut être le même pour tous les moteurs) dans l'interface web de Searxng dans Préférences Général Jetons de moteur
-  * 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 =====+Créez le fichier core-config/limiter.toml et collez-y le contenu suivant :  
 +<code bash> 
 +[botdetection.ip_limit]
  
-Redis va stocker la base de donnée du plugin "limiter" servant à lutter contre les bots.+# To get unlimited access in a local network, by default link-local addresses 
 +# (networks) are not monitored by the ip_limit 
 +filter_link_local = false
  
-On va utiliser le script d'installation fourni par SearXNG pour l'installer et le configurer : +# activate link_token method in the ip_limit method 
-<code bash> +link_token = true
-sudo -s  +
-sudo /usr/local/searxng/searxng-src/utils/searxng.sh install redis+
 </code> </code>
  
-Choissisez les réponses par défaut à chaque question. +Redémarrez le conteneur 
-===== uWSGI ===== +
- +
-uWSGI va nous permettre de démarrer l'instance Searx. +
- +
-Créez le fichier de configuration pour uWSGI : +
-<code bash>sudo nano /etc/uwsgi/apps-available/searxng.ini</code> +
- +
-Collez-y les lignes suivantes :+
 <code bash> <code bash>
-# -*- mode: conf; coding: utf-8  -*- +sudo docker compose down 
-[uwsgi] +sudo docker compose up -d
- +
-# 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+
 </code> </code>
-  
-Activez le lancement au démarrage de Searx : 
-<code bash>sudo ln -s /etc/uwsgi/apps-available/searxng.ini /etc/uwsgi/apps-enabled/</code> 
- 
-Démarrez Searx : 
-<code bash>sudo service uwsgi start searxng</code> 
  
 ===== Configuration d'Apache ===== ===== Configuration d'Apache =====
Ligne 272: Ligne 123:
 <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 vôtre ainsi que l'emplacement des fichiers SSL) : +Copiez-y les lignes suivantes (remplacez le nom de domaine par le vôtre ainsi que l'emplacement des fichiers SSL et le numéro de port) : 
 <code apache> <code apache>
 <VirtualHost *:80> <VirtualHost *:80>
  
-        ServerName searx.nomdedomaine.fr+        ServerName searx.domaine.fr
  
-        Redirect / https://searx.nomdedomaine.fr/+        Redirect / https://searx.domaine.fr/
  
 </VirtualHost> </VirtualHost>
 +
  
 <VirtualHost *:443> <VirtualHost *:443>
-        ServerName searx.rasp.fr+ 
 +        ServerName searx.domaine.fr
  
         LogLevel warn         LogLevel warn
-        ErrorLog ${APACHE_LOG_DIR}/searxng.error.log+        ErrorLog ${APACHE_LOG_DIR}/searx.error.log
  
  
Ligne 293: Ligne 146:
         ProxyRequests Off         ProxyRequests Off
         ProxyPreserveHost On         ProxyPreserveHost On
-        SSLCertificateFile /etc/letsencrypt/live/nomdedomaine.fr/fullchain.pem +        SSLCertificateFile /etc/letsencrypt/live/domaine.fr/fullchain.pem 
-        SSLCertificateKeyFile /etc/letsencrypt/live/nomdedomaine.fr/privkey.pem+        SSLCertificateKeyFile /etc/letsencrypt/live/domaine.fr/privkey.pem
         AddDefaultCharset utf-8         AddDefaultCharset utf-8
         HostnameLookups off         HostnameLookups off
Ligne 300: Ligne 153:
         ProxyBadHeader Ignore         ProxyBadHeader Ignore
         KeepAlive off         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 *" + 
-         +        ProxyPass http://localhost:8085/ 
-        ProxyPreserveHost On +        <Location /
-        ProxyPass / unix:/usr/local/searxng/run/socket|uwsgi://uwsgi-uds-searxng/+                ProxyPassReverse http://localhost:8085
 +                Require all granted 
 +        </Location>
  
         # see limiter.py         # see limiter.py
-        RequestHeader set X-Real-IP %{REMOTE_ADDR}s +        #RequestHeader set X-Real-IP %{REMOTE_ADDR}s 
-        RequestHeader append X-Forwarded-For %{REMOTE_ADDR}s +        #RequestHeader append X-Forwarded-For %{REMOTE_ADDR}s 
 + 
 +        # intermediate configuration 
 +        SSLProtocol             -all +TLSv1.2 +TLSv1.3 
 +        SSLOpenSSLConfCmd       Curves X25519:prime256v1:secp384r1 
 +        SSLCipherSuite          ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305 
 +        SSLHonorCipherOrder     off 
 +        SSLSessionTickets       off
  
 +        # enable HTTP/2, if available
 +        Protocols h2 http/1.1
 +
 +        # HTTP Strict Transport Security (mod_headers is required) (63072000 seconds)
 +        Header always set Strict-Transport-Security "max-age=63072000"
 +
 +        <IfModule mod_headers.c>
 +                Header set X-Content-Type-Options "nosniff"
 +                Header set X-XSS-Protection "1; mode=block"
 +                Header unset X-Powered-By
 +                Header set Referrer-Policy: strict-origin-when-cross-origin
 +                Header set Permissions-Policy "accelerometer=(),battery=(),fullscreen=(self),geolocation=(),camera=(),ambient-light-sensor=(self),autoplay=(self)"
 +                Header set Content-Security-Policy "frame-ancestors 'self' *.domaine.fr; 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>
  
 </VirtualHost> </VirtualHost>
 +
  
 </code> </code>
Ligne 318: Ligne 195:
  
 Votre instance SearXNG est maintenant accessible à l'adresse searx.nomdedomaine.fr. 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.1705774623.txt.gz
  • Dernière modification : 2024/01/20 18:17
  • de fate