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

11 KiB
Raw Permalink Blame History

Настройка 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)

# 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)

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: Запуск контейнеров

cd /home/its/iiEasyWeb
sudo docker compose up -d

Шаг 3: Проверка работы

# Проверка 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)

Проверяет все компоненты системы поиска:

sudo ./scripts/diagnose_search.sh

Исправление конфигурации SearXNG (scripts/fix_searxng_config.sh)

Исправляет конфигурацию SearXNG после перезапуска:

sudo ./scripts/fix_searxng_config.sh

Агрессивное исправление User-Agent (scripts/fix_user_agent_aggressive.sh)

Ищет и исправляет проблемную строку User-Agent во всех файлах:

sudo ./scripts/fix_user_agent_aggressive.sh

Полное исправление (scripts/fix_search_complete.sh)

Выполняет все исправления за один раз:

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 на хосте.

Улучшение покрытия поиска

Если нужно больше результатов, можно включить дополнительные движки:

# Включить 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

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

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

sudo docker logs searxng --tail 50

Просмотр логов Open WebUI

sudo docker logs open-webui --tail 50 | grep -i "searxng\|error\|user-agent"

Проверка сетевого подключения

# Из контейнера 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

Решение протестировано и работает стабильно.