B2B Installation Tomcat (Docker)

Überblick

Dieses Dokument beschreibt die Installation eines Tomcat-Knotens in einem Docker-Container.

Voraussetzungen

Diese Anleitung setzt vorraus, dass Sie bereits eine installierte B2B im klassichen Tomcat-Betrieb (1-n Tomcat-Knoten, welche im Cluster-Verbund laufen) im Einsatz haben. Weiterhin wird vorausgesetzt, dass Sie mit den Grundzügen von Docker vertraut sind und ggf. bereits für Ihre NUI-Installation den Docker-Ansatz gewählt haben.

Ziel dieser Installation ist der Betrieb einer B2B in einem Tomcat-Container, die von außen mit einer BASIC_AUTH Authentifierung angesprochen werden kann. Entsprechend wird ein anderes Image verwendet: b2b-basicauth. (In der neuen UI wird hingegen das Image b2b verwendet, welches per Keycloak abgesichert ist.)

Docker-Compose

docker-compose Umgebung

Unsere Docker Umgebung wird hauptsächlich durch eine Reihe von Konfigurationsdateien gesteuert. Diese im Folgenden beschriebenen Dateien können von NLI gebündelt als zip-Archiv bereitgestellt werden.

Das Setup der hier beschriebenen Umgebung basiert auf einem docker-compose file. Diese Konfiguration definiert die einzelnen Container, deren Sichtbarkeit und die einzubindenden Dateien.

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/
  |- b2b-tomcat/
  |  |- lib/
  |  |  |- [DB-JDBC-Treiber].jar
  |  |- tomcat_all/
  |  |  |- index/
  |  |     |- full/
  |  |     |- arc/
  |  |     |- ccm/
  |  |- b2bbp-engine-basicauth.xml
  |- docker-compose.yml
  |- .env

Diese Dokumentation basiert auf der folgenden docker-compose.yml. Die Verzeichnissangaben beruhen auf einem UNIX-System:

version: '3.7'
services:
  traefik:
    image: "traefik:v2.3"
    command:
      - "--api.insecure=true"
      - "--providers.docker=true"
      - "--providers.docker.exposedbydefault=false"
      - "--entrypoints.web.address=:80"
      - "--entrypoints.traefik.address=:7777"
      - "--entryPoints.web.forwardedHeaders.insecure"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
    #   For running local
    ports:
      - 80:80
  #    For Linux machine
  #    network_mode: host
  b2b-basicauth:
    image: ${NEXUS}/b2b-basicauth:2021-03-09
    restart: always
    hostname: b2b-basicauth
    environment:
      TZ: ${TIME_ZONE}
    volumes:
      # mount point für die zu verwendende B2B-DB-Konfiguration
      - ./b2b-tomcat/b2bbp-engine-basicauth.xml:/usr/local/tomcat/conf/Catalina/localhost/b2bbp-engine.xml
      # mount für die logs
      - ./b2b-tomcat/tomcat_all/logs:${LOGS}
      # mount points für die zu verwendende B2B-Indizes
      - ./b2b-tomcat/tomcat_all/index/full:${FUL_IDX_PATH}
      - ./b2b-tomcat/tomcat_all/index/arc:${ARC_IDX_PATH}
      - ./b2b-tomcat/tomcat_all/index/ccm:${CCM_IDX_PATH}
      # mount point für den zu verwendenden B2B-DB-Treiber
      - ./b2b-tomcat/lib/${DB_DRV_FILE}:/usr/local/tomcat/lib/${DB_DRV_FILE}
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.b2b-basicauth.rule=Host(`${TRAEFIK_HOST}`) && PathPrefix(`/b2bbp-engine`)"        

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 dienen der Auslagerung von speziellen Bedingungen. Diese Variablen sind in der Datei .env enthalten und werden während des Starts der Container via docker-compose angewendet. Für die oben aufgeführte docker-compose.yml sieht die .env wie folgt aus:

NEXUS=docker-nob-erf.next-level-apps.com
TIME_ZONE=Europe/Berlin
FUL_IDX_PATH=/usr/local/tomcat_all/index/full
ARC_IDX_PATH=/usr/local/tomcat_all/index/archive
CCM_IDX_PATH=/usr/local/tomcat_all/index/ccm
LOGS=/usr/local/tomcat_all/logs
DB_DRV_FILE=postgresql-42.2.16.jar
TRAEFIK_HOST=localhost

Weiterhin werden in der oben aufgeführten docker-compose.yml verschiedenen Dateien referenziert. Sowohl die angegebenen Verzeichnisse der einzelnen Dateien, als auch die Dateien an sich, sind Bestandteil der docker-compose Umgebung und werden in den Abschnitten der konkreten Applikationen aufgeführt und erläutert.

Traefik

Der Traefik Container wird für das Routing der Request verwendet. Durch das Hinzufügen von verschienden Lables zu den anderen Containern wird der Traefik konfiguriert. Durch die Umgebungsvariable TRAEFIK_HOST muss der durch Traefik verwendete Hostname gesetzt werden.

B2B-Tomcat

Einbindung des Datenbank-Treibers

Wenn als Remote B2B-Datenbank eine Oracle eingesetzt wird und die entsprechenden Datenbank-Treiber aus Lizenzgründen nicht durch uns ausgeliefert werden dürfen, sind diese durch den Kunden in das Verzeichnis ./b2b-tomcat/lib/ zu kopieren. Als Bezugsquelle für die JDBC-Treiber kann die entsprechende Download-Seite von Oracle verwendet werden (siehe auch hier). Der Dateiname ist in der Umgebungsvariablen DB_DRV_FILE anzugeben.

./b2b-tomcat/b2bbp-engine-basicauth.xml

Diese Datei definiert die Datenbankverbindung, mit der sich die B2B-Instanz mit der Remote-B2B-Datenbank verbindet. Hier die für diese Dokumentation verwendete Datei:

<?xml version="1.0" encoding="UTF-8" ?>
<Context path="/b2bbp-engine" reloadable="true" cachingAllowed="true" crossContext="true">
	<Resource name="jdbc/b2bbp"
			  auth="Container"
			  type="javax.sql.DataSource"
			  driverClassName="[jdbc-Treiber, z.B. org.postgresql.Driver]"
			  url="jdbc:[Datenbank, z.B. postgresql]://[Host der Remote-B2B-DB]:[Port der Remote-B2B-DB]/[Name der Remote-B2B-DB]"
			  username="[username]"
			  password="[password]"
			  maxTotal="20"
			  maxIdle="10"
			  maxWaitMillis="-1"/>

</Context>

Knotennamen vergeben

Wenn mehrere Knoten in Containern laufen, bekommen sie die gleichen Knotennamen. Das führt zu Problemen und muss auf eine der zwei Arten gelöst werden. Siehe dazu Knotennamen vergeben.

View Me   Edit Me