SearXNG ローカル導入と設定

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

SearXNG プロジェクトリンクSearXNG

SearXNG の利点

  • オープンソースで無料、API 不要

  • 比較的高いプライバシー性

  • 高度にカスタマイズ可能

ローカルデプロイ可能

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

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

1. ダウンロード、インストールと設定 docker

インストール後、イメージを保存するパスを選択:

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

検索欄に入力 searxng

イメージを取得:

3. イメージを実行

取得が完了したら images ページへ移動:

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

設定項目を開いて設定:

例として 8085 ポートを例に:

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

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

サーバーへのデプロイ

Windows 上で Docker をインストールするのはやや面倒なため、SearXNG をサーバーにデプロイして他者と共有することもできます。しかし残念ながら SearXNG 自体は認証をサポートしていないため、第三者が技術的手段でインスタンスをスキャンして悪用する可能性があります。

このため、Cherry Studio は現在 HTTP ベーシック認証(RFC7617)の設定をサポートしています。ユーザーが自身でデプロイした SearXNG を公開ネットワークに露出する場合は、必ずNginx などのリバースプロキシソフトで HTTP ベーシック認証を設定してください。以下は簡単なチュートリアルで、基本的な 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  # プライベートインスタンスでは無効化可能
  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 は不要です。
  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 が不要なら、上記を除去してください。デフォルトでは 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 が不要なら、以下を除去してください
  caddy-data:
  caddy-config:
# もし既にローカルで Nginx を使っていて Caddy が不要なら、上記を除去してください
  valkey-data2:

以下を実行 docker compose up -d で起動します。次に実行すると docker compose logs -f searxng ログを確認できます。

Nginx リバースプロキシと HTTP ベーシック認証の設定

宝塔パネルや 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/ に保存されていることを想定しています。
        # 宝塔であれば /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_nameexample_password を実際に設定するユーザー名とパスワードに置き換えてください):

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

Nginx を再起動(または設定のリロード)してください。

この時点でブラウザでページを開くとユーザー名とパスワードの入力を求められます。先ほど設定したユーザー名とパスワードを入力して SearXNG の検索ページにアクセスできるか確認し、設定が正しいか検証してください。

Cherry Studio 側の関連設定

SearXNG をローカルまたはサーバーにデプロイした後は、Cherry Studio 側の設定を行います。

ネットワーク検索の設定ページに移動し、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 等のエンジンが選択されますが、中国大陸からは google 等に直接アクセスできないため失敗します。以下の設定を追加して searxng に baidu エンジンを強制的に使用させれば問題は解決します:

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

アクセス頻度が速すぎる

searxng の limiter 設定が API アクセスを妨げている可能性があります。設定でこれを false にしてみてください:

最終更新

役に立ちましたか?