> ## Documentation Index
> Fetch the complete documentation index at: https://docs.kameleoon.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 簡易セルフホスティングとオンプレミスオプション

> アプリケーションファイルホスティングからプラットフォーム全体の所有まで、Kameleoonのセルフホスティングおよびオンプレミスデプロイメントモデルをご覧ください。

Kameleoonは通常、Software as a Service(SaaS)モデルを使用します。このモデルでは、Kameleoonは顧客データ(実験、パーソナライゼーション、アカウントなど)を共通のプラットフォームでホストします。Kameleoonは約150台の物理サーバー(2023年時点)を使用して、スクリプトホスティング、データ収集、ストレージ、分析レポートなどの機能をサポートしています。Kameleoonはすべての顧客の共通サーバーでデータを共有し、顧客データ間の論理的な分離を維持しています。アプリケーションコードは、顧客が他の顧客のデータにアクセスできないように制限を実装しています。

Kameleoonは地理的な場所(国)に基づいて顧客をクラスタにグループ化します。たとえば、フランスの顧客はフランスのデータクラスタ内でデータを共有し、ドイツの顧客はドイツのクラスタ内でデータを共有します。Kameleoonは常に、各国のクラスタを当該国のデータセンターに物理的にホストし、データの機密性と地域のデータプライバシー法令への準拠を確保しています。デフォルトのSaaSモデルでも、KameleoonはWebサイトから収集したデータを自国でホストし、現地法に従います。

顧客は通常、パフォーマンス、データ機密性、またはセキュリティ上の理由から、セルフホスティングまたはオンプレミスモードを選択します。Kameleoonはオンプレミスモデルを完全にサポートし、セルフホスティングに3つのオプションを提供しています。最初のオプションでは、重要な[Kameleoonアプリケーションファイル](#application-file--public-resources-self-hosting)(およびオプションで画像などのパブリックリソース)を自身のサーバーまたはCDNにホストできます。このオプションのセットアップには2~~3日かかります。2つ目のオプションでは、[専用データストレージクラスタの構築](#データストレージ用専用クラスタ)が必要で、1~~2週間かかります。3つ目のオプションは、すべてを専用サーバーにホストする[完全オンプレミス構成](#full-on-premises-model-separated-back-office-data-collection-and-storage-cluster-and-application-file-hosting)を提供します。このセットアップは通常1\~2か月かかります。

## アプリケーションファイル&パブリックリソースのセルフホスティング

最もシンプルなオンプレミスオプションでは、アプリケーションファイルをセルフホストできます。Kameleoonアプリケーションファイルは、Kameleoon CDN(デフォルト、SaaSセットアップ)または自身のサーバー/CDNに安全にホストできます。Kameleoonバックオフィスのウェブサイト設定セクションで構成オプションを設定します。次の3つの値から選択できます:セルフホスティングなし、アプリケーションファイルのみセルフホスト、パブリックリソースのみセルフホスト、または完全セルフホスティング(アプリケーションファイルと画像の両方)。[Cloudflare CDN](./application-file-self-hosting-with-cloudflare-cdn)または[Fastly CDN](./application-file-self-hosting-with-fastly-cdn)を使ったセルフホスティングのガイドを確認してください。

<Note>
  適切なセルフホスティングオプションを選択することに加えて、計画されているホスティングURLをテキストフィールドに入力してください。Kameleoonはこの URLを使って正しいインストールスクリプトを生成し、画像のセルフホスティングを行います([詳細は以下を参照](#images-self-hosting))。
</Note>

### アプリケーションファイルのセルフホスティング

<Important>
  Kameleoonは、すべての実装スニペットで非推奨の`kameleoon.js`を`engine.js`に置き換えました。Kameleoonは**2026年6月1日**以降、`kameleoon.js`をサポートしなくなります。この日付以降、`kameleoon.js`を参照しているWebサイトのキャンペーンは機能しなくなります。実装スニペットを適宜更新してください。
</Important>

Kameleoonアプリケーションファイルを自身のサーバーにホストすることで、Kameleoon CDNで必要な追加のDNSクエリとSSLハンドシェイクを排除し、わずかにパフォーマンス向上を得られます。セキュリティ上の理由でセルフホスティングを選択することもできます。アプリケーションファイルを自身のサーバーから配信することで、内部のセキュリティポリシーへの準拠を確保し、ホスティングサーバーのセキュリティを直接管理できます。

Kameleoonアプリケーションファイルをセルフホストするには、以下の2つのステップに従ってください。

1. インストールタグにアプリケーションファイルのホスティングURLを指定します。これにより、デフォルトのタグに比べてインストールタグが若干変更されます。

たとえば、[アンチフリッカー付き非同期ロード](../implementation-and-deployment/standard-implementation#アンチフリッカーなしの非同期タグ)方式を使用する場合、Kameleoonアプリケーションファイルはデフォルトで`//SITE_CODE.kameleoon.io/engine.js`になります。インストールタグ内のこのURLを自身のURL(例:`https://www.customerdomain.com/resources/scripts/engine.js`)に変更してください。

2. サーバー/CDN上のファイルと、Kameleoonプラットフォームが生成するオリジナルファイルとの同期を実装します。アプリケーションファイルは動的であるため、このステップは必須です。プラットフォーム上で実験やパーソナライゼーションのステータスが変更されたり、構成を変更したりするたびに内容が変わります。

適切な同期方法はセットアップに依存します。CDNはこの構成のための独自のインターフェースを提供します。nginxやApacheなどのHTTPサーバーでの標準的なWebホスティングでは、シンプルな**cronジョブ**を使用してファイルを取得する`wget`コマンドを実行します。このジョブを5分ごとに実行してください。

これらの手順を完了すると、セルフホストされたアプリケーションファイルでKameleoonプラットフォームを使用できます。

<Note>
  オリジナルファイルの内容のハッシュは[Automation API](../../apis/automation-api-rest/get-started/kameloon-application-file-integrity)経由で取得できます。これを使って、コピーされたファイルがオリジナルと一致するかを確認したり、内容が変更されたときにのみ同期をトリガーしたりできます。
</Note>

以下の例は、すぐに使用できるインストールタグと同期コマンドを示します。

#### 例:Kameleoonアプリケーションファイルのセルフホスティング手順

```html theme={null}
<script type="text/javascript">
  // Duration in milliseconds to wait while the Kameleoon application file is loaded
  var kameleoonLoadingTimeout = 750;

  var kameleoonQueue = kameleoonQueue || [];
  var kameleoonStartLoadTime = Date.now();
  if (! document.getElementById("kameleoonLoadingStyleSheet") && ! window.kameleoonDisplayPageTimeOut)
  {
    var kameleoonS = document.getElementsByTagName("script")[0];
    var kameleoonCc = "html::after { content: ''; position: fixed; inset: 0; background: #fff; z-index: 2147483647; }";
    var kameleoonStn = document.createElement("style");
    kameleoonStn.type = "text/css";
    kameleoonStn.id = "kameleoonLoadingStyleSheet";
    if (kameleoonStn.styleSheet)
    {
      kameleoonStn.styleSheet.cssText = kameleoonCc;
    }
    else
    {
      kameleoonS.appendChild(document.createTextNode(kameleoonCc));
    }
    kameleoonS.parentNode.insertBefore(kameleoonStn, kameleoonS);
    window.kameleoonDisplayPage = function(fromEngine)
    {
      if (!fromEngine)
      {
        window.kameleoonTimeout = true;
      }
      if (kameleoonStn.parentNode)
      {
        kameleoonStn.parentNode.removeChild(kameleoonStn);
      }
    };
    window.kameleoonDisplayPageTimeOut = window.setTimeout(window.kameleoonDisplayPage, kameleoonLoadingTimeout);
  }
</script>
<script type="text/javascript" src="//www.customerdomain.com/resources/scripts/engine.js" async="true"></script>
```

上記のスニペットでは、スクリプトソースは顧客のURL`//www.customerdomain.com/resources/scripts/engine.js`を使用しています。以下は同期コマンドの例です。

```html theme={null}
# wget command

wget https://SITE_CODE.kameleoon.io/engine.js -O /var/www/html/resources/scripts/engine.js -T 30 -t 3

# cron entry

*/5 * * * * wget https://SITE_CODE.kameleoon.io/engine.js -O /var/www/html/resources/scripts/engine.js -T 30 -t 3
```

<Note>
  Kameleoonスクリプトのドメインはプロジェクトごとに異なります。プロジェクトの作成日に応じて`kameleoon.eu`または`kameleoon.io`のいずれかが使用されます。プロジェクトのKameleoonアプリで表示されているドメインを使用してください。
</Note>

[サブドメイン間でのセッションデータ統合](../technical-concepts/unify-session-data-storage-across-subdomains)を使用する場合、追加の静的iFrame(`https://www.customerdomain.com/path/to/kameleoon-iframe.html`)もセルフホストする必要があります。詳細については[サブドメイン間でのセッションデータ統合](../technical-concepts/unify-session-data-storage-across-subdomains)のドキュメントを確認してください。

### 画像のセルフホスティング

Kameleoonプラットフォーム経由でアップロードした画像もセルフホストできます。このオプションを選択して画像URLを指定すると、アップロードされた画像の生成URLは自身のサーバーまたはCDNを使用します。アップロードされた画像の標準URLパスは`SITE_CODE.kameleoon.io/images/`です。KameleoonのCDNがこれらのリソースを配信します。`https://server.mydomain.com/path/resources/images/`のような別のパスを指定する場合は、CDNを構成して`/path/resources/images/`を`/images/`にリライトする必要があります。特定のパスが不要な場合は、標準パス`https://server.mydomain.com/images/`を使用してください。

画像セルフホスティング用に同期メカニズムも使用する必要があります。複数のファイルを考慮する必要があり、アップロードされる画像の正確な名前とURLを事前に知ることはできないため、このプロセスは単一ファイルの同期よりも複雑です。

組み込みのレプリケーションメカニズムを提供するCDN経由でのみ画像セルフホスティングを使用してください。CDNを`SITE_CODE.kameleoon.io/images/`オリジンURLからリソースを配信するように指定してください。

<Note>
  Kameleoonスクリプトのドメインはプロジェクトごとに異なります。プロジェクトの作成日に応じて`kameleoon.eu`または`kameleoon.io`のいずれかが使用されます。プロジェクトのKameleoonアプリで表示されているドメインを使用してください。
</Note>

## データストレージ用専用クラスタ

データストレージ用の別個のクラスタは、Webサイトの訪問者向けに収集されたデータを他のKameleoonユーザーから物理的に分離します。このデータは専用の独立したサーバーに保管され、次の利点があります。

* **セキュリティ**:物理的分離は、論理的分離よりも高いレベルのセキュリティを提供します。
* **パフォーマンス**:専用サーバーにより、ストレージと操作の最適な速度が確保されます。
* **生データアクセス**:Kameleoonは基盤となるデータベース(主にClickHouse)への低レベルアクセスを許可しており、データサイエンティストがカスタムクエリを実行できます。

専用データストレージクラスタの構築には、いくつかのオープンソースデータベースシステムのインストールが必要です。Kameleoonは4つの主要技術を使用します:Kafka、HDFS、ClickHouse(必須)、およびCassandra(モジュール使用に依存)。

1. **Kafka**(必須):プロデューサーがすべてのデータ収集イベントをKafkaトピックに送信し、ETLアプリケーションで利用できるようにします。
2. **Hadoop File System**(必須):Kameleoonはすべてのデータ収集イベントをHDFSに保管します。Kameleoonはこの生データから訪問を再構築し、他のスケーラブルなデータベースで使用します。HDFSは一次データストアおよび信頼できる情報源として機能します。
3. **ClickHouse**(必須):ClickHouseはKameleoonが分析レポートを作成するために使用するOLAPエンジンです。高度な分析のためにカスタムクエリを実行できます。
4. **Cassandra**(パーソナライゼーションまたはクロスデバイスリコンシリエーションに必須):KameleoonはCassandraを機械学習モデルとクロスデバイス履歴のリコンシリエーションに使用します。

<Note>
  サーバーのセットアップと構成は通常、経験豊富なKameleoonエンジニアが実施します。Kameleoonはこれらの作業を、自身のデータセンター(自社で所有・運用するサーバー)またはKameleoonのデータセンターで実施できます。
</Note>

専用データクラスタのサーバー要件を確認してください。

<Warning>
  サーバーは物理的なベアメタルサーバーである必要があります。Kameleoonは現在、仮想化サーバーをサポートしていません。
</Warning>

| コンポーネント    | バージョン  | 最小サーバー数 | 最適サーバー数 | 推奨RAM | ストレージタイプ        | 備考                     |
| :--------- | :----- | :------ | :------ | :---- | :-------------- | :--------------------- |
| Kafka      | 2.3.1  | 2       | 2       | 32 GB | スピニングディスク(8TB+) | Confluent v5.3.1       |
| HDFS       | 2.9.1  | 2       | 2       | 32 GB | スピニングディスク(8TB+) | レプリケーションのために2台のサーバーが必要 |
| ClickHouse | 22.3.3 | 1       | 2       | 64 GB | SSD推奨           |                        |
| Cassandra  | 4.0.1  | 1       | 2       | 32 GB | SSD必須           |                        |

Kameleoonは、すべてのコンポーネントに最新のRocky Linuxディストリビューションを推奨します。

<Note>
  A/Bテストのみの場合、最小構成は5台のサーバー(推奨6台)です。パーソナライゼーションの場合、最小構成は6台のサーバー(推奨8台)です。
</Note>

## 完全オンプレミスモデル(分離されたバックオフィス、データストレージクラスタ、アプリケーションファイルホスティング)

このシナリオでは、Kameleoonプラットフォームのすべてのコンポーネントおよびすべての機能をITエコシステム内にホストします。これにより、VPN経由で企業ワークステーションへのアクセスを制限するなど、カスタムセキュリティポリシーを実装できます。

バックオフィスアプリケーションは**Tomcat JEEサーバー**で実行され、**ActiveMQ**を介して通信するいくつかのスタンドアロンJavaアプリケーションを使用します。Kameleoonは、バックオフィス用のリレーショナルデータベースとして**MySQL**を使用し、ブラウザからのデータイベントを収集するための高性能HTTPサーバーとして**nginx**を使用します。

専用データパイプラインおよびバックオフィスのサーバー要件を確認してください。

| コンポーネント             | バージョン             | 最小サーバー数 | 最適サーバー数 | 推奨RAM | ストレージタイプ  | 備考                            |
| :------------------ | :---------------- | :------ | :------ | :---- | :-------- | :---------------------------- |
| JDK/Tomcat/ActiveMQ | 1.8/8.0.47/5.14.5 | 1       | 1       | 32 GB | SSD推奨     | スタンドアロンJavaアプリケーションは同一サーバーに配置 |
| MySQL               | 8.0.21            | 1       | 1       | 32 GB | SSD推奨     |                               |
| nginx               | 1.20.1            | 1       | 2       | 32 GB | スピニングディスク | 独自のJavaログ解析アプリケーションを含む        |

Kameleoonは、すべてのコンポーネントに最新のRocky Linuxディストリビューションを推奨します。Kameleoonは、バックオフィスアプリケーションをWARファイルとして、他のモジュールをJARファイルとして提供します。

<Note>
  MySQLサーバーはTomcat JEEサーバーと同一サーバーに配置できますが、Kameleoonは、セキュリティとパフォーマンス上の理由から、明示されている場合を除き同一配置を避けることを推奨します。
</Note>

<Note>
  A/Bテストの場合、最小構成は9台のサーバー(推奨11台)です。パーソナライゼーションの場合、最小構成は10台のサーバー(推奨13台)です。これらの数を計算するには、表を合計し、アプリケーションファイルホスティング用に1台追加します(CDNを使用する場合は1台減算)。
</Note>
