DockerでSearXNGをデプロイする:HomeLabにプライベートで広告のない検索エンジンを構築する

HomeLab tutorial - IT technology blog
HomeLab tutorial - IT technology blog

深夜2時の本番環境インシデント

それは火曜日の深夜2時のことでした。私は2TBの本番用データベースを消失させかねない、不可解なXFSファイルシステムの破損エラーを追っていました。Googleにエラーコードを貼り付けるたび、最初の4つの結果は「スポンサー」のゴミばかり。200ドルもする役に立たない復旧ツールです。5番目の結果は?月額5ドルのペイウォールの向こうに隠されたMediumの記事でした。私は疲れ果て、たった一つの有効なStack Overflowのスレッドを見つけるためだけに、何十ものスクリプトに追跡されることに嫌気がさしていました。

その夜、私は「商品」であることをやめる決心をしました。単なる「プライベート」ブラウザが欲しかったのではありません。自分のクエリを処理するインフラを自ら所有したかったのです。それがSearXNGに辿り着いた理由です。データマイニングの巨人から逃れるためにHomeLabを構築しているなら、これは真にプライベートなスタックの基礎となるものです。サーバーを効果的にプライバシーの盾に変えてくれます。

検索エンジン vs メタ検索エンジン:その違いを知る

ウェブを検索する場合、一般的に3つの道があります。Dockerイメージをプルし始める前に、これらの違いを理解しておくことが重要です。

  • 主流のエンジン (Google/Bing): 膨大なインデックスを提供しますが、ユーザーのデータによって成り立っています。ユーザーの興味関心に関する数年分のプロファイルを作成し、ターゲット広告を販売します。
  • プライバシー重視のプロキシ (DuckDuckGo/Startpage): ユーザーを追跡しませんが、独自の「ブラックボックス」なランキングロジックに縛られます。何をフィルタリングし、何をプロモートするかについて、ユーザーは一切コントロールできません。
  • セルフホスト型メタ検索 (SearXNG): エンジニアの選択肢です。SearXNG自体はウェブをクロールしません。代わりに高速プロキシとして機能し、Google、Bing、DuckDuckGo、その他70以上のエンジンに対して同時にクエリを投げます。結果を表示する前に、追跡ID、クッキー、フィンガープリント用スクリプトを除去します。

私がSearXNGを選んだのは、主要なあらゆるソースから最高の結果を集約しつつ、アップストリームのエンジンからは自分の存在を隠してくれるからです。サーバーを効果的にプライバシーの盾に変えてくれます。

トレードオフ:あなたに適しているか?

自分専用の検索エンジンを運用する現実を見てみましょう。いくつかの苦労も伴います。

メリット

  • 絶対的なプライバシー: 深夜のデバッグ習慣や健康上の懸念について、誰もプロファイルを作成することはありません。
  • 広告ゼロ: SearXNGはスポンサーコンテンツを完全に削除します。結果が表示されるなら、それは誰かが広告料を払ったからではなく、関連性があるからです。
  • 精密なフィルタリング: ワンクリックでReddit、StackOverflow、Wikipediaを横断して検索するように設定できます。
  • データの主権: 検索履歴は自分のハードウェア上に留まります。ローカルネットワーク外に出ることはありません。

デメリット

  • メンテナンス: 検索エンジンは頻繁にサイト構造を変更します。スクレイパーを機能させ続けるために、毎月Dockerイメージを更新する必要があります。
  • IPレピュテーション: 住宅用の1つのIPからGoogleに頻繁にクエリを投げると、CAPTCHAの壁にぶつかります。これについては後ほど解決策を紹介します。
  • リソース: 効率的で、通常は250MB以下のRAMでアイドルしますが、Docker環境で専用のサイクルを必要とします。

HomeLabアーキテクチャ:速度のための設計

インフラを使いこなすということは、単に「動かす」だけでなく、パフォーマンスを考慮して設計することを意味します。軽快なSearXNG環境を構築するために、単一コンテナの罠を避け、以下の3層アプローチを採用します。

  1. SearXNG Core: ロジックエンジンとユーザーインターフェース。
  2. Redis: キャッシュに不可欠です。Redisがないと、外部からのレスポンスを待つ間にページ読み込みが600ms以上遅れることがあります。
  3. Filtron (オプション): Goベースのリバースプロキシ。攻撃的なボットからインスタンスを保護し、インスタンスを公開する場合の外部トラフィックをレート制限します。

実装ガイド:デプロイ

ターミナルを開いてください。DockerとComposeの準備ができていることを前提とします。Portainerを使用している場合は、標準的なスタックとしてデプロイできます。

ステップ1:ワークスペースのセットアップ

mkdir -p ~/homelab/searxng/searxng
cd ~/homelab/searxng

ステップ2:セキュリティ第一

SearXNGはセッション暗号化のために強力な秘密鍵を必要とします。プレースホルダーは使わないでください。セッションの安全性を保つため、適切な32バイトの16進数文字列を生成します。

openssl rand -hex 32

ステップ3:Docker Composeの設定

docker-compose.ymlを作成します。このファイルはUIのレスポンスを確保するために、アプリケーションをRedisにリンクさせます。

services:
  redis:
    container_name: searxng-redis
    image: docker.io/library/redis:alpine
    command: redis-server --save "" --appendonly no
    networks:
      - searxng-net
    restart: unless-stopped

  searxng:
    container_name: searxng
    image: docker.io/searxng/searxng:latest
    networks:
      - searxng-net
    ports:
      - "8080:8080"
    volumes:
      - ./searxng:/etc/searxng:rw
    environment:
      - SEARXNG_SETTINGS_PATH=/etc/searxng/settings.yml
    depends_on:
      - redis
    restart: unless-stopped

networks:
  searxng-net:
    driver: bridge

ステップ4:エンジンのチューニング

searxng/settings.ymlを作成します。ここが重要な設定箇所です。アプリをRedisコンテナに向け、好みのエンジンを定義する必要があります。

use_default_settings: true
server:
  port: 8080
  bind_address: "0.0.0.0"
  secret_key: "ここに生成したHEXキーを貼り付けてください"
  base_url: http://192.168.1.50:8080/

redis:
  url: redis://redis:6379/0

search:
  safe_search: 0
  autocomplete: google

engines:
  - name: google
    engine: google
  - name: duckduckgo
    engine: duckduckgo
  - name: stackoverflow
    engine: stackoverflow

ステップ5:起動

デプロイを実行します:

docker-compose up -d

http://your-server-ip:8080にアクセスしてください。最初のクエリを受け付ける準備が整った、クリーンでミニマルな検索バーが表示されるはずです。

403 Forbiddenエラーのトラブルシューティング

インスタンスが突然「エンジンが結果を取得できません」と返すようになった場合、Googleが自宅のIPをフラグした可能性があります。これはよくある障害です。私は以下のように対処しています:

  1. ソースの切り替え: settings.ymlで一時的にGoogleを無効にします。代わりにBrave SearchやQwantをプライマリエンジンとして有効にします。
  2. VPN経由: Gluetunのようなサイドカーコンテナを使用して、SearXNGのトラフィックをWireguard VPN経由でルーティングします。これにより、住宅用IPを検索の巨人から完全に隠すことができます。
  3. トラフィックを人間らしくする: 一度に照会するエンジンの数を減らします。50個のエンジンを同時に照会するとボットのように見えますが、5個であれば人間のように見えます。

ワークフローへの統合

セルフホストした検索エンジンは、実際に使ってこそ価値があります。FirefoxやBraveの「検索エンジンのショートカット」設定を使用して、SearXNGインスタンスをデフォルトに設定しましょう。

これを構築することは、単なるインフラ管理と日常の利便性の間の架け橋となります。単に「Dockerを学んでいる」のではなく、一日に50回は使うツールを作っているのです。今、設定ファイルを検索するたび、自分の好奇心がマーケティング会社にオークションに出されていないと確信できます。その安心感は、YAMLの数行のコード以上の価値があります。

HomeLabはあなたのプライベートなネットワークです。SearXNGを追加することは、プライバシー保護フィルムを窓に貼るようなものです。あなたからは世界がはっきりと見えますが、世界から中を覗かれることはありません。

Share: