On-Prem: Hosting Guide

Hinweis:
Dieser Artikel bezieht sich auf die aktuelle On-Premises Installation von Haiilo.

1. Einleitung

Willkommen in eurer neuen Digitalen Heimat: Haiilo!

Dieses Dokument gibt euch als Systemadministratoren einige grundlegende Informationen über das eigene Hosting von Haiilo, die Systemanforderungen, Docker selbst und wie wir Anwendungsvirtualisierung einsetzen. Außerdem erhaltet ihr einige einführende Informationen zu Backups, Updates, Benutzerverzeichnis, Benutzerauthentifizierung und unserer REST-API.

Alle werden mit hilfreichen Links zu unserer Wissensdatenbank und Dokumentation versorgt.

Wir hoffen, alle eure Fragen zum Hosting von Haiilo und der Funktionsweise dahinter beantworten zu können und empfehlen euch, Notizen zu machen, wenn etwas nicht klar ist.

2. Systemanforderungen 

2.1 Anforderungen an die Server-Software

Haiilo kann überall eingesetzt werden, wo Docker Compose lauffähig ist. Derzeit ist dies Linux und Mac OS, aber wir empfehlen nur die Linux-Distributionen. Wir haben gute Erfahrungen mit Ubuntu, Debian, RedHat, SLES und CentOS gemacht.

Windows Server ist aufgrund fehlender Komponenten nicht möglich. 

2.2 Anforderungen an die Server-Hardware

Unsere Mindestanforderungen an die Hardware für einen einzelnen Host basieren auf der Anzahl der regelmäßigen Benutzer auf eurem Haiilo. 

Bildschirmfoto_2019-09-16_um_11.48.19.png

Wenn ihr den optionalen Metriken-Stack (start-advanced.sh) ausführen möchten, um Daten wie CPU-Last, RAM-Nutzung und Backend-Einblicke zu sammeln, benötigen ihr 10 GB zusätzlichen RAM und 2 zusätzliche Kerne. Weitere Informationen zu unserem Metriken Stack findet ihr im Abschnitt 3.4 Third-Party Container.

2.3 Anforderungen an den Client-Browser 

Bildschirmfoto_2020-04-24_um_16.43.46.png

*IE11 wird nicht unterstützt. Wir empfehlen einen modernen Browser für eine gute Benutzererfahrung. 
**Die Unterstützung von Microsoft Edge, älter als v80, wird in zukünftigen Versionen entfernt.

Das ist alles, was euer Client braucht.

3. Docker

1024px-Docker__container_engine__logo.svg.png

 

Eine andere Art der Virtualisierung

Docker wird verwendet, um Anwendungspakete namens "Container" auszuführen. In einem typischen exemplarischen Anwendungsfall betreibt ein Container einen Webserver und eine Webanwendung, während ein zweiter Container einen Datenbankserver betreibt, der von der Webanwendung verwendet wird. Container sind voneinander isoliert und bündeln ihre eigenen Tools, Bibliotheken und Konfigurationsdateien und können über klar definierte Kanäle miteinander kommunizieren. Alle Container werden von einem einzigen Betriebssystemkern betrieben und sind damit leichter als virtuelle Maschinen, es gibt eher eine Virtualisierung von nur einer Anwendung als von einem ganzen Betriebssystem. Container werden aus "Images" erstellt, die ihren genauen Inhalt angeben. Images werden oft durch Kombination und Modifikation von "Base-Images" erstellt, die aus Repositorien heruntergeladen wurden.

Haiilo ist eine Java-basierte Anwendung, die als Docker Container bereit gestellt wird und zusammen mit anderen containerisierten Anwendungen wie PostgreSQL (Datenbank) und MongoDB (Filestore) mit Docker-Compose inszeniert wird.

Hinweis:
Mehr zu Docker erfahrt ihr in der offiziellen Docker Dokumentation 

3.1 Docker-Compose

Ein Werkzeug zur Definition und Ausführung von Multi-Container-Docker-Anwendungen

Mit Compose verwendet ihr eine YAML-Datei, um die Dienste eurer Anwendung zu konfigurieren. Anschließend erstellt und startet ihr mit einem einzigen Befehl alle Dienste aus eurer Konfiguration.

Mit jedem Release stellen wir eine vorkonfigurierte YAML-Datei mit dem Namen "docker-compose.yml" zur Verfügung, die eine Art Vorkonfiguration für unsere Orchestrierung von Docker-Containern ist.
Die Compose-Datei enthält alle Konfigurationsdetails wie öffentliche Ports, virtuelle Netzwerkeinstellungen, Containerlinks- damit sie miteinander kommunizieren können, Volume Mounts und nicht zu vergessen die Umgebungsparameter für die Dimensionierung und Konfiguration von tieferen Komponenten wie der Backend JVM.
Um euch einen Eindruck von dieser Technologie zu vermitteln, zeigen wir euch den Load Balancer-Teil unserer Compose-Datei:

Bildschirmfoto_2019-09-16_um_11.49.04.png

  • services: Enthält alle unsere Container, die wir orchestrieren wollen.
  • coyo-lb: Ist der Hostname des Containers, so dass wir diese Abkürzung z.B. beim Verlinken verwenden können.
  • image: Definiert, aus welchem Image der Container erstellt wird. Ist das Image lokal nicht vorhanden, zieht Docker es sich aus dem Docker Hub.
  • environment: Hier kommen eure spezifischen Konfigurationen zum Einsatz. Wir liefern eine zusätzliche Datei, in der alle Parameter mit Werten gefüllt werden.
  • links: Definiert, mit welchen Containern dieser Container über alle Ports innerhalb des virtuellen Docker-Netzwerks kommunizieren kann.
  • volumes: Definiert Mounts in den virtuellen Docker-Container. Diese sind wichtig, da alle Daten beim Entfernen eines Containers verloren gehen, außer wenn einige Volumes vom Host in den Container einhängt werden.
  • ports: Definition der offenen Ports. In diesem Fall ist dies also unser Load Balancer und wir wollen, dass er den gesamten HTTP-Verkehr verarbeitet, so dass die Ports 80 und 443 geöffnet werden. Die anderen Ports sind für andere öffentlich zugängliche Dienste bestimmt.

3.2 Docker Netzwerk

Docker erstellt standardmäßig eine virtuelle Netzwerkbrücke und weist den Containern dynamisch IP-Adressen zu. Dieses Netzwerk ist von außerhalb des Hosts nicht erreichbar. Um Container öffentlich zugänglich zu machen, müsst ihr ein Port Mapping konfigurieren. Mit unserer Compose-Datei erstellt Docker-Compose ein virtuelles Netzwerk namens "coyo-default", in dem nur der Load balancer veröffentlicht wird. Ohne weitere Konfiguration ist der IP-Bereich für alle Container 172.18.0.0.0.0/24. 

Wie Ihr das virtuelle Netzwerk von Haiilo selbst konfigurieren könnt, erfahrt Ihr in diesem Artikel.

Und Wenn ihr Haiilo mit einem HTTP(S)-Proxy betreiben wollt, schaut in diesen Artikel

Load balancer

Alle eingehenden Verbindungen gehen über den Haiilo-Loadbalancer. Dieser erzwingt eine SSL-Verbindung, sodass ihr ein gültiges Zertifikat benötigt, um Haiilo in unserem Standard-Setup auszuführen. Es ist aber möglich dieses neu zu konfigurieren, um den Proxy eures Unternehmens zu verwenden. Wenn ihr die Konfiguration unseres Haiilo Loadbalancer (Haproxy) ändern möchtet, müsst ihr die .conf-Datei beibehalten und Anpassungen vornehmen.

Neben den HTTP(S)-Ports 80 und 443 akzeptiert der Loadbalancer Verbindungen zu den folgenden Ports:

5601
Kibana: Hier findet ihr die Protokolle aller Container.

5602
Grafana: Dort findet ihr Metriken wie CPU und Speicherauslastung aller Container.

8083
Backup: Hier könnt ihr die Backups über eine REST-API erstellen und wiederherstellen.

15672
RabbitMQ: Dort findet ihr Metriken über den Service.

Hinweis:
Anderen Dienste wie Datenbank und Filestore sind von außerhalb des Hosts nicht zugänglich.

3.3 Haiilo Container 

Haiilo stack

Diese Container sind das Herzstück von Haiilo. Es besteht aus Load Balancer, Backend, Frontend, Push, Dokumentation und Backup.

Load Balancer 
verteilt den Netzwerk- und Anwendungsverkehr. Der Load Balancer ist der einzige öffentliche Container.

Backend
ist der Kern, der die Applikation und die Datenbanken steuert; es ist die interne Logik und Aufsicht des Programms, es ist alles, was der Benutzer nicht sehen kann.

Frontend
enthält den sichtbaren Teil von Haiilo.

Push
verarbeitet Push-Mitteilungen. Hierfür benötigt der Server Zugang zum öffentlichen Internet.

Docs
enthält die Dokumentation, die Sie finden, wenn Sie in Ihrem Haiilo auf "Hilfe" klicken.

Backup
erstellt Sicherungen eurer Haiilo Plattform. Mehr dazu hier

i18n
stellt verschiedene Sprachen zur verfügung.

Gateway
ist ein API-Gateway, welches den Traffic an die Services leitet.

3.4 Third-Party Container

Abhängigkeiten

Dies sind die obligatorischen Abhängigkeiten, um Haiilo auszuführen.

PostgreSQL
ist die Datenbank zur Speicherung aller Inhalte von Haiilo mit Ausnahme von Dateien.

MongoDB
speichert alle Dateien.

Elasticsearch
ist eine Volltextsuchmaschine, die wir für die Suche in Haiilo nutzen.

RabbitMQ
ist ein Nachrichtenbroker. Ihr findet das Webinterface hinter dem Port 15672.

Redis
ist eine In-Memory-Datenbank, die wir für das Session-Caching verwenden. 

Tika
ist ein Toolkit um Metadaten und Inhalte aus verschiedenen Dateitypen zu extrahieren. Wir verwenden Tika damit Dokumente über Ihren Inhalt auch über die Suche gefunden werden können. 

Service-Discovery /Eureka
ist ein Service Registry, an dem sich Services, zb das Backend (-Cluster) registrieren.

Logging Stack (ELK)

ELK alias Elastic Stack wird am häufigsten in der Protokollanalyse in IT-Umgebungen eingesetzt und besteht aus drei verschiedenen Open-Source-Projekten. Mit diesem Stack könnt ihr eure Protokolldateien aller Container mit einem Webinterface einfach durchsuchen:

Elasticsearch
ist eine Such- und Analysemaschine für alle Arten von Daten

Logstash
ist ein Log-Pipeline-Tool, das Eingaben aus verschiedenen Quellen entgegennimmt, verschiedene Transformationen durchführt und die Daten in verschiedene Ziele exportiert.

Kibana
ist ein Visualisierungstool, das auf Elasticsearch aufbaut. Ihr könnt durch alle Protokolle aller Container blättern. Hier findet Ihr hilfreiche Informationen für die Fehlersuche. Ihr findet das Webinterface hinter dem Port 5601.

Metriken Stack (PROM) - Optional

Überwacht euer Haiilo mit dem PROM-Stack. Da dieser Stapel zusätzliche RAM-Ressourcen benötigt und ihr bereits ein Überwachungstool in eurem Unternehmen verwenden könntet, ist dieser Stack optional und kann mit dem erweiterten Startskript (start-advanced.sh) gestartet werden. Das findet ihr in jedem unserer Releases.
Interessante Kennzahlen über euer Haiilo findet ihr in unseren vorkonfigurierten Grafana-Dashboards, bspw. CPU- und Speicherauslastung der einzelnen Container und viele weitere detaillierte Informationen.

Prometheus
ist eine Datenbank, die für die schnelle, hochverfügbare Speicherung und Abfrage von Zeitreihendaten in Bereichen wie Betriebsüberwachung und Anwendungsmetriken optimiert ist.

Grafana
ist ein Open-Source Software, universelles Dashboard und Graph Composer, der als Webanwendung läuft. Ihr findet das Webinterface hinter dem Port 5602.

cAdvisor
analysiert den Ressourcenverbrauch und die Leistungsmerkmale von laufenden Containern.

Exporter
sammeln in mehreren Containern verschiedene Metriken. 

4. Haiilo Home-Verzeichnis

Jedes Haiilo Release enthält ein Zip-Paket mit Start-/Stopp-Skripten der bereits erwähnten Compose-Datei und der wichtigen .env-Datei, in der all eure Umgebungsparameter mit Standardwerten eingestellt sind.

start.sh
liest die .env und führt den Befehl "docker-compose up" aus, um alle notwendigen Container zu starten, die Haiilo zum Ausführen benötigt.

start-advanced.sh
führt das Skript "start.sh" aus und startet zusätzlich den Metriken-Stack mit Grafana.

stop.sh
führt den Befehl "docker-compose stop" aus, um alle laufenden Container zu stoppen.

docker-compose.yml
Diese Datei definiert das Setup und die Version von Haiilo. Alle Variablen, die ihr konfigurieren müsst, haben wir in die .env-Datei ausgelagert, sodass ihr hier normalerweise keine Anpassungen vornehmen müsst. In Kapitel 3.1 findet Ihr weitere Informationen.

.env
 enthält alle konfigurierbaren Variablen, die für den Betrieb von Haiilo notwendig sind. Um Haiilo zu konfigurieren, müsst ihr die .env-Datei bearbeiten, in der ihr die Standardwerte mit eurer individuellen Konfiguration überschreibt. 

.services (deprecated ab v32)
ähnlich wie in der .env findet Ihr hier zusätzliche Variablen zum Starten einiger Services.

coyo-data/
ist das Verzeichnis, was eure komplette Haiilo-Installation beinhaltet. Dort findet sich das Backend-Log, die Datenbanken und eure Backups. Ihr könnt den Ort des Verzeichnisses in der .env Datei anpassen. 

4.1 Update

Wenn ihr auf eine neue Version von Haiilo aktualisieren möchten, müsst ihr nur das Zip-Paket herunterladen.
Erstellt einfach ein Backup (Anleitung), stoppt Haiilo mit unserem mitgelieferten stop.sh-Skript und entpackt sowie ersetzt alle oben genannten Dateien. Es wird dringend empfohlen, die .env-Datei auf neue Parameter zu überprüfen, die in der .env-Datei angepasst werden müssen. Die Änderungen der Parameter, die wir mit jedem Release vorgenommen haben, findet ihr in unseren Release Notes.  

5. Benutzerverwaltung und Authentifizierung

Benutzerverwaltung

Wenn ihr Haiilo zum ersten Mal startet, wird ein lokales Benutzerverzeichnis verwendet. Wenn ihr ein externes Benutzerverzeichnis hinzufügen möchtet, ist das kein Problem:

Haiilo unterstützt das Protokoll LDAP(S) für die Benutzerprovisionierung, sodass Verzeichnisse wie MS Active Directory, MS Azure AD und OpenLDAP problemlos zu integrieren sind.

Hinweis:
Hier findet ihr die Anleitung

Authentifizierung

Neben der lokalen Authentifizierung mit Benutzern des lokalen Benutzerverzeichnisses, authentifizieren sich Benutzer von externen Benutzerverzeichnissen gegenüber eurem Haiilo über LDAP(S) und ihr könnt auch andere Authentifizierungsanbieter hinzufügen.

Haiilo unterstützt die Authentifizierung über SAML 2.0 und OpenID mit seinem OAuth 2.0-Standard, sodass ihr MS Office SSO, MS ADFS, Google, Facebook, LinkedIn und so weiter problemlos integrieren könnt.

Hinweis:
Eine Anleitung findet ihr hier

6. REST API

Unsere REST-API stellt euch einige zusätzliche Verwaltungsfunktionen zur Verfügung, wie z. B. die Neuindizierung der Suchindizes oder den Status des Servers. Außerdem ist es möglich, alle Funktionen zu nutzen, die Haiilo im Web anbietet sowie die Profilfelder der Benutzer anzupassen.

Hinweis:
Mehr Informationen erhaltet ihr in unserer Dokumentation.

War dieser Beitrag hilfreich?