Files
iiEsaywebUI/SEARXNG_SETUP.md
2026-02-19 18:12:09 +00:00

307 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Настройка SearXNG для Open WebUI - Рабочее решение
## Обзор
Данное решение обеспечивает работу веб-поиска через SearXNG в Open WebUI. Решены проблемы с JSON форматом, лимитером и багом User-Agent в Open WebUI v0.8.3.
## Архитектура
```
Open WebUI → SearXNG → Поисковые движки (Google, DuckDuckGo, Brave и др.)
```
## Компоненты решения
### 1. Конфигурация SearXNG (`searxng/settings.yml`)
```yaml
# SearXNG Settings для работы с Open WebUI
# Этот файл включает поддержку JSON формата для API запросов
use_default_settings: true
server:
secret_key: "CHANGE_ME_SECRET_KEY"
bind_address: "0.0.0.0"
port: 8080
limiter: false # КРИТИЧНО: отключен для работы внутри Docker сети
method: "GET"
search:
safe_search: 0
autocomplete: "google"
formats:
- html
- json # КРИТИЧНО: JSON формат обязателен для Open WebUI
general:
instance_name: "SearXNG"
debug: false
```
**Ключевые моменты:**
- `limiter: false` - отключает защиту от ботов (необходимо для запросов из Open WebUI)
- `formats: [html, json]` - включает JSON формат для API запросов
- Файл монтируется через bind mount, поэтому настройки сохраняются после перезапуска
### 2. Конфигурация Docker Compose (`docker-compose.yml`)
```yaml
services:
searxng:
image: ghcr.io/searxng/searxng:latest
container_name: searxng
restart: always
volumes:
- ./searxng:/etc/searxng:rw # Bind mount для сохранения настроек
- searxng_cache:/var/cache/searxng
networks:
- iieasy-ai
environment:
- SEARXNG_BASE_URL=http://searxng:8080/
deploy:
resources:
limits:
memory: 512M
open-webui:
image: ghcr.io/open-webui/open-webui:v0.8.3
container_name: open-webui
restart: unless-stopped
volumes:
- openwebui_data:/app/backend/data
- ./scripts/fix_user_agent.sh:/fix_user_agent.sh:ro # Патч для User-Agent
entrypoint: ["/bin/sh", "-c", "sh /fix_user_agent.sh && exec /bin/bash /app/start.sh"]
networks:
- iieasy-ai
depends_on:
searxng:
condition: service_started
environment:
# SearXNG веб-поиск
- RAG_WEB_SEARCH_ENGINE=searxng
- SEARXNG_QUERY_URL=http://searxng:8080/search?q=<query>&format=json
- ENABLE_WEB_SEARCH=true
- WEB_SEARCH_RESULT_COUNT=5
- WEB_SEARCH_TRUST_ENV=true
- WEB_SEARCH_CONCURRENT_REQUESTS=1
- USER_AGENT=Open-WebUI-RAG-Bot
```
**Ключевые моменты:**
- `SEARXNG_QUERY_URL` содержит явное указание `format=json`
- Патч User-Agent применяется автоматически через entrypoint
- Контейнеры находятся в одной сети `iieasy-ai`
### 3. Патч User-Agent (`scripts/fix_user_agent.sh`)
Патч исправляет баг в Open WebUI v0.8.3, где User-Agent начинается с пробела, что вызывает ошибку "Invalid leading whitespace".
**Что делает патч:**
- Ищет все варианты проблемной строки `' (https://github.com/open-webui/open-webui) RAG Bot'`
- Заменяет на `'Open-WebUI-RAG-Bot'`
- Исправляет варианты в файлах:
- `/app/backend/open_webui/routers/retrieval.py`
- `/app/backend/open_webui/utils/middleware.py`
- `/app/backend/open_webui/retrieval/loaders/external_web.py`
- И других файлах с проблемной строкой
- Очищает кеш Python (`.pyc` файлы)
## Установка и настройка
### Шаг 1: Подготовка файлов
1. Убедитесь, что файл `searxng/settings.yml` существует и содержит правильную конфигурацию
2. Убедитесь, что файл `scripts/fix_user_agent.sh` существует и исполняемый
### Шаг 2: Запуск контейнеров
```bash
cd /home/its/iiEasyWeb
sudo docker compose up -d
```
### Шаг 3: Проверка работы
```bash
# Проверка SearXNG
sudo docker ps | grep searxng
# Проверка JSON формата
sudo docker exec open-webui curl -s "http://searxng:8080/search?q=test&format=json" | head -c 200
# Проверка логов на ошибки
sudo docker logs open-webui --tail 50 | grep -i "error\|user-agent\|invalid"
```
### Шаг 4: Настройка в интерфейсе Open WebUI
1. Откройте Open WebUI в браузере
2. Перейдите в **Settings → Web Search**
3. Убедитесь, что:
- Движок: **SearXNG**
- URL: `http://searxng:8080/search?q=<query>&format=json`
- Переключатель "Web Search" **включен**
- "Одновременные запросы" установлено в **1** или больше (не 0)
## Скрипты для обслуживания
### Диагностика (`scripts/diagnose_search.sh`)
Проверяет все компоненты системы поиска:
```bash
sudo ./scripts/diagnose_search.sh
```
### Исправление конфигурации SearXNG (`scripts/fix_searxng_config.sh`)
Исправляет конфигурацию SearXNG после перезапуска:
```bash
sudo ./scripts/fix_searxng_config.sh
```
### Агрессивное исправление User-Agent (`scripts/fix_user_agent_aggressive.sh`)
Ищет и исправляет проблемную строку User-Agent во всех файлах:
```bash
sudo ./scripts/fix_user_agent_aggressive.sh
```
### Полное исправление (`scripts/fix_search_complete.sh`)
Выполняет все исправления за один раз:
```bash
sudo ./scripts/fix_search_complete.sh
```
## Решенные проблемы
### 1. Ошибка "403 Forbidden" при запросе JSON
**Причина:** SearXNG по умолчанию не разрешает JSON формат для безопасности.
**Решение:** Добавлено `formats: [html, json]` в секцию `search:` файла `settings.yml`.
### 2. Ошибка "Invalid leading whitespace" в User-Agent
**Причина:** Баг в Open WebUI v0.8.3 - User-Agent начинается с пробела.
**Решение:** Патч `fix_user_agent.sh` автоматически исправляет проблемную строку при старте контейнера.
### 3. Ошибка "X-Forwarded-For nor X-Real-IP header is set"
**Причина:** SearXNG блокирует запросы без реального IP (защита от ботов).
**Решение:** Отключен лимитер (`limiter: false`) в `settings.yml`, так как система работает внутри закрытой Docker сети.
### 4. Потеря настроек после перезапуска
**Причина:** Изменения внутри контейнера не сохраняются.
**Решение:** Использован bind mount `./searxng:/etc/searxng:rw` для сохранения `settings.yml` на хосте.
## Улучшение покрытия поиска
Если нужно больше результатов, можно включить дополнительные движки:
```bash
# Включить DuckDuckGo
sudo docker exec searxng sed -i '/- name: duckduckgo/,/disabled:/ s/disabled: true/disabled: false/' /etc/searxng/settings.yml
# Включить Brave
sudo docker exec searxng sed -i '/- name: brave$/,/disabled:/ s/disabled: true/disabled: false/' /etc/searxng/settings.yml
# Перезапустить
sudo docker restart searxng
```
## Проверка работоспособности
### Тест 1: Прямой запрос к SearXNG
```bash
sudo docker exec open-webui curl -s "http://searxng:8080/search?q=test&format=json" | grep -q "results" && echo "✓ JSON работает" || echo "✗ JSON не работает"
```
### Тест 2: Проверка патча User-Agent
```bash
sudo docker exec open-webui grep -r "github.com/open-webui.*RAG Bot" /app/backend 2>/dev/null | wc -l
# Должно вернуть 0
```
### Тест 3: Поиск в интерфейсе
1. Откройте чат в Open WebUI
2. Задайте вопрос с включенным поиском (например: "Какая погода в Уфе сегодня?")
3. Должны появиться результаты поиска без ошибок
## Логи и отладка
### Просмотр логов SearXNG
```bash
sudo docker logs searxng --tail 50
```
### Просмотр логов Open WebUI
```bash
sudo docker logs open-webui --tail 50 | grep -i "searxng\|error\|user-agent"
```
### Проверка сетевого подключения
```bash
# Из контейнера Open WebUI к SearXNG
sudo docker exec open-webui curl http://searxng:8080/status
```
## Важные замечания
1. **Безопасность:** Лимитер отключен только для внутренней сети Docker. Если выставляете SearXNG наружу, включите лимитер обратно.
2. **Производительность:** Ограничение памяти SearXNG до 512M предотвращает перегрузку системы.
3. **Стабильность:** Некоторые движки (Google, Bing) могут блокировать запросы с серверов. Это нормально - SearXNG использует другие доступные движки.
4. **Обновления:** При обновлении образа Open WebUI патч User-Agent будет применяться автоматически благодаря entrypoint в docker-compose.yml.
## Структура файлов
```
/home/its/iiEasyWeb/
├── docker-compose.yml # Конфигурация Docker Compose
├── searxng/
│ └── settings.yml # Конфигурация SearXNG (bind mount)
└── scripts/
├── fix_user_agent.sh # Основной патч User-Agent
├── fix_user_agent_aggressive.sh # Агрессивный патч
├── fix_user_agent_final.sh # Финальный патч
├── fix_searxng_config.sh # Исправление конфигурации SearXNG
├── diagnose_search.sh # Диагностика системы поиска
└── fix_search_complete.sh # Полное исправление
```
## Версия
- Open WebUI: v0.8.3
- SearXNG: latest (2026.2.16+8e824017d)
- Дата настройки: Февраль 2026
## Поддержка
При возникновении проблем:
1. Запустите диагностику: `sudo ./scripts/diagnose_search.sh`
2. Проверьте логи: `sudo docker logs open-webui --tail 100`
3. Выполните полное исправление: `sudo ./scripts/fix_search_complete.sh`
---
**Решение протестировано и работает стабильно.**