Локальное развертывание и настройка SearXNG

CherryStudio поддерживает веб-поиск через SearXNG. SearXNG — это проект с открытым исходным кодом, который можно развернуть локально или на сервере, поэтому его настройка немного отличается от других поставщиков, требующих API.

Ссылка на проект SearXNG:SearXNG

Преимущества SearXNG

  • Открытый и бесплатный, не требует API

  • Относительно высокая приватность

  • Высокая настраиваемость

Локальное развертывание

1. Прямое развертывание через Docker

Поскольку SearXNG не требует сложной настройки окружения, можно обойтись без docker compose, достаточно указать доступный порт для развертывания, поэтому самый быстрый способ — использовать Docker для прямого скачивания образа и развертывания.

1. Установка и настройка docker

После установки выберите путь для хранения образов:

2. Поиск и скачивание образа SearXNG

В строке поиска введите searxng :

Скачать образ:

3. Запуск образа

После успешного скачивания перейдите на images страницу:

Выберите скачанный образ и нажмите Запустить:

Откройте параметры для настройки:

В качестве примера 8085 порта:

После успешного запуска нажмите ссылку, чтобы открыть интерфейс SearXNG:

Появление этой страницы означает успешное развертывание:

Развертывание на сервере

Учитывая, что установка Docker в Windows может быть сложной, пользователи могут развернуть SearXNG на сервере и при желании поделиться им с другими. К сожалению, сам SearXNG в настоящее время не поддерживает аутентификацию, поэтому кто-то может технически обнаружить и злоупотребить вашим экземпляром.

По этой причине Cherry Studio теперь поддерживает настройку HTTP базовой аутентификации (RFC7617), если пользователь хочет выставить свой развернутый SearXNG в публичный Интернет, пожалуйста,обязательносконфигурируйте HTTP базовую аутентификацию через обратный прокси вроде Nginx. Ниже приведено краткое руководство, для которого потребуются базовые знания администрирования Linux.

Развертывание SearXNG

Аналогично, по-прежнему используем Docker. Предположим, вы уже следовалиофициальному руководствуи установили на сервере последнюю версию Docker CE, ниже приведена «одна команда» для чистой установки в Debian:

sudo apt update
sudo apt install git -y

# Скачивание официального репозитория
cd /opt
git clone https://github.com/searxng/searxng-docker.git
cd /opt/searxng-docker

# Если пропускная способность вашего сервера мала, можно установить в false
export IMAGE_PROXY=true

# Изменить файл конфигурации
cat <<EOF > /opt/searxng-docker/searxng/settings.yml
# see https://docs.searxng.org/admin/settings/settings.html#settings-use-default-settings
use_default_settings: true
server:
  # base_url is defined in the SEARXNG_BASE_URL environment variable, see .env and docker-compose.yml
  secret_key: $(openssl rand -hex 32)
  limiter: false  # can be disabled for a private instance
  image_proxy: $IMAGE_PROXY
ui:
  static_use_hash: true
redis:
  url: redis://redis:6379/0
search:
  formats:
    - html
    - json
EOF

Если нужно изменить локальный порт прослушивания или использовать существующий локальный nginx, можно отредактировать docker-compose.yaml файл, пример ниже:

version: "3.7"

services:
# Если не нужен Caddy и вы хотите использовать уже имеющийся локальный Nginx, удалите нижний блок. По умолчанию Caddy не требуется.
  caddy:
    container_name: caddy
    image: docker.io/library/caddy:2-alpine
    network_mode: host
    restart: unless-stopped
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy-data:/data:rw
      - caddy-config:/config:rw
    environment:
      - SEARXNG_HOSTNAME=${SEARXNG_HOSTNAME:-http://localhost}
      - SEARXNG_TLS=${LETSENCRYPT_EMAIL:-internal}
    cap_drop:
      - ALL
    cap_add:
      - NET_BIND_SERVICE
    logging:
      driver: "json-file"
      options:
        max-size: "1m"
        max-file: "1"
# Если не нужен Caddy и вы хотите использовать уже имеющийся локальный Nginx, удалите верхний блок. По умолчанию Caddy не требуется.
  redis:
    container_name: redis
    image: docker.io/valkey/valkey:8-alpine
    command: valkey-server --save 30 1 --loglevel warning
    restart: unless-stopped
    networks:
      - searxng
    volumes:
      - valkey-data2:/data
    cap_drop:
      - ALL
    cap_add:
      - SETGID
      - SETUID
      - DAC_OVERRIDE
    logging:
      driver: "json-file"
      options:
        max-size: "1m"
        max-file: "1"

  searxng:
    container_name: searxng
    image: docker.io/searxng/searxng:latest
    restart: unless-stopped
    networks:
      - searxng
    # По умолчанию пробрасывается на порт 8080 хоста. Если хотите слушать 8000, замените на "127.0.0.1:8000:8080"
    ports:
      - "127.0.0.1:8080:8080"
    volumes:
      - ./searxng:/etc/searxng:rw
    environment:
      - SEARXNG_BASE_URL=https://${SEARXNG_HOSTNAME:-localhost}/
      - UWSGI_WORKERS=${SEARXNG_UWSGI_WORKERS:-4}
      - UWSGI_THREADS=${SEARXNG_UWSGI_THREADS:-4}
    cap_drop:
      - ALL
    cap_add:
      - CHOWN
      - SETGID
      - SETUID
    logging:
      driver: "json-file"
      options:
        max-size: "1m"
        max-file: "1"

networks:
  searxng:

volumes:
# Если не нужен Caddy и вы хотите использовать уже имеющийся локальный Nginx, удалите нижний блок
  caddy-data:
  caddy-config:
# Если не нужен Caddy и вы хотите использовать уже имеющийся локальный Nginx, удалите верхний блок
  valkey-data2:

Выполните docker compose up -d для запуска. Выполните docker compose logs -f searxng чтобы просмотреть логи.

Настройка Nginx обратного прокси и HTTP базовой аутентификации

Если вы используете панель управления сервером, например Baota (宝塔) или 1Panel, обратитесь к их документации для добавления сайта и настройки nginx обратного прокси, затем найдите место для редактирования конфигурации nginx и внесите изменения по примеру ниже:

server
{
    listen 443 ssl;

    # Эта строка — ваше имя хоста
    server_name search.example.com;

    # index index.html;
    # root /data/www/default;

    # Если настроен SSL, должны быть эти две строки
    ssl_certificate    /path/to/your/cert/fullchain.pem;
    ssl_certificate_key    /path/to/your/cert/privkey.pem;

    # HSTS
    # add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";

    # По умолчанию при настройке обратного прокси через панель блок location выглядит так
    location / {
        # Нужно только добавить две строки в блок location, остальное оставить как есть.
        # В примере предполагается, что ваш конфигурационный файл хранится в /etc/nginx/conf.d/.
        # В случае Baota он, вероятно, хранится в /www или похожей папке — обратите внимание.
        auth_basic "Please enter your username and password";
        auth_basic_user_file /etc/nginx/conf.d/search.htpasswd;

        proxy_http_version 1.1;
        proxy_set_header Connection "";
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_protocol_addr;
        proxy_pass http://127.0.0.1:8000;
        client_max_body_size 0;
    }

    # access_log  ...;
    # error_log  ...;
}

Предположим, что файл конфигурации Nginx сохраняется в /etc/nginx/conf.d ниже, мы сохраним файл паролей в том же каталоге.

Выполните команду (замените example_nameиexample_password на имя пользователя и пароль, которые вы хотите установить):

echo "example_name:$(openssl passwd -5 'example_password')" > /etc/nginx/conf.d/search.htpasswd

Перезапустите Nginx (также можно перезагрузить конфигурацию).

Теперь можно открыть страницу в браузере — она должна запросить имя пользователя и пароль. Введите ранее заданные логин и пароль, чтобы проверить доступ к поисковой странице SearXNG и убедиться, что настройка правильная.

Настройки, связанные с Cherry Studio

После успешного локального или серверного развертывания SearXNG далее следует настроить CherryStudio.

Перейдите на страницу настроек веб-поиска и выберите Searxng:

Если при вводе локального адреса валидация не проходит, не волнуйтесь:

после прямого развертывания по умолчанию не настроен тип возврата json, поэтому данные не получаются — нужно изменить конфигурационный файл.

Вернитесь в Docker, откройте вкладку Files и найдите в образе папку с меткой:

Разверните её и прокрутите ниже, вы увидите другую папку с меткой:

Продолжайте раскрывать и найдите settings.yml файл конфигурации:

Нажмите, чтобы открыть редактор файлов:

Найдите строку 78 — там показан только тип html

Добавьте тип json, сохраните и перезапустите образ

Вернитесь в Cherry Studio и повторите валидацию — она должна пройти успешно:

В адрес можно указать локальный: http://localhost : порт или указать адрес для Docker:http://host.docker.internal : порт

Если вы следовали примеру для серверного развертывания и правильно настроили обратный прокси, а также включили возвращаемый тип json, при валидации адреса, учитывая что для обратного прокси настроена HTTP базовая аутентификация, должен вернуться код ошибки 401:

В клиенте настройте HTTP базовую аутентификацию, введите ранее заданные имя пользователя и пароль:

Проведите валидацию — она должна пройти успешно.

Другие настройки

Теперь SearXNG имеет базовую возможность поиска в интернете; если нужно настроить конкретные поисковые движки, делайте это самостоятельно в конфигурации

Стоит отметить, что эти предпочтения не влияют на конфигурацию при вызове больших моделей

Если нужно настроить поисковые движки, используемые большими моделями, задайте их в конфигурационном файле:

Справочник по конфигурации:

Если содержимое слишком длинное для удобного редактирования напрямую, скопируйте его в локальную IDE, внесите изменения и вставьте обратно в файл конфигурации.

Частые причины неудачной валидации

Формат ответа не содержит json

Добавьте в конфигурации формат возврата json:

Поисковый движок настроен неправильно

Cherry Studio по умолчанию выбирает движки, у которых categories включают web и general; по умолчанию это такие движки как google, доступ к которым в материковом Китае невозможен, что приводит к ошибкам. Добавление следующей конфигурации заставит searxng принудительно использовать движок baidu и решит проблему:

use_default_settings:
  engines:
    keep_only:
      - baidu
engines:
  - name: baidu
    engine: baidu 
    categories: 
      - web
      - general
    disabled: false

Слишком высокая частота запросов

Конфигурация limiter в searxng препятствует доступу к API — попробуйте установить её в false в настройках:

Последнее обновление

Это было полезно?