[{"data":1,"prerenderedAt":210},["ShallowReactive",2],{"seo-verification":3,"blog-self-host-searxng-vps-ma-fr":6,"promo-bar-likely":209},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-self-host-searxng-vps-ma-fr",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":28,"featuredImage":30,"bgImage":31,"posterImage":32,"relatedSolution":33,"intro":36,"sections":37,"ctaTitle":138,"ctaBody":139,"ctaButton":140,"ctaUrl":141,"relatedPosts":142},198,"self-host-searxng-vps",{"fr":10,"en":12,"ar":13,"es":14},"searxng-on-a-vps-private-metasearch-for-devs-and-ai-agents","استضافة-searxng-على-vps-بحث-خاص-للمطورين-ووكلاء-الذكاء","autoalojar-searxng-en-un-vps","Héberger SearXNG sur un VPS : un métamoteur privé","Déployez SearXNG sur votre VPS : un métamoteur auto-hébergé qui interroge Google, Bing et 280 sources, sans traçage ni clé d'API.",10,2,false,"2026-07-31T00:00:00+00:00","2026-11-04T16:30:26+00:00",{"id":23,"name":24,"slug":25,"color":26,"icon":27},7,"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[29],{"id":23,"name":24,"slug":25,"color":26,"icon":27},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fself-host-searxng-vps-poster.svg",{"categorySlug":34,"appSlug":35},"developpement","searxng","Chaque recherche envoyée à Google laisse une trace. Chaque appel à une API de recherche commerciale alourdit la facture. SearXNG règle les deux d'un coup : un métamoteur auto-hébergé qui interroge plus de 280 moteurs en amont et vous rend des résultats fusionnés — sur votre VPS, sous votre contrôle, sans coût à la requête.",[38,42,51,54,82,85,88,91,128,132,135],{"type":39,"title":40,"body":41},"h2","Le problème : les API de recherche commerciales ne sont pas la réponse","Vous construisez un agent IA qui doit chercher sur le web ? Vos options se résument à ceci : payer Google 5 $ par millier de requêtes, buter sur les limites de débit de l'API de Bing, ou passer par l'API non officielle de DuckDuckGo, qui casse sans préavis. Aucune ne vous laisse le contrôle, et toutes envoient vos requêtes — et celles de vos utilisateurs — vers des serveurs tiers.\n\nPour les équipes de développement au Maroc et dans la région MENA s'ajoute une friction : blocages régionaux, filtrage, et des résultats issus d'un moteur centré sur les États-Unis, souvent hors sujet pour une recherche locale. Un métamoteur auto-hébergé contourne tout cela.",{"type":43,"title":44,"items":45},"ul","Ce que SearXNG apporte dès l'installation",[46,47,48,49,50],"**Plus de 280 moteurs en amont** — Google, Bing, DuckDuckGo, Brave, Wikipedia, Reddit, GitHub, arXiv, YouTube, Twitter\u002FX et des centaines d'autres, interrogés simultanément.","**Aucun traçage** — ni cookies, ni profilage, ni historique conservé. La confidentialité tient à l'architecture : c'est le moteur qui interroge les services en amont, pas vous.","**Une API JSON** — ajoutez `?format=json` à une requête et récupérez des résultats exploitables par une machine. Prise en charge nativement par Open WebUI, n8n, Flowise, LangChain et CrewAI.","**Un cache Redis** — le cache de résultats partagé allège la charge en amont, et la limitation de débit prévient les abus sur les instances publiques.","**Licence AGPL-3.0** — plus de 33 000 étoiles sur GitHub, publications en continu, image Docker mise à jour chaque semaine.",{"type":39,"title":52,"body":53},"Architecture : deux conteneurs, moins de 512 Mo de RAM","SearXNG tourne en deux conteneurs Docker : le moteur Python lui-même (moins de 256 Mo de RAM) et une instance Redis (environ 30 Mo) pour le cache et la limitation de débit. Pas de base de données, pas d'état persistant au-delà du cache Redis. Avec 1 Go de RAM, SearXNG laisse largement la place à Nginx et au système ; un VPS de 2 Go est confortable pour une équipe à plusieurs utilisateurs simultanés ou un trafic d'agents IA soutenu.",{"type":55,"title":56,"steps":57},"steps","Héberger SearXNG sur un VPS, pas à pas",[58,61,64,67,70,73,76,79],{"title":59,"body":60},"Commandez un VPS","Choisissez un VPS Cloud ServOrbit doté d'au moins 1 Go de RAM (Ubuntu 22.04). Le provisionnement installe Docker et Docker Compose automatiquement.",{"title":62,"body":63},"Créez le fichier docker-compose.yml","Créez un répertoire `\u002Fopt\u002Fsearxng` et placez-y ce fichier `docker-compose.yml` :\n\n```yaml\nservices:\n  redis:\n    image: redis:7-alpine\n    restart: unless-stopped\n    command: redis-server --save \"\" --appendonly no\n    volumes:\n      - redis-data:\u002Fdata\n  searxng:\n    image: searxng\u002Fsearxng:latest\n    restart: unless-stopped\n    ports:\n      - \"127.0.0.1:8080:8080\"\n    volumes:\n      - .\u002Fsettings:\u002Fetc\u002Fsearxng:rw\n    environment:\n      - SEARXNG_BASE_URL=https:\u002F\u002Fsearch.votre-domaine.com\u002F\n      - SEARXNG_SECRET_KEY=CHANGER_CE_SECRET_32_CARACTERES_MIN\n    depends_on:\n      - redis\n    cap_drop:\n      - ALL\n    cap_add:\n      - CHOWN\n      - SETGID\n      - SETUID\n      - DAC_OVERRIDE\nvolumes:\n  redis-data:\n```\n\nGénérez une clé secrète solide avec `openssl rand -hex 32` et replacez `CHANGER_CE_SECRET_32_CARACTERES_MIN`.",{"title":65,"body":66},"Configurez settings.yml","Créez le dossier `.\u002Fsettings` et copiez le fichier de configuration par défaut :\n\n```bash\nmkdir -p \u002Fopt\u002Fsearxng\u002Fsettings\ndocker run --rm searxng\u002Fsearxng:latest cat \u002Fetc\u002Fsearxng\u002Fsettings.yml \\\n  > \u002Fopt\u002Fsearxng\u002Fsettings\u002Fsettings.yml\n```\n\nOuvrez `settings.yml` et ajustez les clés essentielles :\n\n```yaml\ngeneral:\n  instance_name: \"Mon SearXNG\"\n  debug: false\n\nsearch:\n  safe_search: 0\n  autocomplete: \"\"\n  formats:\n    - html\n    - json\n\nserver:\n  limiter: true\n  image_proxy: false\n  http_protocol_version: \"1.1\"\n\nredis:\n  url: redis:\u002F\u002Fredis:6379\u002F0\n```\n\nLe bloc `redis:` pointe vers le conteneur Redis par son nom de service.",{"title":68,"body":69},"Configurez Nginx comme reverse proxy avec TLS","Installez Nginx et Certbot, puis créez `\u002Fetc\u002Fnginx\u002Fsites-available\u002Fsearxng` :\n\n```nginx\nserver {\n    listen 80;\n    server_name search.votre-domaine.com;\n    return 301 https:\u002F\u002F$host$request_uri;\n}\nserver {\n    listen 443 ssl;\n    server_name search.votre-domaine.com;\n    ssl_certificate     \u002Fetc\u002Fletsencrypt\u002Flive\u002Fsearch.votre-domaine.com\u002Ffullchain.pem;\n    ssl_certificate_key \u002Fetc\u002Fletsencrypt\u002Flive\u002Fsearch.votre-domaine.com\u002Fprivkey.pem;\n    ssl_protocols       TLSv1.2 TLSv1.3;\n    location \u002F {\n        proxy_pass         http:\u002F\u002F127.0.0.1:8080;\n        proxy_set_header   Host $host;\n        proxy_set_header   X-Real-IP $remote_addr;\n        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header   X-Forwarded-Proto $scheme;\n    }\n}\n```\n\nActivez le site, obtenez le certificat puis démarrez : `certbot --nginx -d search.votre-domaine.com && ln -s \u002Fetc\u002Fnginx\u002Fsites-available\u002Fsearxng \u002Fetc\u002Fnginx\u002Fsites-enabled\u002F && nginx -t && systemctl reload nginx`.",{"title":71,"body":72},"Démarrez les conteneurs","Depuis `\u002Fopt\u002Fsearxng`, lancez `docker compose up -d`. Vérifiez que les deux conteneurs sont bien `Up` avec `docker compose ps`. Les logs du moteur sont accessibles par `docker compose logs -f searxng`.",{"title":74,"body":75},"Activez l'API JSON et testez","L'API JSON est déjà activée si vous avez ajouté `json` à la liste `formats` dans `settings.yml`. Testez depuis le VPS :\n\n```bash\ncurl -s 'https:\u002F\u002Fsearch.votre-domaine.com\u002Fsearch?q=SearXNG+self+hosted&format=json' \\\n  | jq '.results[0] | {title, url, content}'\n```\n\nVous devez obtenir un objet JSON avec `title`, `url` et `content`. Si l'API renvoie une erreur 403, vérifiez que `formats` contient bien `json` et redémarrez le conteneur.",{"title":77,"body":78},"Activez le limiteur de débit anti-bots","Le limiteur intégré (basé sur Redis) bloque les clients qui envoient trop de requêtes. Il est activé via `limiter: true` dans `settings.yml`. Pour renforcer la protection côté Nginx, ajoutez dans le bloc `server` :\n\n```nginx\nlimit_req_zone $binary_remote_addr zone=searxng:10m rate=10r\u002Fm;\n# dans le location \u002F :\nlimit_req zone=searxng burst=5 nodelay;\n```\n\nCela limite chaque IP à 10 requêtes par minute, avec une tolérance de 5 en rafale.",{"title":80,"body":81},"Branchez Open WebUI ou n8n","Dans **Open WebUI** : Réglages → Recherche web → Fournisseur : SearXNG → URL : `https:\u002F\u002Fsearch.votre-domaine.com`. Dans **n8n** : nœud HTTP Request → GET sur `https:\u002F\u002Fsearch.votre-domaine.com\u002Fsearch?format=json`, en passant votre requête dans le paramètre `q`. Vos agents IA disposent désormais d'une recherche web privée, à jour et sans filtrage.",{"type":39,"title":83,"body":84},"Configuration avancée de SearXNG","Au-delà des réglages de base, `settings.yml` expose des options qui transforment SearXNG en un outil sur mesure pour votre usage.\n\n**Activer ou désactiver des moteurs** : sous la clé `engines:`, chaque moteur dispose d'un champ `disabled: true` pour le désactiver. Désactivez les moteurs lents ou géo-bloqués pour accélérer les réponses. Par exemple, pour ne garder que Google, Bing, Brave et Wikipedia pour les recherches générales :\n\n```yaml\nengines:\n  - name: google\n    disabled: false\n  - name: bing\n    disabled: false\n  - name: brave\n    disabled: false\n  - name: duckduckgo\n    disabled: true\n```\n\n**Format de réponse JSON pour agents IA** : les résultats JSON contiennent `results[].title`, `results[].url`, `results[].content` (extrait), `results[].engine` et `results[].score`. Passez `&categories=general,news` pour filtrer par catégorie, ou `&language=fr` pour cibler la langue.\n\n**SafeSearch** : la clé `safe_search` accepte `0` (désactivé), `1` (modéré) ou `2` (strict). Pour les agents IA qui indexent du contenu professionnel, `0` donne les résultats les plus larges.\n\n**Langues et régions** : ajoutez `&language=ar-MA` à vos requêtes pour obtenir des résultats en arabe marocain, ou `&language=fr-FR` pour le français. La liste complète des codes langue est disponible dans le code source de SearXNG sur GitHub (fichier `searx\u002Flanguages.py`).",{"type":39,"title":86,"body":87},"Utiliser SearXNG comme source de recherche pour agents IA","L'endpoint `\u002Fsearch?q=...&format=json` de SearXNG est le point d'entrée universel pour tous les frameworks d'agents IA. Voici comment l'intégrer dans les trois environnements les plus courants.\n\n**n8n** : créez un nœud *HTTP Request* en méthode GET, URL `https:\u002F\u002Fsearch.votre-domaine.com\u002Fsearch`, avec les paramètres `q` (expression de la requête), `format` = `json` et optionnellement `categories` = `general`. Le nœud suivant peut être un *Code* qui extrait `$json.results.slice(0,5).map(r => r.url + ' — ' + r.content)` pour alimenter votre LLM.\n\n**LangChain (Python)** : la communauté LangChain inclut un outil `SearxSearchWrapper` depuis la version 0.1 :\n\n```python\nfrom langchain_community.utilities import SearxSearchWrapper\n\nsearch = SearxSearchWrapper(\n    searx_host=\"https:\u002F\u002Fsearch.votre-domaine.com\",\n    k=5\n)\nresults = search.results(\"actualité IA open source\", num_results=5)\n```\n\n**Open WebUI** : une fois l'URL configurée dans les réglages, chaque conversation peut activer la recherche web via l'icône dédiée. Open WebUI interroge SearXNG, injecte les extraits dans le contexte du modèle et cite automatiquement les sources. Aucune clé d'API n'est nécessaire.\n\n**Format brut via curl** : pour les scripts shell ou les agents minimalistes :\n\n```bash\ncurl -s \"https:\u002F\u002Fsearch.votre-domaine.com\u002Fsearch?q=searxng+api+json&format=json\" \\\n  | jq '[.results[:3] | .[] | {title, url, content}]'\n```\n\nLe résultat est un tableau JSON directement injectables dans un prompt.",{"type":39,"title":89,"body":90},"Sécuriser et optimiser son instance","Une instance SearXNG ouverte sur Internet attire rapidement les crawlers et les scrapers. Voici les quatre leviers à activer.\n\n**Rate-limit Redis** : avec `limiter: true` dans `settings.yml`, Redis compte les requêtes par IP sur une fenêtre glissante. Le seuil par défaut est conservateur ; vous pouvez l'ajuster dans `searxng\u002Flimiter.toml` dans les versions récentes de l'image Docker.\n\n**Authentification HTTP Basic** : pour une instance réservée à votre équipe ou vos agents, ajoutez dans le bloc `location \u002F` de Nginx :\n\n```nginx\nauth_basic \"SearXNG privé\";\nauth_basic_user_file \u002Fetc\u002Fnginx\u002F.htpasswd;\n```\n\nGénérez le fichier avec `htpasswd -c \u002Fetc\u002Fnginx\u002F.htpasswd utilisateur`. Les agents IA passent les credentials dans l'URL : `https:\u002F\u002Fuser:pass@search.votre-domaine.com\u002Fsearch?...`.\n\n**Cache Redis et TTL** : Redis est configuré par défaut sans persistance (`--save \"\"`) pour éviter l'accumulation sur disque. Pour ajuster le TTL du cache SearXNG, modifiez la clé `cache:` dans `settings.yml` — par exemple `cache: {ttl: 86400}` pour garder les résultats 24 heures et réduire les appels aux moteurs en amont.\n\n**Rotation du User-Agent** : SearXNG fait pivoter automatiquement les User-Agents pour éviter les bannissements par les moteurs en amont. Si un moteur commence à renvoyer des CAPTCHAs, désactivez-le temporairement avec `disabled: true` dans `settings.yml` puis réactivez-le après quelques heures.",{"type":92,"title":93,"headers":94,"rows":100},"comparison","SearXNG vs alternatives : quel moteur auto-hébergé choisir ?",[95,96,97,98,99],"Critère","SearXNG","Searx (original)","Whoogle","Brave Search API",[101,107,113,119,124],[102,103,104,105,106],"Sources agrégées","280+ moteurs","100+ moteurs","Google uniquement","Brave uniquement",[108,109,110,111,112],"API JSON native","Oui (`?format=json`)","Oui","Non","Oui (clé requise)",[114,115,116,117,118],"RAM minimale","~300 Mo (avec Redis)","~200 Mo","~128 Mo","Zéro (SaaS)",[120,121,122,121,123],"Maintenance active","Oui (2026)","Abandonnée (archivé)","Oui (SaaS)",[125,126,126,126,127],"Coût par requête","Zéro","3 $ \u002F 1 000 req.",{"type":129,"title":130,"body":131},"tip","Restreindre l'accès d'une instance publique","Si votre instance SearXNG est joignable publiquement, ajoutez une authentification HTTP Basic dans Nginx, ou posez `limiter: true` dans `settings.yml` (Redis est requis pour le limiteur). Pour un usage réservé aux agents IA, vous pouvez désactiver entièrement l'interface HTML et n'exposer que le point d'accès JSON : retirez `html` de `formats` et restreignez l'accès direct depuis un navigateur.",{"type":39,"title":133,"body":134},"Dépannage : 4 erreurs fréquentes","**1. `429 Too Many Requests` — bannissement par un moteur en amont** : Google ou Bing a détecté un volume anormal et a temporairement banni l'IP de votre VPS. Symptôme : SearXNG renvoie des résultats de tous les moteurs sauf un, ou la réponse JSON inclut `'is_onion': false` mais aucun résultat Google. Solution immédiate : désactivez le moteur concerné dans `settings.yml` (`disabled: true`) et attendez 2 à 6 heures. Long terme : activez plusieurs moteurs redondants pour qu'un bannissement ne vide pas les résultats.\n\n**2. `Error: Connection refused to Redis (127.0.0.1:6379)`** : le conteneur SearXNG tente de joindre Redis sur `127.0.0.1` au lieu du nom de service `redis`. Cause : la variable `SEARXNG_REDIS_URL` ou la clé `redis.url` dans `settings.yml` pointe vers `localhost` au lieu de `redis:\u002F\u002Fredis:6379\u002F0`. Correction : vérifiez `settings.yml` — la clé doit être `url: redis:\u002F\u002Fredis:6379\u002F0` (nom du service Docker Compose, pas `localhost`).\n\n**3. `403 Forbidden` sur `\u002Fsearch?format=json`** : l'API JSON est désactivée. Symptôme : l'interface HTML fonctionne mais les requêtes avec `&format=json` renvoient 403. Solution : ouvrez `settings.yml`, vérifiez que `formats:` contient bien `json`, sauvegardez, puis redémarrez le conteneur avec `docker compose restart searxng`.\n\n**4. Instance lente (> 5 s par requête)** : trop de moteurs activés simultanément ou moteurs géo-bloqués qui arrivent en timeout. Diagnostic : consultez les logs avec `docker compose logs searxng | grep 'timeout\\|error'`. Solution : réduisez le nombre de moteurs actifs aux 5-8 les plus pertinents pour votre usage, et augmentez le timeout global dans `settings.yml` (`request_timeout: 3.0` en secondes).",{"type":39,"title":136,"body":137},"SearXNG, colonne vertébrale de recherche de votre pile IA","SearXNG s'est imposé comme le moteur de recherche web des piles IA auto-hébergées. Open WebUI, n8n, Flowise, LangChain, CrewAI et la plupart des cadres d'orchestration de modèles disposent d'une intégration native. Le schéma est toujours le même : votre modèle estime qu'il lui faut une information à jour, appelle votre point d'accès SearXNG avec une requête, reçoit un tableau JSON de résultats — titres, URL, extraits — et s'en sert pour ancrer sa réponse.\n\nCela lève trois irritants d'un seul déploiement : plus de facturation à la requête, plus de fuite de données vers Google ou Bing, et plus de limite de débit atteinte à 2 h du matin pendant que votre agent enchaîne un lot de recherches.","La recherche privée, sur votre serveur","Déployez SearXNG sur un VPS ServOrbit et donnez à votre équipe et à vos agents IA un point de recherche privé — sans traçage, sans clé d'API, sans facturation à la requête.","Déployer SearXNG","\u002Fapplications\u002Fdeveloppement\u002Fsearxng",[143,165,186],{"id":144,"slug":145,"slugs":146,"title":150,"excerpt":151,"readTime":152,"views":144,"isPinned":19,"noindex":19,"publishedAt":153,"updatedAt":154,"category":155,"categories":160,"featuredImage":30,"bgImage":31,"posterImage":162,"relatedSolution":163},1,"heberger-open-webui",{"fr":145,"en":147,"ar":148,"es":149},"how-to-host-open-webui-on-a-vps","كيفية-استضافة-open-webui-على-خادم-vps","como-alojar-open-webui-en-un-vps","Comment héberger Open WebUI sur un VPS","Déployez Open WebUI sur votre propre VPS : gardez le contrôle de vos données, évitez les coûts des API cloud et accédez à vos LLMs depuis une interface web propre.",9,"2026-06-01T00:00:00+00:00","2026-11-09T20:55:18+00:00",{"id":144,"name":156,"slug":157,"color":158,"icon":159},"Intelligence Artificielle","intelligence-artificielle","bg-purple-500\u002F10 text-purple-400","ia",[161],{"id":144,"name":156,"slug":157,"color":158,"icon":159},"\u002Fblog\u002Fcovers\u002Fheberger-open-webui-poster.svg",{"categorySlug":159,"appSlug":164},"open-webui",{"id":166,"slug":167,"slugs":168,"title":172,"excerpt":173,"readTime":174,"views":175,"isPinned":19,"noindex":19,"publishedAt":176,"updatedAt":154,"category":177,"categories":181,"featuredImage":30,"bgImage":31,"posterImage":183,"relatedSolution":184},3,"installer-n8n-vps",{"fr":167,"en":169,"ar":170,"es":171},"install-n8n-on-vps-with-docker-complete-2026-guide","تثبيت-n8n-على-vps-مع-docker-دليل-شامل-2026","instalar-n8n-en-vps-con-docker","Installer n8n sur VPS avec Docker : guide complet 2026","Déployez n8n sur VPS avec Docker, reverse proxy et HTTPS. Crash V8, 502 nginx, migration npm vers Docker et sécurisation des exécutions persistées (advisory août 2026).",19,4,"2026-06-05T00:00:00+00:00",{"id":18,"name":178,"slug":179,"color":180,"icon":179},"Automatisation","automatisation","bg-brand-action\u002F10 text-brand-action",[182],{"id":18,"name":178,"slug":179,"color":180,"icon":179},"\u002Fblog\u002Fcovers\u002Finstaller-n8n-vps-poster.svg",{"categorySlug":179,"appSlug":185},"n8n",{"id":187,"slug":188,"slugs":189,"title":193,"excerpt":194,"readTime":195,"views":166,"isPinned":19,"noindex":19,"publishedAt":196,"updatedAt":197,"category":198,"categories":204,"featuredImage":30,"bgImage":31,"posterImage":206,"relatedSolution":207},67,"heberger-meilisearch-vps",{"fr":188,"en":190,"ar":191,"es":192},"hosting-meilisearch-on-a-vps","استضافة-meilisearch-على-خادم-vps","alojar-meilisearch-en-un-vps","Héberger Meilisearch sur un VPS","Hébergez Meilisearch sur votre VPS : moteur de recherche instantané, tolérant aux fautes et typo-tolérant. Guide Docker, master key et SSL.",5,"2026-04-14T00:00:00+00:00","2026-09-08T22:00:01+00:00",{"id":199,"name":200,"slug":201,"color":202,"icon":203},6,"Bases de données","bases-de-donnees","bg-teal-500\u002F10 text-teal-400","database",[205],{"id":199,"name":200,"slug":201,"color":202,"icon":203},"\u002Fblog\u002Fcovers\u002Fheberger-meilisearch-vps-poster.svg",{"categorySlug":201,"appSlug":208},"meilisearch",true,1794270797449]