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

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

**Ссылка на проект SearXNG**：[SearXNG](https://github.com/searxng/searxng)

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

* Открытый исходный код и бесплатно, API не требуется
* Относительно высокая конфиденциальность
* Высокая степень настраиваемости

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

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

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

#### 1. Скачивание, установка и настройка [docker](https://www.docker.com/)

<figure><img src="/files/f83bfc9bfc16ea8c48054bf9967a6afd711f2115" alt=""><figcaption></figcaption></figure>

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

<figure><img src="/files/9e195edd81a463c70226f13657c4c7055e0a80c1" alt=""><figcaption></figcaption></figure>

#### 2. Найдите и загрузите образ SearXNG

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

<figure><img src="/files/7531400fee25ad699aef7cc4c0b9578c55daa711" alt=""><figcaption></figcaption></figure>

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

<figure><img src="/files/0b48b371194e18a1cfbee903fdfe98eb87048c5e" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/f3f972d3e91225c9dacef825cea087399807ebda" alt=""><figcaption></figcaption></figure>

#### 3. Запустите образ

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

<figure><img src="/files/6fe29ca538e820604dc694c7102ecdfacbe5d9f9" alt=""><figcaption></figcaption></figure>

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

<figure><img src="/files/9f6978ce4dba385a15928bb6c3e909bbcdeb5e9b" alt=""><figcaption></figcaption></figure>

Откройте настройки и выполните конфигурацию:

<figure><img src="/files/ff49393f49aa9779ca162d13eb64ae9b7f1ef3d7" alt=""><figcaption></figcaption></figure>

Например, для `8085` порта:

<figure><img src="/files/e03ac471136ebf804f175f82d3ab7e5887ad1a13" alt=""><figcaption></figcaption></figure>

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

<figure><img src="/files/53f0b787dd18716cf805a9a1e22e3e794645cf3a" alt=""><figcaption></figcaption></figure>

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

<figure><img src="/files/736a90bd0c2da0bc2925225286099905e96863be" alt=""><figcaption></figcaption></figure>

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

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

Для этого Cherry Studio уже поддерживает настройку [HTTP Basic Authentication (RFC7617)](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Guides/Authentication). Если вы хотите выставить развернутый вами SearXNG в публичную сеть, пожалуйста,**обязательно**настройте HTTP Basic Authentication через Nginx или другой reverse proxy. Ниже приведён краткий туториал, для которого нужны базовые знания Linux-администрирования.

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

Аналогично, по-прежнему используем развертывание через Docker. Предположим, что вы уже следовали[официальному руководству](https://docs.docker.com/engine/install)и установили на сервере последнюю версию Docker CE. Ниже приведена готовая команда, подходящая для чистой установки в Debian:

```bash
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
# см. 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: $(openssl rand -hex 32)
  limiter: false  # может быть отключён для приватного экземпляра
  image_proxy: $IMAGE_PROXY
ui:
  static_use_hash: true
redis:
  url: redis://redis:6379/0
search:
  formats:
    - html
    - json
EOF
```

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

```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 reverse proxy и HTTP Basic Authentication

Если вы используете панель управления сервером, например BaoTa или 1Panel, обратитесь к их документации, чтобы добавить сайт и настроить nginx reverse proxy; затем найдите место для изменения конфигурационного файла nginx и внесите правки по примеру ниже:

```conf
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";

    # По умолчанию при настройке reverse proxy через панель блок 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` на имя пользователя и пароль, которые вы хотите задать):

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

Перезапустите Nginx (перезагрузка конфигурации тоже подойдёт).

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

<figure><img src="/files/363954adadb69159f20ceb507dc7493d915d746b" alt=""><figcaption></figcaption></figure>

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

После успешного локального или серверного развертывания SearXNG следующим шагом будет настройка Cherry Studio.

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

<figure><img src="/files/8d3efd729c4f06fd9870c6e3be13767bad22769c" alt=""><figcaption></figcaption></figure>

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

<figure><img src="/files/c0fa97d72c6ef1507741487d7ad0ac5f43d2fa52" alt=""><figcaption></figcaption></figure>

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

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

<figure><img src="/files/51f70beafd4879ebfa4c73f2f37642468c1b6063" alt=""><figcaption></figcaption></figure>

Разверните её и продолжайте прокручивать вниз — вы найдёте ещё одну папку с меткой:

<figure><img src="/files/9c04a2e70b43047fe6832a109f4a24cbb675925d" alt=""><figcaption></figcaption></figure>

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

<figure><img src="/files/adec80c61cd11670558d390cef8b2d142056d909" alt=""><figcaption></figcaption></figure>

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

<figure><img src="/files/91078cb81f63c4b1c3ffce8c76f406e706d51cb5" alt=""><figcaption></figcaption></figure>

Найдите строку 78; видно, что тип только один — html

<figure><img src="/files/8b92b207ce4f05c5638c7287cf695a5fa19239d0" alt=""><figcaption></figcaption></figure>

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

<figure><img src="/files/fa0b3210379db009527f62ad5c3c3239927b9c3f" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/db03eb30b8e5b257dbd6232c76cdc6c5bbb95adf" alt=""><figcaption></figcaption></figure>

Снова вернитесь в Cherry Studio для проверки — проверка успешна:

<figure><img src="/files/615646d1a2f7ae7b8674023379bc2d56fec7f772" alt=""><figcaption></figcaption></figure>

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

Если пользователь следовал приведённому ранее примеру, развернул сервер и правильно настроил reverse proxy, а также включил тип возврата json, то после ввода адреса и проверки, учитывая что reverse proxy защищён HTTP Basic Authentication, проверка должна вернуть код ошибки 401:

<figure><img src="/files/757bc1ee4311d7fe143996c766427b4ab0ef9cb7" alt=""><figcaption></figcaption></figure>

В клиенте настройте HTTP Basic Authentication и введите ранее заданные имя пользователя и пароль:

<figure><img src="/files/3ba0691ff59daf74d62c72f63385e2150b01da6a" alt=""><figcaption></figcaption></figure>

Выполните проверку — она должна пройти успешно.

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

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

Обратите внимание, что эти предпочтения здесь не влияют на настройки, используемые при вызове большой модели

<figure><img src="/files/6bce811a3246f8d395a6d62c7b2fba71647f70ae" alt=""><figcaption></figcaption></figure>

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

<figure><img src="/files/9bbfe9c0572d7b4d986c0207c3e46c4424154581" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/ba0c0da625cf566076d40a8ff2ef6346ca5d90bd" alt=""><figcaption></figcaption></figure>

Справка по языку конфигурации:

<figure><img src="/files/ac9e36620b0a0aefd5e75cc9397b60d46d33a920" alt=""><figcaption></figcaption></figure>

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

## Распространённые причины неудачной проверки

### В формате ответа не добавлен json

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

<figure><img src="/files/6a59b3a3e3c0ebc5ce12fc340d363874b9195282" alt=""><figcaption></figcaption></figure>

### Поисковая система настроена неправильно

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

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

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

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

<figure><img src="/files/a56a284d4c9342947c697e48df1feeafe71beee1" alt=""><figcaption></figcaption></figure>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.cherry-ai.com/docs/russian/pre-basic/websearch/searxng.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
