Локальная установка SearXNG

Развертывание и настройка SearXNG

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

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

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

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

  • Относительно высокая конфиденциальность

  • Высокая степень кастомизации

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

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

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

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

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

2. Поиск и загрузка образа SearXNG

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

Загрузите образ:

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

После успешной загрузки перейдите на вкладку Images:

Выберите загруженный образ и нажмите "Run":

Откройте настройки для конфигурации:

В качестве примера используем порт 8085:

После успешного запуска нажмите на ссылку для открытия интерфейса SearXNG:

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

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

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

Поэтому Cherry Studio теперь поддерживает HTTP Basic Authentication (RFC7617). Если вы развертываете SearXNG в публичной сети, обязательно настройте HTTP Basic Auth через обратный прокси (например, 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:
# Удалите блок ниже, если используете локальный 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"
# Удалите блок выше, если используете локальный 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:
# Удалите блок ниже, если используете локальный Nginx
  caddy-data:
  caddy-config:
# Удалите блок выше, если используете локальный Nginx
  valkey-data2:

Запустите через docker compose up -d. Логи можно посмотреть командой docker compose logs -f searxng.

Настройка Nginx обратного прокси и HTTP Basic Auth

При использовании панелей управления (например, Baota или 1Panel) обратитесь к их документации по добавлению сайта и настройке 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 / {
        # Добавьте эти две строки
        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 (или перечитайте конфиги).

Откройте страницу — должна появиться запрос на аутентификацию. Введите указанные учетные данные для проверки.

Настройка в Cherry Studio

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

В разделе настроек веб-поиска выберите Searxng:

При вводе локального адреса может появиться ошибка проверки — это нормально:

Стандартная конфигурация не поддерживает формат JSON, поэтому данные не могут быть получены. Требуется изменить конфиг.

В Docker перейдите на вкладку Files и найдите папку с тегами:

Прокрутите вниз до другой папки с тегами:

Найдите файл конфигурации settings.yml:

Откройте редактор:

На строке 78 виден только один тип данных html:

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

Повторно проверьте в Cherry Studio — проверка пройдена:

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

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

Добавьте HTTP Basic Auth в клиенте, введя ранее установленные учетные данные:

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

Дополнительные настройки

Теперь SearXNG может выполнять веб-поиск. Для кастомизации поисковых систем потребуется ручная настройка:

Эти настройки не влияют на интеграцию с крупными языковыми моделями:

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

Пример языкового конфига:

Для редактирования больших блоков скопируйте содержимое в локальный редактор, а затем вставьте обратно.

Распространенные причины сбоя проверки

Не добавлен формат JSON

Добавьте json в настройках:

Неправильная настройка поисковой системы

Cherry Studio по умолчанию использует движки, поддерживающие web и general. Google недоступен в некоторых регионах. Чтобы принудительно использовать Baidu, добавьте конфиг:

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

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

Ограничитель в SearXNG блокирует API. Установите limiter в false:

最后更新于

这有帮助吗?