Setup der B2B-IndexManagement-UI in Docker

Funktionalität

Mit Hilfe des IndexManagements kann ein Admin lesend auf B2B-Searchlayer-Indexe zugreifen.

Architektur

Das Feature wurde entkoppelt und benötigt nun keinen Tomcat mehr. Stattdessen gliedert es sich in eine B2B-IndexManagement-UI & einen B2B-IndexManagement-Service. Die UI greift auf den Service zu. Der Service greift auf die bestehenden Indexe auf dem Dateisystem zu.

Beide Applikationen sind über Keycloak abgesichert.

Im Rahmen dieser Dokumentation wird beschrieben, wie IndexManagement-UI & IndexManagement-Service zu installieren sind.

Voraussetzungen

  • Docker einsatzbereit
  • Keycloak installiert
  • B2B-Searchlayer-Indexe verfügbar

Installation

Docker-Compose

Das Setup der hier beschriebenen Umgebung basiert auf einem docker-compose file. Diese Konfiguration definiert einen Container.

Die docker-compose Umgebung besteht letztlich aus einer Verzeichnisstruktur, die die einzelnen im Folgenden beschriebenen Dateien enthält. Die Verzeichnisstruktur stellt sich wie folgt dar:

| base/
  |- index-management-service/
  |  |- application.yml
  |- index-management-ui/
  |  |- keycloak.json
  |- docker-compose.yml
  |- .env
  |- system.json

Diese Dokumentation basiert auf der folgenden docker-compose.yml:

version: '3.7'
services:
  index:
    image: ${NEXUS}/indexmanagement:2020-10-14
    ports:
      - 8090:8080
    environment:
      - TZ: ${TIME_ZONE}
    volumes:
      - ./b2b-tomcat/tomcat_all/index:/index
      - ./index-management-service/application.yml:/lib/application.yml
  index-ui:
    image: ${NEXUS}/index-management-ui:2020-10-14
    restart: always
    ports:
      - 8094:8080
    environment:
      - TZ: ${TIME_ZONE}
    volumes:
      - ./index-management-ui/keycloak.json:/usr/share/nginx/html/B2B-Index-Management-UI/assets/config/keycloak.json
      - ./system.json:/usr/share/nginx/html/B2B-Index-Management-UI/assets/config/system.json
      - ./b2b-index-management-ui/logs/host.access.log:/var/log/nginx/host.access.log
      - ./b2b-index-management-ui/logs/host.error.log:/var/log/nginx/host.error.log
    depends_on:
      - index

Bitte folgen Sie unseren Konventionen für Servicenamen (aus denen sich dann die Hostnamen ergeben).

Achten Sie beim image darauf, eine aktuelle Version gemäß unserer Kompatibilitätsübersicht anzugeben.

Die oben aufgeführte docker-compose.yml beinhaltet verschiedene Variablen “${Variable}”. Diese Variablen sind in der Datei .env enthalten.

NEXUS=docker-nob-erf.next-level-apps.com
TIME_ZONE=Europe/Berlin

IndexManagement-Service

./index-management-service/application.yml

Diese Datei konfiguriert die Verbindung der Index Management-Backend-Instanz mit dem Keycloak. Diese Datei konfiguriert auch die verwendeten Indizes. Die folgende Konfiguration wurde für diese Dokumentation verwendet:

server:
  port: 8080

spring:
  main:
    allow-bean-definition-overriding: true

search-system:
  vendor: LUCENE2
  search-types:
    FULLTEXT: ../index/full
    ARCHIVE: ../index/arc
    CCM: ../index/ccm
    SYSTEMSPLIT_METERINGPOINT: ../index/custom_index/systemsplit_meteringpoint
    SYSTEMSPLIT_METERINGPOINTTEMP: ../index/custom_index/systemsplit_meteringpoint_temp
    SYSTEMSPLIT_RESPONSE: ../index/custom_index/systemsplit_answer

keycloak:
  enabled: true
  auth-server-url: http://[dockerhost]:8080/auth
  realm: [realm]
  resource: indexmanagement
  bearer-only: true
  public-client: false
  cors: true

DNS

Falls die DNS Namen nicht aufgelöst werden können, hilft es, folgende Datei in den Container zu mounten:

    volumes:
      - /etc/resolv.conf:/etc/resolv.conf

IndexManagement-UI

./index-management-ui/keycloak.json

Diese Datei konfiguriert die Verbindung der Index Management-UI-Instanz mit dem Keycloak. Die folgende Konfiguration wurde für diese Dokumentation verwendet:

{
  "auth-server-url": "http://host.docker.internal:8080/auth",
  "realm": "b2b-qa",
  "ssl-required": "none",
  "resource": "indexmanagement-ui",
  "public-client": true,
  "confidential-port": 0
}

Die Datei sollte direkt aus der Keycloak Admin-UI exportiert werden. In Keycloak muss dafür ein passender Client angelegt werden. Dies wird später genauer beschrieben.

./index-management-ui/nginx.conf

Das Image bringt bereits eine Default nginx.conf mit. Es ist nicht nötig, diese zu überschreiben. Die folgende Anleitung ist somit optional.

Diese Datei konfiguriert den Webserver für den Container der Index Management UI-Instanz. Die folgende Konfiguration wurde für diese Dokumentation verwendet:

#user  nobody;
worker_processes  1;

#Changed from /var/run/nginx.pid due to using non-root user
pid /tmp/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #access_log  logs/access.log  timing;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       8080;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location /B2B-Index-Management-UI {
            alias  /usr/share/nginx/html/B2B-Index-Management-UI/;
            try_files $uri$args $uri$args/ /B2B-Index-Management-UI/index.html;
        }

        #proxy for rest api call
        location /B2B-Index-Management-UI/api/indexmanagement/ {
                proxy_pass   http://index:8080/;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                proxy_set_header Host $host;
                proxy_set_header        X-Real-IP $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header        X-Forwarded-Proto $scheme;
                proxy_cache_bypass $http_upgrade;
        }

        location /B2B-Index-Management-UI/api/b2b-user-messages/system-messages {
                proxy_pass   http://notification:8080/system-messages;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                proxy_set_header Host $host;
                proxy_set_header        X-Real-IP $remote_addr;
                proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header        X-Forwarded-Proto $scheme;
                proxy_cache_bypass $http_upgrade;
        }

        location /B2B-Index-Management-UI/portalConfig/ {
            proxy_pass   http://portal-ui:8080/B2B-Portal-UI/assets/config/portal-config.json;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html/B2B-Index-Management-UI;
        }
    }
}

In diesem Beispiel wurden auch die Zugänge zu den optionalen Features Portal-UI, RevisionInfo & SystemMessages konfiguriert.

./system.json

Die Datei system.json kann als globale Konfiguration genutzt werden. Nach Möglichkeit sollte die gleiche Datei für alle Frontends verwendet werden.

In ihr können der angezeigte Systemname sowie die angezeigte Hintergrundfarbe festgelegt werden.

Ferner kann durch sie das Feature UserMessages aktiviert werden.

{ 
  "systemName": "B2B Dokusystem", 
  "backgroundColor": "#008ECC", 
  "activateUserMessages": true 
} 

Logging

Das access_log und das error_log werden in der nginx.conf definiert.

Damit das Log nicht mit einem weggeworfenen Container verloren geht, kann man das Log auch von außen in den Container mounten. Hierfür sind die Log-Files in den docker-compose/volumes mit anzugeben. Für diese Lösung müssen die Dateien vorher bereits auf dem Docker-Host angelegt und mit geeigneten Berechtigungen versehen sein.

Start docker container (UI & Service)

Mit dem folgenden Kommando können die Container im Docker gestartet werden:

:opt/docker/b2b/> docker-compose up -d

Mit folgendem Kommando können die Container im Docker gestoppt werden:

:opt/docker/b2b/> docker-compose stop

Keycloak Konfiguration

Keycloak Client Konfiguration

Keycloak Client Konfiguration

IndexManagement Service

Für den IndexManagement-Service muss ein Keycloak Client angelegt werden.

Öffnen des Formulars zum Erstellen eines neuen Clients

Die ClientId kann von Ihnen selbst gewählt werden, z.B. indexmanagement-service.

Die RootURL ist die interne Docker Adresse: http://index:8080.

Das Client Protocol bleibt auf openid-connect gestellt.

Es ist der Standardflow zu nutzen (standardmäßig aktiv).

Der Access Type ist auf bearer-only zu stellen.

Als Login-Theme kann das nli Thema gewählt werden.

IndexManagement-UI

Für die IndexManagement-UI muss ein Keycloak Client angelegt werden.

Öffnen des Formulars zum Erstellen eines neuen Clients

Die ClientId kann von Ihnen selbst gewählt werden, z.B. indexmanagement-ui.

Die RootURL entspricht der externen Adresse des Frontends.

Das Client Protocol bleibt auf openid-connect gestellt.

Es ist der Standardflow zu nutzen (standardmäßig aktiv).

Der Access Type ist public.

Als Login-Theme kann das nli Thema gewählt werden.

Keycloak Rollen & Attribute

Die Konfiguration der benötigten Rollen und Attribute wird hier beschrieben.

View Me   Edit Me