マルチテナンシー設定

概要

Fess のマルチテナンシー機能を使用すると、単一の Fess インスタンスで 複数のテナント(組織、部門、顧客など)を分離して運用できます。

仮想ホスト機能を使用することで、各テナントに対して:

  • 独立した検索UI

  • 分離されたコンテンツ

  • カスタマイズされたデザイン

を提供できます。

仮想ホスト機能

仮想ホストは、HTTPリクエストのホスト名に基づいて、異なる検索環境を提供する機能です。

仕組み

  1. ユーザーが tenant1.example.com にアクセス

  2. Fess がホスト名を識別

  3. 対応する仮想ホスト設定を適用

  4. テナント固有のコンテンツとUIを表示

仮想ホストの設定

管理画面での設定

  1. 管理画面にログイン

  2. 「クローラー」→「仮想ホスト」に移動

  3. 「新規作成」をクリック

  4. 以下を設定:

    • ホスト名: tenant1.example.com

    • パス: ``/tenant1``(オプション)

クロール設定との連携

Webクロール設定で仮想ホストを指定することで、コンテンツを分離できます:

  1. 「クローラー」→「ウェブ」でクロール設定を作成

  2. 「仮想ホスト」フィールドで対象の仮想ホストを選択

  3. この設定でクロールされたコンテンツは、指定した仮想ホストでのみ検索可能

アクセス制御

仮想ホストとロールの組み合わせ

仮想ホストとロールベースのアクセス制御を組み合わせることで、 より細かいアクセス制御が可能です:

# 設定例
virtual.host=tenant1.example.com
permissions=role_tenant1_user

ロールベース検索

詳細は ロールベース検索の設定 を参照してください。

UIカスタマイズ

各仮想ホストに対してUIをカスタマイズできます。

テーマの適用

仮想ホストごとに異なるテーマを適用:

  1. 「システム」→「デザイン」でテーマを設定

  2. 仮想ホスト設定でテーマを指定

カスタムCSS

仮想ホストごとにカスタムCSSを適用:

# 仮想ホスト固有のCSSファイル
/webapp/WEB-INF/view/tenant1/css/custom.css

ラベル設定

仮想ホストごとに表示するラベルを制限:

  1. ラベルタイプの設定で仮想ホストを指定

  2. 指定した仮想ホストでのみラベルが表示される

API認証

仮想ホストごとにAPIアクセスを制御:

アクセストークン

仮想ホストに紐づくアクセストークンを発行:

  1. 「システム」→「アクセストークン」でトークンを作成

  2. トークンに仮想ホストを関連付け

APIリクエスト

curl -H "Authorization: Bearer TENANT_TOKEN" \
     "https://tenant1.example.com/api/v1/search?q=keyword"

DNS設定

マルチテナンシーを実現するためのDNS設定例:

同一サーバーへのサブドメイン

# DNS設定
tenant1.example.com    A    192.168.1.100
tenant2.example.com    A    192.168.1.100

# またはワイルドカード
*.example.com          A    192.168.1.100

リバースプロキシ設定

Nginxを使用したリバースプロキシ設定例:

server {
    server_name tenant1.example.com;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

server {
    server_name tenant2.example.com;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

データ分離

完全なデータ分離が必要な場合は、以下のアプローチを検討:

インデックスレベルの分離

各テナントに対して別々のインデックスを使用:

# テナント1用インデックス
index.document.search.index=fess_tenant1.search

# テナント2用インデックス
index.document.search.index=fess_tenant2.search

注釈

インデックスレベルの分離には、カスタム実装が必要な場合があります。

ベストプラクティス

  1. 明確な命名規則: 仮想ホストとロールに一貫した命名規則を使用

  2. テスト: 各テナントでの動作を十分にテスト

  3. 監視: テナントごとのリソース使用状況を監視

  4. ドキュメント: テナント設定を文書化

制限事項

  • 管理画面は全テナントで共有されます

  • システム設定は全テナントに影響します

  • 一部の機能は仮想ホストに対応していない場合があります

参考情報