# SearXNGのローカルデプロイと設定

CherryStudio は SearXNG を通じたウェブ検索をサポートしています。SearXNG はローカルにもサーバー上にもデプロイできるオープンソースプロジェクトで、そのため他の API プロバイダーを必要とする設定方法とは少し異なります。

**SearXNG プロジェクトリンク**に由来する：[SearXNG](https://github.com/searxng/searxng)

## SearXNG の利点

* オープンソースで無料、API 不要
* 比較的プライバシー性が高い
* 高度にカスタマイズ可能

## ローカルデプロイ

### 1. Docker による直接デプロイ

SearXNG は複雑な環境設定を必要としないため、docker compose を使わず、空いているポートを1つ用意するだけでデプロイできます。そのため、最も手軽な方法は Docker で直接イメージを取得してデプロイすることです。

#### 1. ダウンロード、インストールして設定する [docker](https://www.docker.com/)

<figure><img src="/files/8014e867519b0ac24708cc02a74ca9ff7918ea1c" alt=""><figcaption></figcaption></figure>

インストール後、イメージの保存先を1つ選択します：

<figure><img src="/files/2f1e77d36b5cf1475ffe510170ede4b288df1e75" alt=""><figcaption></figcaption></figure>

#### 2. SearXNG イメージを検索して取得する

検索欄に入力 **searxng** に由来する：

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

イメージを取得：

<figure><img src="/files/57cd7216706850db957ecda2bd157c85848ba4ed" alt=""><figcaption></figcaption></figure>

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

#### 3. イメージを実行する

取得に成功したら **images** ページへ移動：

<figure><img src="/files/82adefa2910a3f03e02446ed0b8d4e16aa20c2fc" alt=""><figcaption></figcaption></figure>

取得したイメージを選択して実行をクリック：

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

設定項目を開いて設定する：

<figure><img src="/files/64140ada66c1d5e15d72a2833592c245bfabd7ea" alt=""><figcaption></figcaption></figure>

を `8085` ポートの例として：

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

実行に成功したらリンクをクリックして SearXNG のフロントエンド画面を開けます：

<figure><img src="/files/2187d832a8744278a7bd1f92f0ee11d75ae41cc5" alt=""><figcaption></figcaption></figure>

このページが表示されればデプロイ成功です：

<figure><img src="/files/54ac15caf02dcbcd6eada1c0cfaf2e91818ff260" alt=""><figcaption></figcaption></figure>

## サーバーデプロイ

Windows で Docker をインストールするのはかなり面倒なため、SearXNG をサーバーにデプロイして、他の人と共有して使うこともできます。しかし残念ながら、SearXNG 自体は現時点で認証をサポートしておらず、第三者が技術的手段でデプロイ済みインスタンスをスキャンして悪用できてしまいます。

このため、Cherry Studio は現在 [HTTP 基本認証（RFC7617）](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Guides/Authentication)の設定をサポートしています。ユーザーが自分でデプロイした SearXNG を公開ネットワークに露出する場合は、**必ず**Nginx などのリバースプロキシソフトウェアで HTTP 基本認証を設定してください。以下に簡単なチュートリアルを示します。基本的な 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
# 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` ファイルを編集し、以下を参照してください：

```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 基本認証の設定

宝塔パネルや 1Panel などのサーバーパネルを使用している場合は、ドキュメントを参照してサイトを追加し、nginx のリバースプロキシを設定したうえで、nginx 設定ファイルを編集する箇所を見つけ、以下の例を参考に変更してください：

```conf
server
{
    listen 443 ssl;

    # この行はあなたのホスト名です
    server_name search.example.com;

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

    # SSL を設定しているなら、この2行があるはずです
    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 ブロックに下の2行を追加するだけでよく、他はそのままで構いません。
        # ここでは設定ファイルが /etc/nginx/conf.d/ ディレクトリに保存されていると仮定しています。
        # 宝塔の場合は /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 を再起動します（設定の再読み込みでも可）。

このとき Web ページを開くと、すでにユーザー名とパスワードの入力を求められるはずです。先ほど設定したユーザー名とパスワードを入力して SearXNG の検索ページに正常に入れるか確認し、設定が正しいかチェックしてください。

<figure><img src="/files/31e3e7a6bf557fcf730a9394b36592f6f9becbe4" alt=""><figcaption></figcaption></figure>

## Cherry Studio 関連設定

SearXNG をローカルまたはサーバーにデプロイできたら、次は CherryStudio の関連設定です。

ウェブ検索設定ページに移動し、Searxng を選択します：

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

ローカルデプロイのリンクを直接入力すると検証失敗になりますが、この時は心配いりません：

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

直接デプロイした直後はデフォルトで json の返却形式が設定されていないため、データを取得できません。設定ファイルを修正する必要があります。

Docker に戻り、Files タブでイメージ内のタグ付きフォルダを見つけます：

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

展開してさらに下へスクロールすると、別のタグ付きフォルダが見つかります：

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

さらに展開して、 **settings.yml** 設定ファイルを見つけます：

<figure><img src="/files/32c419d18ab80304a368a0e694ca8564dc57aee6" alt=""><figcaption></figcaption></figure>

ファイルエディタを開きます：

<figure><img src="/files/7f5ff175f7d22dfc16fbc95dd0a8cd2ddd098a05" alt=""><figcaption></figcaption></figure>

78 行目を見つけると、タイプが html しかないことが分かります

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

json タイプを追加して保存し、イメージを再実行します

<figure><img src="/files/47db49e9596a6a84ea983f6536e05dd6ca8a2027" alt=""><figcaption></figcaption></figure>

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

Cherry Studio に戻って再検証すると、検証成功です：

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

アドレスはローカルでも指定できます： <http://localhost> : ポート番号\
または docker アドレスでも指定できます：<http://host.docker.internal> : ポート番号

ユーザーが前述の例に従ってサーバーにデプロイし、リバースプロキシを正しく設定している場合、json の返却形式はすでに有効になっています。アドレスを入力して検証すると、リバースプロキシに HTTP 基本認証を設定しているため、このときの検証結果は 401 エラーコードを返すはずです：

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

クライアント側で HTTP 基本認証を設定し、先ほど設定したユーザー名とパスワードを入力します：

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

検証を行うと、正常に検証されるはずです。

### その他の設定

この時点で SearXNG にはデフォルトのインターネット検索機能があります。検索エンジンをカスタマイズしたい場合は、自分で設定する必要があります

注意すべき点として、ここでの優先設定は大規模モデル呼び出し時の設定には影響しません

<figure><img src="/files/017c46220688aa24f0df586b7bc478332fb740b9" alt=""><figcaption></figcaption></figure>

大規模モデル呼び出しに使用する検索エンジンを設定したい場合は、設定ファイルで以下を設定してください：

<figure><img src="/files/7ef52490ca0fdfdd2fab748a9fd8fbe404ac0f0b" alt=""><figcaption></figcaption></figure>

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

設定言語の参考：

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

内容が長すぎて直接編集しにくい場合は、ローカル IDE にコピーし、修正後に設定ファイルへ貼り付ければよいです。

## 検証失敗のよくある原因

### 返却形式に json 形式が追加されていない

設定ファイルで返却形式に json を追加します：

<figure><img src="/files/1ffc5b0199ccd6ab2656af00bb65db45ebb2a1d4" 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
```

### アクセス速度が速すぎる

searxng の limiter 設定が API アクセスを妨げています。設定で false にしてみてください：

<figure><img src="/files/371057644db29ea71f91b0872709bc564a97efac" 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/jp/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.
