SearXNG
Этот учебник создан сообществом и не поддерживается командой Open WebUI. Он служит только демонстрацией того, как настроить Open WebUI для ваших конкретных нужд. Хотите внести вклад? Ознакомьтесь с учебником по внесению вклада.
Данное руководство предоставляет инструкции по настройке возможностей веб-поиска в Open WebUI с использованием SearXNG в Docker.
SearXNG (Docker)
"SearXNG — это бесплатный метапоисковик в интернете, агрегирующий результаты из различных поисковых сервисов и баз данных. Пользователи не отслеживаются и не профилируются."
1. Конфигурация SearXNG
Чтобы оптимально настроить SearXNG для использования с Open WebUI, выполните следующие шаги:
Шаг 1: git clone
репозиторий SearXNG Docker и перейдите в папку:
- Создайте новую директорию
searxng-docker
Клонируйте репозиторий searxng-docker. Эта папка будет содержать ваши файлы конфигурации SearXNG. Обратитесь к документации SearXNG для инструкций по настройке.
git clone https://github.com/searxng/searxng-docker.git
Перейдите в репозиторий searxng-docker
:
cd searxng-docker
Шаг 2: Найдите и измените файл .env
:
- Уберите комментарий с
SEARXNG_HOSTNAME
в файле.env
и настройте его соответственно:
# По умолчанию слушается на https://localhost
# Чтобы изменить это:
# * уберите комментарий с SEARXNG_HOSTNAME и замените <host> на нужное имя хоста для SearXNG
# * уберите комментарий с LETSENCRYPT_EMAIL и замените <email> на вашу электронную почту (требуется для создания сертификата Lets Encrypt)
SEARXNG_HOSTNAME=localhost:8080/
# LETSENCRYPT_EMAIL=<email>
# Опционально:
# Если вы запускаете очень маленький или очень большой экземпляр, вы можете изменить количество процессов uwsgi и потоков на процесс
# Больше процессов (= workers) означает, что можно обрабатывать больше запросов одновременно, но это также увеличивает использование ресурсов
# SEARXNG_UWSGI_WORKERS=4
# SEARXNG_UWSGI_THREADS=4
Шаг 3: Измените файл docker-compose.yaml
- Уберите ограничение
localhost
, изменив файлdocker-compose.yaml
:
sed -i "s/127.0.0.1:8080/0.0.0.0:8080/"
Шаг 4: Предоставьте необходимые разрешения
- Разрешите контейнеру создавать новые файлы конфигурации, запустив следующую команду в корневом каталоге:
sudo chmod a+rwx searxng-docker/searxng
Шаг 5: Создайте файл limiter.toml
без ограничений
- Создайте файл конфигурации
searxng-docker/searxng/limiter.toml
без ограничений:
searxng-docker/searxng/limiter.toml
# Этот конфигурационный файл обновляет файл конфигурации по умолчанию
# Смотрите https://github.com/searxng/searxng/blob/master/searx/botdetection/limiter.toml
[botdetection.ip_limit]
# активировать метод link_token в методе ip_limit
link_token = false
[botdetection.ip_lists]
block_ip = []
pass_ip = []
Шаг 6: Удалите файл settings.yml
по умолчанию
- Удалите файл
searxng-docker/searxng/settings.yml
по умолчанию, если он существует, поскольку он будет заново создан при первом запуске SearXNG:
rm searxng-docker/searxng/settings.yml
Шаг 7: Создайте новый файл settings.yml
При первом запуске необходимо удалить cap_drop: - ALL
из файла docker-compose.yaml
, чтобы служба searxng
смогла успешно создать /etc/searxng/uwsgi.ini
. Это необходимо, поскольку директива cap_drop: - ALL
удаляет все полномочия, включая те, которые требуются для создания файла uwsgi.ini
. После первого запуска рекомендуется снова добавить cap_drop: - ALL
в файл docker-compose.yaml
для обеспечения безопасности.
- Запустите контейнер временно, чтобы сгенерировать новый файл settings.yml:
docker compose up -d ; sleep 10 ; docker compose down
Шаг 8: Добавьте форматы и обновите номер порта
- Добавьте форматы HTML и JSON в файл
searxng-docker/searxng/settings.yml
:
sed -i s/formats: \[\"html\"\/]/formats: [\"html\", \"json\"]/ searxng-docker/searxng/settings.yml
Сгенерируйте секретный ключ для вашего экземпляра SearXNG:
sed -i "s|ultrasecretkey|$(openssl rand -hex 32)|g" searxng-docker/searxng/settings.yml
Пользователи Windows могут использовать следующий скрипт PowerShell для генерации секретного ключа:
$randomBytes = New-Object byte[] 32
(New-Object Security.Cryptography.RNGCryptoServiceProvider).GetBytes($randomBytes)
$secretKey = -join ($randomBytes | ForEach-Object { "{0:x2}" -f $_ })
(Get-Content searxng-docker/searxng/settings.yml) -replace ultrasecretkey, $secretKey | Set-Content searxng-docker/searxng/settings.yml
Обновите номер порта в разделе server
, чтобы он соответствовал ранее установленному (в данном случае, 8080
):
sed -i s/port: 8080/port: 8080/ searxng-docker/searxng/settings.yml
Измените bind_address
по желанию:
sed -i s/bind_address: "0.0.0.0"/bind_address: "127.0.0.1"/ searxng-docker/searxng/settings.yml
Файлы конфигурации
searxng-docker/searxng/settings.yml (Извлечение)
Файл конфигурации settings.yml
по умолчанию содержит множество настроек движка. Ниже приведен фрагмент того, как может выглядеть файл settings.yml
по умолчанию:
searxng-docker/searxng/settings.yml
# см. https://docs.searxng.org/admin/settings/settings.html#settings-use-default-settings
use_default_settings: true
server:
# base_url определяется переменной среды SEARXNG_BASE_URL, см. .env и docker-compose.yml
secret_key: "ultrasecretkey" # измените это!
limiter: true # можно отключить для приватной инстанции
image_proxy: true
port: 8080
bind_address: "0.0.0.0"
ui:
static_use_hash: true
search:
safe_search: 0
autocomplete: ""
default_lang: ""
formats:
- html
- json # json обязательно
# удалите формат, чтобы запретить доступ, используйте нижний регистр.
# formats: [html, csv, json, rss]
redis:
# URL для подключения к базе данных Redis. Переопределяется ${SEARXNG_REDIS_URL}.
# https://docs.searxng.org/admin/settings/settings_redis.html#settings-redis
url: redis://redis:6379/0
Порт в файле settings.yml для SearXNG должен совпадать с номером порта в файле docker-compose.yml для SearXNG.
Шаг 9: Обновите файл uwsgi.ini
- Убедитесь, что файл
searxng-docker/searxng/uwsgi.ini
соответствует следующему:
searxng-docker/searxng/uwsgi.ini
[uwsgi]
# Кто будет запускать код
uid = searxng
gid = searxng
# Количество рабочих процессов (обычно количество CPU)
# значение по умолчанию: %k (= количество ядер CPU, см. Dockerfile)
workers = %k
# Количество потоков на один рабочий процесс
# значение по умолчанию: 4 (см. Dockerfile)
threads = 4
# Права, предоставленные на созданный сокет
chmod-socket = 666
# Плагин для использования и конфигурация интерпретатора
single-interpreter = true
master = true
plugin = python3
lazy-apps = true
enable-threads = 4
# Модуль для импорта
module = searx.webapp
# Виртуальное окружение и путь Python
pythonpath = /usr/local/searxng/
chdir = /usr/local/searxng/searx/
# автоматически устанавливать имя процесса на что-то значимое
auto-procname = true
# Отключить логирование запросов для конфиденциальности
disable-logging = true
log-5xx = true
# Установить максимальный размер запроса (исключая тело запроса)
buffer-size = 8192
# Нет постоянного подключения
# См. https://github.com/searx/searx-docker/issues/24
add-header = Connection: close
# uwsgi обслуживает статические файлы
static-map = /static=/usr/local/searxng/searx/static
# срок действия установлен на один день
static-expires = /* 86400
static-gzip-all = True
offload-threads = 4
2. Альтернативная установка
В качестве альтернативы, если вы не хотите изменять конфигурацию по умолчанию, вы можете просто создать пустую папку searxng-docker
и следовать остальным инструкциям по установке.
Установка через Docker Compose
Добавьте следующие переменные окружения в ваш файл docker-compose.yaml
д ля Open WebUI:
services:
open-webui:
environment:
ENABLE_RAG_WEB_SEARCH: True
RAG_WEB_SEARCH_ENGINE: "searxng"
RAG_WEB_SEARCH_RESULT_COUNT: 3
RAG_WEB_SEARCH_CONCURRENT_REQUESTS: 10
SEARXNG_QUERY_URL: "http://searxng:8080/search?q=<query>"
Создайте файл .env
для SearXNG:
# SearXNG
SEARXNG_HOSTNAME=localhost:8080/
Затем добавьте следующее в файл docker-compose.yaml
для SearXNG:
services:
searxng:
container_name: searxng
image: searxng/searxng:latest
ports:
- "8080:8080"
volumes:
- ./searxng:/etc/searxng:rw
env_file:
- .env
restart: unless-stopped
cap_drop:
- ALL
cap_add:
- CHOWN
- SETGID
- SETUID
- DAC_OVERRIDE
logging:
driver: "json-file"
options:
max-size: "1m"
max-file: "1"
Теперь ваш стек готов к запуску командой:
docker compose up -d
При первом запуске необходимо удалить cap_drop: - ALL
из фа йла docker-compose.yaml
для сервиса searxng
, чтобы успешно создать файл /etc/searxng/uwsgi.ini
. Это необходимо, так как директива cap_drop: - ALL
удаляет все возможности, включая те, которые требуются для создания файла uwsgi.ini
. После первого запуска рекомендуется вернуть cap_drop: - ALL
в файл docker-compose.yaml
по соображениям безопасности.
В качестве альтернативы, вы можете запустить SearXNG напрямую с помощью команды docker run
:
docker run --name searxng --env-file .env -v ./searxng:/etc/searxng:rw -p 8080:8080 --restart unless-stopped --cap-drop ALL --cap-add CHOWN --cap-add SETGID --cap-add SETUID --cap-add DAC_OVERRIDE --log-driver json-file --log-opt max-size=1m --log-opt max-file=1 searxng/searxng:latest
3. Подтверждение подключения
Подтвердите подключение к SearXNG из вашего контейнера Open WebUI с помощью интерфейса командной строки:
docker exec -it open-webui curl http://host.docker.internal:8080/search?q=this+is+a+test+query&format=json
4. Конфигурация графического интерфейса
- Перейдите в:
Admin Panel
->Settings
->Web Search
- Переключите
Enable Web Search
- Установите
Web Search Engine
в выпадающем меню наsearxng
- Установите
Searxng Query URL
на один из следующих примеров:
http://searxng:8080/search?q=<query>
(используя имя контейнера и открытый порт, подходит для сетапов на основе Docker)http://host.docker.internal:8080/search?q=<query>
(используя DNS-имяhost.docker.internal
и порт хоста, подходит для сетапов на основе Docker)http://<searxng.local>/search?q=<query>
(используя локальное доменное имя, подходит для локального сетевого доступа)https://<search.domain.com>/search?q=<query>
(используя собственное доменное имя для самостоятельно размещённого экземпляра SearXNG, подходит для публичного или приватного доступа)
Обратите внимание, часть /search?q=<query>
является обязательной.
- Настройте значения для
Search Result Count
иConcurrent Requests
в соответствии с вашими предпочтениями - Сохраните изменения
5. Использование веб-поиска в чате
Чтобы получить доступ к веб-поиску, нажмите на + рядом с полем ввода сообщения.
Здесь вы можете включить или выключить веб-поиск.
Следуя этим шагам, вы успешно настроите SearXNG с Open WebUI, что позволит вам выполнять веб-поиск, используя движок SearXNG.
Примечание
Вы должны явно включить или выключить эту функцию в чате.
Функция включается на сеанс, например, перезагрузка страницы или переход к другому чату отключит её.