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インスタンス(fess01fess02)を起動します。

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/*:* を検索

  • fess01の検索画面

fess02インスタンスで検索

fess02の検索画面 http://localhost:8081/*:* を検索

  • fess02の検索画面

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のマルチインスタンス環境を試していただき、実際のプロジェクトに応用してみてください。