> ## 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.

# Einfache Selbst-Hosting- und On-Premises-Optionen

> Erkunden Sie die Selbst-Hosting- und On-Premises-Bereitstellungsmodelle von Kameleoon, vom Hosting der Anwendungsdatei bis zur vollstaendigen Plattform-Eigenstaendigkeit.

Kameleoon verwendet typischerweise ein Software-as-a-Service-(SaaS)-Modell. In diesem Modell hostet Kameleoon Kundendaten (wie Experimente, Personalisierungen und Konten) auf einer gemeinsamen Plattform. Kameleoon verwendet (Stand 2023) etwa 150 physische Server zur Unterstuetzung funktionaler Features, darunter Skript-Hosting, Datenerhebung, Speicherung und Analyseberichte. Kameleoon teilt Daten auf gemeinsamen Servern fuer alle Kunden und wahrt eine logische Trennung zwischen den Kundendaten. Der Anwendungscode implementiert Einschraenkungen, um zu verhindern, dass Kunden auf die Daten anderer Kunden zugreifen.

Kameleoon gruppiert Kunden basierend auf ihrem geografischen Standort (Land) in Cluster. Beispielsweise teilen sich franzoesische Kunden Daten im franzoesischen Datencluster, waehrend deutsche Kunden Daten in den deutschen Clustern teilen. Kameleoon hostet den Cluster eines Landes immer physisch in einem Rechenzentrum auf dem Boden dieses Landes, um die Vertraulichkeit der Daten und die Einhaltung regionaler Datenschutzgesetze zu gewaehrleisten. Auch im standardmaessigen SaaS-Modell hostet Kameleoon die auf Ihrer Website gesammelten Daten in Ihrem Land und befolgt lokale Gesetze.

Kunden waehlen Selbst-Hosting oder den On-Premises-Modus in der Regel aus Gruenden der Leistung, Datenvertraulichkeit oder Sicherheit. Kameleoon unterstuetzt das On-Premises-Modell vollstaendig und bietet drei Selbst-Hosting-Optionen an. Die erste Option ermoeglicht es Ihnen, die [kritische Kameleoon-Anwendungsdatei zu hosten](#application-file--public-resources-self-hosting) (und optional oeffentliche Ressourcen wie Bilder) auf Ihren eigenen Servern oder CDN. Diese Option erfordert 2-3 Tage zur Einrichtung. Die zweite Option erfordert das [Einrichten eines dedizierten Datenspeicher-Clusters](#dedizierte-cluster-fuer-die-datenspeicherung) und dauert 1-2 Wochen. Die dritte Option bietet eine [vollstaendige On-Premises-Konfiguration](#full-on-premises-model-separated-back-office-data-collection-and-storage-cluster-and-application-file-hosting), bei der Sie absolut alles auf dedizierten Servern hosten. Diese Einrichtung dauert typischerweise 1-2 Monate.

## Selbst-Hosting der Anwendungsdatei und oeffentlicher Ressourcen

Die einfachste On-Premises-Option ermoeglicht es Ihnen, die Anwendungsdatei selbst zu hosten. Sie koennen die Kameleoon-Anwendungsdatei sicher auf dem Kameleoon-CDN (Standard, SaaS-Einrichtung) oder auf Ihren eigenen Servern oder CDN hosten. Stellen Sie die Konfigurationsoption im Kameleoon-Backoffice im Bereich Website-Einrichtung ein. Sie koennen aus drei Werten waehlen: kein Selbst-Hosting, nur die Anwendungsdatei selbst hosten, nur oeffentliche Ressourcen selbst hosten oder vollstaendiges Selbst-Hosting (sowohl Anwendungsdatei als auch Bilder). Lesen Sie die Leitfaeden zum Selbst-Hosting mit [Cloudflare CDN](./application-file-self-hosting-with-cloudflare-cdn) oder [Fastly CDN](./application-file-self-hosting-with-fastly-cdn).

<Note>
  Geben Sie zusaetzlich zur Auswahl der richtigen Selbst-Hosting-Option die geplante Hosting-URL im Textfeld an. Kameleoon verwendet diese URL, um ein korrektes Installations-Skript zu erzeugen und Bilder selbst zu hosten ([siehe Details unten](#images-self-hosting)).
</Note>

### Selbst-Hosting der Anwendungsdatei

<Important>
  Kameleoon hat das veraltete `kameleoon.js` in allen Implementierungs-Snippets durch `engine.js` ersetzt. Kameleoon wird `kameleoon.js` nach dem **1. Juni 2026** nicht mehr unterstuetzen. Nach diesem Datum funktionieren alle Kampagnen auf Websites, die weiterhin auf `kameleoon.js` verweisen, nicht mehr. Aktualisieren Sie Ihr Implementierungs-Snippet entsprechend.
</Important>

Das Hosten der Kameleoon-Anwendungsdatei auf Ihren eigenen Servern kann einen kleinen Leistungsschub bieten, indem die zusaetzliche DNS-Abfrage und der SSL-Handshake entfallen, die das Kameleoon-CDN erfordert. Sie koennen sich auch aus Sicherheitsgruenden fuer das Selbst-Hosting entscheiden. Wenn Sie die Anwendungsdatei von Ihren eigenen Servern bereitstellen, koennen Sie die Einhaltung interner Sicherheitsrichtlinien sicherstellen und die Sicherheit der Hosting-Server direkt verwalten.

Um die Kameleoon-Anwendungsdatei selbst zu hosten, befolgen Sie diese beiden Schritte:

1. Geben Sie die Hosting-URL fuer die Anwendungsdatei im Installations-Tag an. Dies fuehrt zu einem leicht modifizierten Installations-Tag im Vergleich zu den Standard-Tags.

Wenn Sie beispielsweise die Methode [Asynchrones Laden mit Anti-Flicker](../implementation-and-deployment/standard-implementation#asynchrones-tag-ohne-anti-flicker) verwenden, ist die Kameleoon-Anwendungsdatei standardmaessig auf `//SITE_CODE.kameleoon.io/engine.js`. Aendern Sie diese URL im Installations-Tag in Ihre eigene URL (z. B. `https://www.customerdomain.com/resources/scripts/engine.js`).

2. Implementieren Sie eine Synchronisation zwischen der Datei auf Ihren Servern oder Ihrem CDN und der Originaldatei, die von der Kameleoon-Plattform generiert wird. Dieser Schritt ist obligatorisch, da die Anwendungsdatei dynamisch ist; ihr Inhalt aendert sich jedes Mal, wenn sich der Status eines Experiments oder einer Personalisierung auf der Plattform aendert oder wenn Sie die Konfiguration aendern.

Die geeignete Synchronisationsmethode haengt von Ihrer Einrichtung ab. CDNs bieten eigene Schnittstellen fuer diese Konfiguration. Verwenden Sie fuer Standard-Webhosting auf HTTP-Servern wie nginx oder Apache einen einfachen **Cron-Job**, der einen `wget`-Befehl zum Abrufen der Datei ausfuehrt. Fuehren Sie diesen Job alle 5 Minuten aus.

Sobald Sie diese Schritte abgeschlossen haben, koennen Sie die Kameleoon-Plattform mit einer selbst gehosteten Anwendungsdatei verwenden.

<Note>
  Sie koennen einen Hash des Inhalts der Originaldatei ueber die [Automation API](../../apis/automation-api-rest/get-started/kameloon-application-file-integrity) abrufen. Verwenden Sie dies, um zu pruefen, ob die kopierte Datei mit dem Original uebereinstimmt, oder um die Synchronisation nur dann auszuloesen, wenn sich der Inhalt aendert.
</Note>

Das folgende Beispiel enthaelt ein einsatzbereites Installations-Tag und Synchronisationsbefehle.

#### Beispiel: Anweisungen fuer das Selbst-Hosting der Kameleoon-Anwendungsdatei

```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>
```

Im obigen Snippet verwendet die Skriptquelle die URL des Kunden: `//www.customerdomain.com/resources/scripts/engine.js`. Unten finden Sie Beispiele fuer Synchronisationsbefehle.

```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>
  Die Domains der Kameleoon-Skripte variieren je nach Projekt. Projekte verwenden je nach Erstellungsdatum entweder `kameleoon.eu` oder `kameleoon.io`. Verwenden Sie die in der Kameleoon App fuer Ihr Projekt angezeigte Domain.
</Note>

Wenn Sie [vereinheitlichte Sitzungsdaten ueber Subdomains](../technical-concepts/unify-session-data-storage-across-subdomains) verwenden, muessen Sie zusaetzlich ein statisches iFrame selbst hosten (`https://www.customerdomain.com/path/to/kameleoon-iframe.html`). Lesen Sie die Dokumentation [Sitzungsdaten ueber Subdomains vereinheitlichen](../technical-concepts/unify-session-data-storage-across-subdomains) fuer Details.

### Selbst-Hosting von Bildern

Sie koennen auch Bilder, die ueber die Kameleoon-Plattform hochgeladen wurden, selbst hosten. Wenn Sie diese Option waehlen und eine Bild-URL angeben, verwenden die fuer hochgeladene Bilder generierten URLs Ihren Server oder Ihr CDN. Der Standard-URL-Pfad fuer hochgeladene Bilder ist `SITE_CODE.kameleoon.io/images/`. Das CDN von Kameleoon stellt diese Ressourcen bereit. Wenn Sie einen anderen Pfad angeben, z. B. `https://server.mydomain.com/path/resources/images/`, muessen Sie Ihr CDN so konfigurieren, dass `/path/resources/images/` in `/images/` umgeschrieben wird. Wenn Sie keinen bestimmten Pfad benoetigen, verwenden Sie den Standardpfad: `https://server.mydomain.com/images/`.

Sie muessen ausserdem einen Synchronisationsmechanismus fuer das Selbst-Hosting von Bildern verwenden. Dieser Prozess ist komplexer als die Synchronisierung einer einzelnen Datei, da Sie mehrere Dateien beruecksichtigen muessen und die genauen Namen und URLs hochgeladener Bilder nicht im Voraus kennen koennen.

Verwenden Sie das Selbst-Hosting von Bildern nur ueber ein CDN, das einen eingebauten Replikationsmechanismus bietet. Stellen Sie Ihr CDN so ein, dass Ressourcen von der Origin-URL `SITE_CODE.kameleoon.io/images/` bereitgestellt werden.

<Note>
  Die Domains der Kameleoon-Skripte variieren je nach Projekt. Projekte verwenden je nach Erstellungsdatum entweder `kameleoon.eu` oder `kameleoon.io`. Verwenden Sie die in der Kameleoon App fuer Ihr Projekt angezeigte Domain.
</Note>

## Dedizierte Cluster fuer die Datenspeicherung

Ein separates Cluster fuer die Datenspeicherung trennt die fuer Besucher auf Ihrer Website gesammelten Daten physisch von anderen Kameleoon-Nutzern. Diese Daten befinden sich auf dedizierten, separaten Servern und bieten die folgenden Vorteile:

* **Sicherheit**: Die physische Trennung bietet ein hoeheres Sicherheitsniveau als die logische Trennung.
* **Leistung**: Dedizierte Server gewaehrleisten optimale Geschwindigkeit fuer Speicherung und Operationen.
* **Zugriff auf Rohdaten**: Kameleoon autorisiert Low-Level-Zugriff auf die zugrunde liegenden Datenbanken (hauptsaechlich ClickHouse), sodass Ihre Data Scientists benutzerdefinierte Abfragen ausfuehren koennen.

Die Einrichtung eines dedizierten Datenspeicher-Clusters erfordert die Installation mehrerer Open-Source-Datenbanksysteme. Kameleoon verwendet vier Haupttechnologien: Kafka, HDFS und ClickHouse (obligatorisch) und Cassandra (je nach Modulnutzung).

1. **Kafka** (obligatorisch): Produzenten senden alle Datenerhebungsereignisse an Kafka-Topics, sodass sie ETL-Anwendungen zur Verfuegung stehen.
2. **Hadoop File System** (obligatorisch): Kameleoon speichert alle Datenerhebungsereignisse in HDFS. Kameleoon rekonstruiert Besuche aus diesen Rohdaten zur Verwendung in anderen skalierbaren Datenbanken. HDFS dient als primaerer Datenspeicher und als Single Source of Truth.
3. **ClickHouse** (obligatorisch): ClickHouse ist die OLAP-Engine, die Kameleoon zum Erstellen von Analyseberichten verwendet. Sie koennen benutzerdefinierte Abfragen fuer erweiterte Analysen ausfuehren.
4. **Cassandra** (erforderlich fuer Personalisierung oder geraeteuebergreifende Abstimmung): Kameleoon verwendet Cassandra fuer Machine-Learning-Modelle und die geraeteuebergreifende Verlaufsabstimmung.

<Note>
  Die Server-Einrichtung und -Konfiguration wird in der Regel von erfahrenen Kameleoon-Ingenieuren durchgefuehrt. Kameleoon kann diese Vorgaenge in Ihrem Rechenzentrum (Server, die Sie besitzen und betreiben) oder in den Rechenzentren von Kameleoon durchfuehren.
</Note>

Pruefen Sie die Server-Anforderungen fuer das dedizierte Datencluster.

<Warning>
  Die Server muessen physische Bare-Metal-Server sein. Kameleoon unterstuetzt derzeit keine virtualisierten Server.
</Warning>

| Komponente | Version | Mindestserver | Optimale Server | Empfohlener RAM | Speichertyp                  | Bemerkungen                         |
| :--------- | :------ | :------------ | :-------------- | :-------------- | :--------------------------- | :---------------------------------- |
| Kafka      | 2.3.1   | 2             | 2               | 32 GB           | Drehende Festplatten (8 TB+) | Confluent v5.3.1                    |
| HDFS       | 2.9.1   | 2             | 2               | 32 GB           | Drehende Festplatten (8 TB+) | Erfordert 2 Server fuer Replikation |
| ClickHouse | 22.3.3  | 1             | 2               | 64 GB           | SSD empfohlen                |                                     |
| Cassandra  | 4.0.1   | 1             | 2               | 32 GB           | SSD obligatorisch            |                                     |

Kameleoon empfiehlt die neueste Rocky-Linux-Distribution fuer alle Komponenten.

<Note>
  Verwenden Sie nur fuer A/B-Tests eine Mindestkonfiguration von 5 Servern (6 empfohlen). Verwenden Sie fuer Personalisierung eine Mindestkonfiguration von 6 Servern (8 empfohlen).
</Note>

## Vollstaendiges On-Premises-Modell (getrenntes Backoffice, Datenspeicher-Cluster und Hosting der Anwendungsdatei)

In diesem Szenario hosten Sie alle Komponenten und Funktionen der Kameleoon-Plattform in Ihrem IT-Oekosystem. Dies ermoeglicht Ihnen die Implementierung benutzerdefinierter Sicherheitsrichtlinien, wie z. B. die Beschraenkung des Zugriffs auf Firmenarbeitsplaetze ueber VPN.

Die Backoffice-Anwendung laeuft auf einem **Tomcat-JEE-Server** und nutzt mehrere eigenstaendige Java-Anwendungen, die ueber **ActiveMQ** kommunizieren. Kameleoon verwendet **MySQL** als relationale Datenbank fuer das Backoffice und **nginx** als hochleistungsfaehigen HTTP-Server zum Sammeln von Datenereignissen von Browsern.

Pruefen Sie die Server-Anforderungen fuer die dedizierte Datenpipeline und das Backoffice:

| Komponente          | Version           | Mindestserver | Optimale Server | Empfohlener RAM | Speichertyp          | Bemerkungen                                      |
| :------------------ | :---------------- | :------------ | :-------------- | :-------------- | :------------------- | :----------------------------------------------- |
| JDK/Tomcat/ActiveMQ | 1.8/8.0.47/5.14.5 | 1             | 1               | 32 GB           | SSD empfohlen        | Eigenstaendige Java-Anwendungen sind kolokiert   |
| MySQL               | 8.0.21            | 1             | 1               | 32 GB           | SSD empfohlen        |                                                  |
| nginx               | 1.20.1            | 1             | 2               | 32 GB           | Drehende Festplatten | Enthaelt proprietaere Java-Log-Parsing-Anwendung |

Kameleoon empfiehlt die neueste Rocky-Linux-Distribution fuer alle Komponenten. Kameleoon stellt die Backoffice-Anwendung als WAR-Datei und andere Module als JAR-Dateien bereit.

<Note>
  Sie koennen den MySQL-Server mit dem Tomcat-JEE-Server kolokieren, aber Kameleoon empfiehlt, eine Kolokation aus Sicherheits- und Leistungsgruenden zu vermeiden, sofern nicht ausdruecklich anders angegeben.
</Note>

<Note>
  Verwenden Sie fuer A/B-Tests eine Mindestkonfiguration von 9 Servern (11 empfohlen). Verwenden Sie fuer Personalisierung eine Mindestkonfiguration von 10 Servern (13 empfohlen). Berechnen Sie diese Zahlen, indem Sie die Tabellen addieren und einen Server fuer das Hosting der Anwendungsdatei hinzufuegen (einen abziehen, wenn Sie ein CDN verwenden).
</Note>
