From 21674f6eafc700b89f2a49eddc6b39401d21d407 Mon Sep 17 00:00:00 2001 From: Folzo Date: Mon, 13 Apr 2026 19:59:01 +0200 Subject: [PATCH] feat: Add SearXNG for improved web search - Add SearXNG service to docker-compose.yml (port 11112) - Add SEARXNG_SECRET_KEY to .env.example - Add searxng-data/settings.yml with FR engines (google, bing, ddg, qwant) - Add docs/SEARXNG-INTEGRATION.md with OpenWebUI tool setup --- .env.example | 8 +++- docker-compose.yml | 18 ++++++++ docs/SEARXNG-INTEGRATION.md | 84 +++++++++++++++++++++++++++++++++++++ searxng-data/settings.yml | 60 ++++++++++++++++++++++++++ 4 files changed, 169 insertions(+), 1 deletion(-) create mode 100644 docs/SEARXNG-INTEGRATION.md create mode 100644 searxng-data/settings.yml diff --git a/.env.example b/.env.example index 816aa1e..69c5f44 100644 --- a/.env.example +++ b/.env.example @@ -45,7 +45,13 @@ N8N_USER=master N8N_PASSWORD=changez_moi_mot_de_passe_securise # ═══════════════════════════════════════════════════════════ -# 5. CONFIGURATION OPTIONNELLE +# 5. SEARXNG (Meta-search Engine) +# ═══════════════════════════════════════════════════════════ +# Clé secrète pour SearXNG (générer une chaîne aléatoire) +SEARXNG_SECRET_KEY=changez_moi_par_une_cle_longue_et_aleatoire + +# ═══════════════════════════════════════════════════════════ +# 6. CONFIGURATION OPTIONNELLE # ═══════════════════════════════════════════════════════════ # Fuseau horaire (déjà configuré dans docker-compose.yml) # TZ=Europe/Paris diff --git a/docker-compose.yml b/docker-compose.yml index f842e74..7c6bdfb 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,6 +5,24 @@ services: + # ───────────────────────────────────────────────────────── + # 0. SEARXNG - Meta-search Engine (Web Search) + # → http://192.168.1.27:11112 + # ───────────────────────────────────────────────────────── + searxng: + image: searxng/searxng:latest + container_name: effi-searxng + restart: unless-stopped + ports: + - "11112:8080" + volumes: + - ./searxng-data:/etc/searxng:rw + environment: + - SEARXNG_BASE_URL=http://192.168.1.27:11112/ + - SEARXNG_SECRET=${SEARXNG_SECRET_KEY} + networks: + - effi-net + # ───────────────────────────────────────────────────────── # 1. OPEN WEBUI - Interface Chat Effi # → http://192.168.1.27:3000 diff --git a/docs/SEARXNG-INTEGRATION.md b/docs/SEARXNG-INTEGRATION.md new file mode 100644 index 0000000..47db1f8 --- /dev/null +++ b/docs/SEARXNG-INTEGRATION.md @@ -0,0 +1,84 @@ +# SEARXNG - Integration OpenWebUI + +## Configuration + +SearXNG est maintenant intégré dans `docker-compose.yml` de Effi : +- **Port** : 11112 +- **URL** : http://192.168.1.27:11112 + +## Tool web_search pour OpenWebUI + +Dans **Admin Panel → Tools**, modifier ou créer le tool `web_search` : + +```python +import requests + +def web_search(query): + """Recherche web via SearXNG auto-hébergé""" + searxng_url = "http://192.168.1.27:11112" + + try: + response = requests.get( + f"{searxng_url}/search", + params={ + "q": query, + "format": "json", + "engines": "google,bing,duckduckgo,qwant", + "language": "fr" + }, + timeout=15 + ) + + if response.status_code == 200: + results = response.json() + formatted = [] + + for r in results.get("results", [])[:10]: + title = r.get("title", "Sans titre") + url = r.get("url", "") + snippet = r.get("content", "")[:200] + formatted.append(f"**{title}**\n{snippet}\n🔗 {url}") + + if formatted: + return "## Résultats\n\n" + "\n\n".join(formatted) + + return "Aucun résultat." + + return f"Erreur {response.status_code}" + + except Exception as e: + return f"Erreur: {str(e)}" +``` + +## Déploiement sur effi-server + +```bash +# Copier le dossier Effi sur effi-server +scp -r /home/folzo/Documents/OpenCode/Projets/Effi user@192.168.1.27:~/effi + +# Sur effi-server +cd ~/effi +cp .env.example .env +# Éditer .env et ajouter SEARXNG_SECRET_KEY + +# Lancer +docker compose up -d + +# Tester +curl http://localhost:11112/search?q=test\&format=json +``` + +## URLs + +| Service | URL | +|---------|-----| +| SearXNG | http://192.168.1.27:11112 | +| OpenWebUI | http://192.168.1.27:3000 | + +## Engines configurées + +- google (FR) +- bing (FR-FR) +- duckduckgo (FR-FR) +- qwant (FR) +- wikipedia (FR) \ No newline at end of file diff --git a/searxng-data/settings.yml b/searxng-data/settings.yml new file mode 100644 index 0000000..068057d --- /dev/null +++ b/searxng-data/settings.yml @@ -0,0 +1,60 @@ +# ═══════════════════════════════════════════════════════════ +# EFFI SEARXNG - Meta-search Engine Configuration +# Instance: effi-server (192.168.1.27) +# ═══════════════════════════════════════════════════════════ + +use_default_settings: true + +general: + instance_name: "Effi Search" + privacypolicy_url: false + donation_url: false + contact_url: false + enable_metrics: false + +search: + format: "json" + max_results: 15 + default_lang: "fr" + formats: + - html + - json + +engines: + - name: google + engine: google + language: fr + - name: bing + engine: bing + language: fr-FR + - name: duckduckgo + engine: duckduckgo + language: fr-FR + - name: qwant + engine: qwant + language: fr + - name: wikipedia + engine: wikipedia + language: fr + +server: + secret_key: "${SEARXNG_SECRET_KEY}" + bind_address: "0.0.0.0" + port: 8080 + limiter: false + public_instance: false + +ui: + default_theme: simple + static_use_hash: true + default_view: index + results_on_new_tab: false + +outgoing: + request_timeout: 10.0 + useragent_suffix: "" + pool_connections: 100 + pool_maxsize: 20 + +enable_obfuscation: false +enable_http2: true \ No newline at end of file