深夜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層アプローチを採用します。
- SearXNG Core: ロジックエンジンとユーザーインターフェース。
- Redis: キャッシュに不可欠です。Redisがないと、外部からのレスポンスを待つ間にページ読み込みが600ms以上遅れることがあります。
- 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をフラグした可能性があります。これはよくある障害です。私は以下のように対処しています:
- ソースの切り替え:
settings.ymlで一時的にGoogleを無効にします。代わりにBrave SearchやQwantをプライマリエンジンとして有効にします。 - VPN経由: Gluetunのようなサイドカーコンテナを使用して、SearXNGのトラフィックをWireguard VPN経由でルーティングします。これにより、住宅用IPを検索の巨人から完全に隠すことができます。
- トラフィックを人間らしくする: 一度に照会するエンジンの数を減らします。50個のエンジンを同時に照会するとボットのように見えますが、5個であれば人間のように見えます。
ワークフローへの統合
セルフホストした検索エンジンは、実際に使ってこそ価値があります。FirefoxやBraveの「検索エンジンのショートカット」設定を使用して、SearXNGインスタンスをデフォルトに設定しましょう。
これを構築することは、単なるインフラ管理と日常の利便性の間の架け橋となります。単に「Dockerを学んでいる」のではなく、一日に50回は使うツールを作っているのです。今、設定ファイルを検索するたび、自分の好奇心がマーケティング会社にオークションに出されていないと確信できます。その安心感は、YAMLの数行のコード以上の価値があります。
HomeLabはあなたのプライベートなネットワークです。SearXNGを追加することは、プライバシー保護フィルムを窓に貼るようなものです。あなたからは世界がはっきりと見えますが、世界から中を覗かれることはありません。

