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
This commit is contained in:
+7
-1
@@ -45,7 +45,13 @@ N8N_USER=master
|
|||||||
N8N_PASSWORD=changez_moi_mot_de_passe_securise
|
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)
|
# Fuseau horaire (déjà configuré dans docker-compose.yml)
|
||||||
# TZ=Europe/Paris
|
# TZ=Europe/Paris
|
||||||
|
|||||||
@@ -5,6 +5,24 @@
|
|||||||
|
|
||||||
services:
|
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
|
# 1. OPEN WEBUI - Interface Chat Effi
|
||||||
# → http://192.168.1.27:3000
|
# → http://192.168.1.27:3000
|
||||||
|
|||||||
@@ -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)
|
||||||
@@ -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
|
||||||
Reference in New Issue
Block a user