Fess 14.17から、新たにマルチインスタンス環境がサポートされました。この機能により、1つのOpenSearchクラスター上で複数のFessインスタンスを同時に起動し、それぞれが独立したインデックスや設定を持つことが可能になりました。これにより、異なるクライアントやプロジェクトごとに完全に分離された検索環境を提供することができ、運用の柔軟性が飛躍的に向上します。
Fessには従来から仮想ホスト機能があり、1つのFessインスタンス内で複数のドメインやプロジェクトを効率的に管理することができました。仮想ホスト機能は、リクエストヘッダーなどを基に処理を切り替えられるため、1つのFess環境で複数のサービスを提供するケースに適しています。ただし、インデックスの設定情報などが共有されているので、仮想ホストごとに個別な設定ができないなど、設定面での制約も存在します。
一方、マルチインスタンス環境では、各Fessインスタンスが独自のインデックスや設定を持ち、完全に独立して動作するため、仮想ホストよりも高度なカスタマイズ性と柔軟性が求められる場面に適しています。特に、異なるクライアントやプロジェクトに対して完全に分離された検索環境を提供したい場合、このマルチインスタンス機能が非常に有効です。
今回の記事では、Docker Composeを使用して、複数のFessインスタンスをセットアップする具体的な手順を紹介します。それぞれのインスタンスが独自の設定で管理され、どのように検索できるかを確認していきます。これにより、Fessのマルチインスタンス環境の強みを実際に体験していただければと思います。
マルチインスタンス環境の準備
Fess 14.17からサポートされたマルチインスタンス環境を構築するために、まずは必要なDocker Composeファイルを準備します。事前に、Docker Desktopをインストールするなどで、Docker Composeを利用できるようにしてください。
Docker Composeファイルの取得
Fessのマルチインスタンス環境をセットアップするには、GitHubリポジトリからDocker Composeファイルを取得する必要があります。以下の3つのファイルをダウンロードし、同じディレクトリに保存します。
- compose.yaml : OpenSearch サービスを定義したファイル
-
compose-fess01.yaml : Fess インスタンスを定義したファイル(コンテナー名:
fess01
) -
compose-fess02.yaml : Fess インスタンスを定義したファイル(コンテナー名:
fess02
)
これらのファイルは、それぞれFessインスタンスやOpenSearchを構成するために必要な設定が記述されています。
Fessインスタンスの起動
次にFessインスタンスを起動します。ここでは、compose.yamlファイルを利用してOpenSearchを立ち上げ、さらに2つのFessインスタンス(fess01
、fess02
)を起動します。
Fessインスタンスの起動コマンド
以下のコマンドを使用して、Docker ComposeでOpenSearchとFessインスタンスを起動します。
docker compose -f compose.yaml -f compose-fess01.yaml -f compose-fess02.yaml up -d
このコマンドを実行すると、まずOpenSearchが起動し、その後に2つのFessインスタンス(fess01、fess02)がそれぞれ起動します。-dオプションはバックグラウンドでコンテナを実行するためのものです。
コンテナの状態確認
次に、正常にFessインスタンスが起動しているかを確認するため、以下のコマンドを実行してDockerコンテナの状態を確認します。
docker ps
このコマンドの実行結果には、fess01とfess02という名前のコンテナが起動していることが表示され、OpenSearchと各Fessインスタンスが正常に起動していることを確認できます。
インスタンスへのアクセス
Fessインスタンスが正常に起動しているかをブラウザから確認します。以下のURLにアクセスして、各インスタンスの管理画面にログインしてください。
-
fess01
の管理画面:http://localhost:8080/admin/
-
fess02
の管理画面:http://localhost:8081/admin/
問題なくログインできれば、Fessの2つのインスタンスが起動し、それぞれが独立して動作する環境が整いました。
各インスタンスでのクロール設定
次に、それぞれにクロール設定を行います。今回は、fess01
インスタンスでFessの英語ドキュメントを、fess02
インスタンスでFessの日本語ドキュメントをクロールするように設定します。
クロール設定は、管理画面の左メニュー「クローラー」>「ウェブ」>「新規作成」をクリックして、クロール対象を指定します。設定内容は以下の表を参照してください。各インスタンスで設定値を入力したら、「作成」ボタンをクリックしてください。
項目 | fess01のクロール設定 | fess02のクロール設定 |
---|---|---|
名前 | Fess(English) | Fess(日本語) |
URL | https://fess.codelibs.org/14.17/admin/ |
https://fess.codelibs.org/ja/14.17/admin/ |
クロール対象とするURL | https://fess.codelibs.org/14.17/admin/.* |
https://fess.codelibs.org/ja/14.17/admin/.* |
最大アクセス数 | 10 | 10 |
クロールジョブの実行と確認
クロール設定が完了したら、実際にクロールジョブを実行します。
管理画面の左メニュー「システム」>「スケジューラ」で「Default Crawler」のジョブを開きます。「今すぐ開始」をクリックしてクロールを開始し、ジョブの状態が「実行中」から「有効」になるまで待ちます。
各インスタンスのクロールジョブが完了したら、検索してみましょう。それぞれのインスタンスで定義した検索結果が表示されます。
fess01インスタンスで検索
fess01の検索画面 http://localhost:8080/
で *:*
を検索
fess02インスタンスで検索
fess02の検索画面 http://localhost:8081/
で *:*
を検索
OpenSearchのインデックス確認
Fessのマルチインスタンス環境では、各インスタンスが独自のインデックスを持ち、OpenSearchでデータが管理されています。以下のコマンドで、OpenSearch上のインデックスを確認できます。
$ curl http://localhost:9200/_cat/indices?v
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open configsync CaU-ubwfQjqtDpymcNi3ug 1 0 208 0 378.6kb 378.6kb
green open fess.20241016112740467 0OQ5X_jmTYehXv9Owilb5g 5 0 10 1 1.9mb 1.9mb
green open fess.20241016112531973 adhaeNHJQYWDwEITj1FZ_A 5 0 20 0 2.8mb 2.8mb
green open fess01_config.label_type CduqyjtdQ3WD49SDYUwrAw 1 0 0 0 208b 208b
green open fess01_config.thumbnail_queue IzyRo2oyRAqnT9frTyOudg 1 0 0 0 31.1kb 31.1kb
green open fess01_log.click_log F7oCDdpHRuy4pFfU1b_4rQ 5 0 0 0 1kb 1kb
green open fess01_log.favorite_log Z72Ji4fSR1GG6xsntT-VWQ 5 0 0 0 1kb 1kb
green open fess01_log.search_log Lxi_UAQKTKiFxUMFP5dFHQ 5 0 1 0 36.1kb 36.1kb
green open fess01_log.user_info -CpCBfcSTvqFXt5xpoD3nA 5 0 1 1 8.6kb 8.6kb
green open fess01_suggest mA78gqdkQ5uW89Ye-5Bzsw 1 0 1 0 6.9kb 6.9kb
green open fess01_user.role jFHlITYwRVeu7ImewVecsw 1 0 2 0 3.5kb 3.5kb
green open fess01_user.group wNCC1dglQD6-8R6O3MexDQ 1 0 0 0 208b 208b
green open fess01_user.user MXKyF6eNTPef2u1rPwkwaw 1 0 1 0 5.1kb 5.1kb
... (省略) ...
green open fess02_config.label_type zZbBBBnCTHa0g-5p7mn8Iw 1 0 0 0 208b 208b
green open fess02_config.thumbnail_queue Hks8GXsLRZyziTPdPeStSw 1 0 0 4 18.9kb 18.9kb
green open fess02_log.click_log YD2fFIVZTgW3SIP0iNxxYA 5 0 0 0 1kb 1kb
green open fess02_log.favorite_log Q6dPI0QdQr2XQGym4_8SFQ 5 0 0 0 1kb 1kb
green open fess02_log.search_log bxBK4z3HQWGbSIciUt4XUA 5 0 1 0 12.3kb 12.3kb
green open fess02_log.user_info hjKAzXUzQ2mv4P3J4aYV1A 5 0 1 1 8.6kb 8.6kb
green open fess02_suggest eQx5QtsbSxWooLTPzKXMyA 1 0 1 0 6.9kb 6.9kb
green open fess02_user.role OTq2SCf7QLiH9P-rOfzLLg 1 0 2 0 3.5kb 3.5kb
green open fess02_user.group 1FS5Gq8LRnCH5ej6ZXs0_w 1 0 0 0 208b 208b
green open fess02_user.user UIuAEm9GQbGDN1l5sm2s6A 1 0 1 0 5.1kb 5.1kb
* * *
今回は、Fess 14.17で新たにサポートされたマルチインスタンス環境の構築方法について解説しました。仮想ホスト機能とは異なり、マルチインスタンス環境では各インスタンスが完全に独立して設定やインデックスを管理できるため、カスタマイズの面でより柔軟な運用が可能です。この機能は、複数のクライアントや異なる部署、プロジェクトで個別の検索要件を持つ場合に非常に有効です。ぜひ今回の内容を参考に、Fessのマルチインスタンス環境を試していただき、実際のプロジェクトに応用してみてください。