11 KiB
Настройка 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: Подготовка файлов
- Убедитесь, что файл
searxng/settings.ymlсуществует и содержит правильную конфигурацию - Убедитесь, что файл
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
- Откройте Open WebUI в браузере
- Перейдите в Settings → Web Search
- Убедитесь, что:
- Движок: 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: Поиск в интерфейсе
- Откройте чат в Open WebUI
- Задайте вопрос с включенным поиском (например: "Какая погода в Уфе сегодня?")
- Должны появиться результаты поиска без ошибок
Логи и отладка
Просмотр логов 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
Важные замечания
-
Безопасность: Лимитер отключен только для внутренней сети Docker. Если выставляете SearXNG наружу, включите лимитер обратно.
-
Производительность: Ограничение памяти SearXNG до 512M предотвращает перегрузку системы.
-
Стабильность: Некоторые движки (Google, Bing) могут блокировать запросы с серверов. Это нормально - SearXNG использует другие доступные движки.
-
Обновления: При обновлении образа 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
Поддержка
При возникновении проблем:
- Запустите диагностику:
sudo ./scripts/diagnose_search.sh - Проверьте логи:
sudo docker logs open-webui --tail 100 - Выполните полное исправление:
sudo ./scripts/fix_search_complete.sh
Решение протестировано и работает стабильно.