SearXNGとは:VPSに自分専用の検索エンジンをインストールする方法

読了時間 6分
Tropic
SearXNGとは:VPSに自分専用の検索エンジンをインストールする方法

SearXNG:VPSに構築する追跡のない自分専用検索エンジン

一般的な検索エンジンは、検索リクエストをIPアドレス、Cookie、操作履歴と関連付けることができます。SearXNGは通信経路を変えます。ブラウザは自分のインスタンスにアクセスし、そのインスタンスが複数の外部検索エンジンへ問い合わせ、回答を1つのページにまとめます。

外部の検索元に見えるのはSearXNGサーバーのアドレスであり、ユーザーのCookieではありません。サービス自体も広告用プロフィールを作成しません。ただし、完全な匿名性が得られるわけではありません。公開インスタンスの管理者は技術的にはログを保存でき、検索結果のリンクを開いた後は、移動先のサイトが再びブラウザと直接やり取りします。

ここではSearXNGの機能を確認し、HTTPSとパスワード保護を備えた自分専用のインスタンスをVPSにインストールします。

SearXNGとは何か、どのように動作するのか

SearXNGは無料でオープンソースのメタ検索エンジンです。独自のWebサイト索引は持たず、設定された検索エンジンや専門的な情報源から結果を取得し、形式を統一して1つの画面に表示します。

ブラウザ → 自分のSearXNG → 検索エンジン
                           ↓
                        統合結果

検索のたびに、SearXNGは次の処理を行います。

  1. Web、画像、ニュース、動画などの検索カテゴリを判定します。
  2. サーバーを代理として、選択された検索元へ問い合わせます。
  3. ユーザーのCookieを検索元へ送信せず、外向きのリクエストにはランダムなブラウザプロファイルを使用します。
  4. 返された回答を1つの検索結果ページにまとめます。

速度は外部システムに左右されます。応答が遅い場合や、CAPTCHAが表示される場合、IPアドレスがブロックされる場合があります。SearXNGは制御可能な中間層であり、独立した検索索引ではありません。

SearXNGが単一の検索エンジンより魅力的な理由

異なる検索元を1つの結果ページに統合

一般的な検索エンジンと、百科事典、地図、学術論文、リポジトリ、ニュース、画像カタログなどの専門的な情報源を組み合わせられます。通常の検索結果がSEOページで埋め尽くされている場合や、ニッチな資料を見つけにくい場合に役立ちます。

この記事を作成した時点で、ドキュメントには272種類の統合が掲載され、そのうち83種類が初期状態で有効になっていました。ただし、すべてが同じように安定しているわけではありません。

使用する検索元は設定によって変わります。利用可能なものをすべて同時に有効にするより、安定した検索元を少数選ぶほうが通常は高速です。

クイックコマンド

短縮コマンドを使うと、検索エンジン、カテゴリ、言語を一時的に指定できます。

!wp docker compose       — Wikipediaで検索
!images オーロラ         — 画像を検索
:ja !wp プロキシサーバー — 日本語でWikipediaを検索

!!コマンドは、ユーザーを外部検索エンジンへ直接転送します。このモードではSearXNGの保護は適用されません。

ブラウザや独自ツールのための検索

SearXNGはOpenSearchに対応しているため、ブラウザの既定の検索エンジンとして設定できます。また、管理者が必要な形式を許可していれば、JSON、CSV、RSS形式で応答するHTTP APIも利用できます。

1つのインスタンスを、社内ダッシュボード、ボット、調査用スクリプト、ローカルAIアシスタントの検索バックエンドとして利用できます。APIは認証とリクエスト制限を設定した後にのみ公開するのが安全です。

SearXNGのプライバシー保護はどの程度か

できることできないこと
ブラウザのCookieを外部検索エンジンへ送信しない完全な匿名性は提供しない
ユーザーのIPをサーバーのIPで隠す検索結果のサイトを開いた後は保護しない
外部広告と一部の追跡パラメータを除去する他人のサーバーの管理者がログを保存していないとは保証しない
画像をプロキシ経由で読み込めるVPN、Tor、ブラウザ保護の代わりにはならない

公開インスタンスは試用には便利ですが、管理者を信頼する必要があり、共有IPは制限を受けやすくなります。

自分のサーバーならログ、検索元、アクセスを管理できますが、ブラウザ自体が匿名になるわけではありません。

公開インスタンス、自宅サーバー、VPSの比較

選択肢メリット制約
公開インスタンス何もインストールする必要がない管理者への信頼、過負荷、CAPTCHA
自宅サーバーVPSを借りずに完全に管理できるデバイスを常時稼働させる必要があり、外部アクセスの設定が難しい
自分のVPS24時間稼働、ドメイン、HTTPS、複数端末からのアクセスコンテナの更新とセキュリティ管理が必要

自分専用のSearXNGは、家族、チーム、開発者、ローカルAIツールに役立ちます。たまに検索するだけなら公開インスタンスのほうが簡単です。

SearXNGに必要なVPS構成

負荷はユーザー数、検索元、同時リクエスト数によって変わります。実用的な初期構成は次のとおりです。

利用シナリオCPURAMディスク
1人で利用1 vCPU1 GB10 GB
家族または小規模チーム2 vCPU2 GB20 GB
APIと追加サービス2~4 vCPU4 GB以上30 GB以上

大容量ディスクは必要ありません。ネットワーク品質、固定IP、RAMの余裕のほうが重要です。

この用途にはtropic.hostのLinux VPSが適しています。小さな構成から始め、ユーザーやAPI利用が増えたらリソースを拡張できます。プランを選ぶときは、ストレージ容量に余分な費用をかけるより、RAMとネットワーク品質を優先するほうが有効です。

Docker Composeを使ってVPSにSearXNGをインストールする

この例ではUbuntu 24.04 LTS、search.example.com、Valkey、Caddyを使用します。DNSのAレコードをサーバーへ向け、ポート80と443を開放してください。

1. Dockerをインストールしてディレクトリを作成する

sudo apt update
sudo apt install -y docker.io docker-compose-v2 openssl
sudo systemctl enable --now docker

sudo mkdir -p /opt/searxng/searxng
cd /opt/searxng

ドメインとランダムなシークレットを含む.envファイルを作成します。

printf 'SEARXNG_HOSTNAME=search.example.com\nSEARXNG_SECRET=%s\n' \
  "$(openssl rand -hex 32)" | sudo tee .env >/dev/null
sudo chmod 600 .env

2. docker-compose.ymlを作成する

name: searxng

services:
  searxng:
    image: docker.io/searxng/searxng:latest
    restart: unless-stopped
    environment:
      SEARXNG_BASE_URL: https://${SEARXNG_HOSTNAME}/
      SEARXNG_SECRET: ${SEARXNG_SECRET}
      SEARXNG_VALKEY_URL: valkey://valkey:6379/0
    volumes:
      - ./searxng:/etc/searxng:rw
      - searxng-cache:/var/cache/searxng
    depends_on: [valkey]

  valkey:
    image: docker.io/valkey/valkey:9-alpine
    restart: unless-stopped
    command: valkey-server --save 30 1 --loglevel warning
    volumes:
      - valkey-data:/data

  caddy:
    image: docker.io/caddy:2-alpine
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    environment:
      SEARXNG_HOSTNAME: ${SEARXNG_HOSTNAME}
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy-data:/data
      - caddy-config:/config
    depends_on: [searxng]

volumes:
  searxng-cache:
  valkey-data:
  caddy-data:
  caddy-config:

3. SearXNGを設定する

searxng/settings.ymlを作成します。

use_default_settings: true

general:
  instance_name: "Private Search"

search:
  safe_search: 1
  autocomplete: ""
  formats: [html]

server:
  limiter: true
  image_proxy: true

valkey:
  url: valkey://valkey:6379/0

searxng/limiter.tomlを作成します。

[botdetection]
trusted_proxies = [
  "127.0.0.0/8",
  "::1",
  "172.16.0.0/12",
]

Limiterは、ボットがインスタンスを過負荷にし、外部検索エンジンがそのIPアドレスを早期に制限するリスクを下げます。

4. パスワードとHTTPSを追加する

強力なパスワードのハッシュを生成します。

sudo docker run --rm caddy:2-alpine \
  caddy hash-password --plaintext 'パスワードを置き換える'

生成されたハッシュをCaddyfileに挿入します。

{$SEARXNG_HOSTNAME} {
    basic_auth {
        searchuser ここにハッシュを挿入
    }

    reverse_proxy searxng:8080 {
        header_up X-Real-IP {remote_host}
    }
}

Caddyが保存するのは平文のパスワードではなくハッシュです。Basic Authの代わりに、VPN内からのみアクセスできるようにすることもできます。

5. コンテナを起動する

sudo docker compose config
sudo docker compose pull
sudo docker compose up -d
sudo docker compose ps

https://search.example.comを開きます。CaddyがTLS証明書を自動取得し、その後ブラウザがユーザー名searchuserとパスワードを要求します。SearXNGのログは次のコマンドで確認できます。

sudo docker compose logs -f searxng

起動後に設定すること

必要な検索元だけを残し、言語とSafeSearchを選択してから、OpenSearchを通じてSearXNGをブラウザに追加します。更新は次のコマンドだけで行えます。

sudo docker compose pull
sudo docker compose up -d

.envCaddyfilesearxngディレクトリをバックアップしてください。JSON APIは必要な場合にのみ有効にし、パスワードやリクエスト頻度制限なしで公開しないでください。

よくある間違い

間違い結果解決策
インスタンスを誰にでも公開するボットが負荷を発生させ、IPが制限されやすくなるパスワード、VPN、シングルサインオンを使う
検索元を有効にしすぎる結果表示が遅くなり、タイムアウトが発生する安定した検索エンジンを少数だけ残す
SearXNGを独自索引だと考える外部システムに障害が起きると一部の結果が消える検索元への依存を考慮する
完全な匿名性を期待する検索結果のサイトは引き続きブラウザを追跡できるブラウザ保護、VPN、Torを使う
HTTPSなしで実行する検索リクエストとパスワードが安全でない状態で送信されるTLS対応のリバースプロキシを使う

まとめ

SearXNGは異なる検索元を1つの画面にまとめ、パーソナライズの影響を減らし、ブラウザ、スクリプト、ローカルAIに共通の検索機能を提供します。試すだけなら公開インスタンスで十分です。継続的に使うなら、HTTPS、認証、limiter、少数の安定した検索元を備えた自分のサーバーが適しています。

最初は1 GBのRAMで始められます。ユーザー数が増えたとき、APIを接続するとき、追加のコンテナを実行するときにリソースを増やしてください。

FAQ

SearXNGは完全に匿名ですか?

いいえ。外部検索エンジンから一部のデータを隠しますが、インスタンスの管理者はログを保存できます。サイトを開いた後は、そのサイト独自の追跡手段が適用されます。

SearXNGはGoogleより優れていますか?

解決する課題が異なります。Googleは通常より高速で、検索結果を強くパーソナライズします。SearXNGは制御性が高く、複数の検索元を組み合わせられ、ユーザープロファイルへの依存も少なくなります。

VPSなしでもSearXNGを利用できますか?

はい。公開インスタンス、自宅のパソコン、NAS、ミニサーバーを利用できます。VPSは、どのネットワークからでも24時間アクセスできる環境を用意するために必要です。

必要なRAM容量はどのくらいですか?

1人で使うなら1 GBから始めるのが現実的です。家族、チーム、API、追加コンテナで利用する場合は2~4 GBが適しています。

SearXNGをブラウザやAIに接続できますか?

はい。ブラウザはOpenSearchを利用でき、プログラムはHTTP APIを利用できます。APIへのアクセスは認証とlimiterで保護してください。