Vollständige Docker Umgebung

Es folgt eine beispielhafte Konfiguration, mit der alle Microservices gebündelt auf einem einzigen Docker-Host eingerichtet werden können.

Weitere Details zur Konfiguration jedes einzelnen Microservices erfolgen dann auf den folgenden Seiten. Jede der folgenden Seiten behandelt einen oder mehrere Microservices.

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/
  |- revision-service/
  |  |- application.yml
  |- b2b-revisioninfo-ui/
  |  |- keycloak.json
  |- b2b-tomcat/
  |  |- lib/
  |  |  |- [DB-JDBC-Treiber].jar
  |  |- tomcat_all/
  |  |  |- index/
  |  |     |- full/
  |  |     |- arc/
  |  |     |- ccm/
  |  |- b2bbp-engine.xml
  |  |- keycloak.json
  |- b2b-ui/
  |  |- keycloak.json
  |- admin-ui/
  |  |- keycloak.json
  |- index-management-service/
  |  |- application.yml
  |- index-management-ui/
  |  |- keycloak.json
  |- fss/
  |  |- conf/
  |     |- application.yml
  |     |- application-secure.yml
  |- fss-ui/
  |  |- keycloak.json
  |- usermessages-service/
  |  |- application.yml
  |- b2b-usermessages-ui/
  |  |- keycloak.json
  |- b2b-portal-ui/
  |  |- keycloak.json
  |  |- portal-config.json
  |- docker-compose.yml
  |- .env
  |- system.json

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

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
  # Container-Definition für die keycloak-Instanz
  keycloak:
    image: ${NEXUS}/keycloak:2021-02-22
    restart: always
    ports:
      # Port unter dem der keycloak (auch von außen) erreichbar ist
      - ${KEYCLOAK_PORT}:8080
    environment:
      # Admin-Zugang für den keycloak
      - KEYCLOAK_USER=admin
      - KEYCLOAK_PASSWORD=admin
    volumes:
      # mount point für die keycloak DB
      - ./keycloak/data/:/opt/jboss/keycloak/standalone/data
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.keycloak.rule=Host(`keycloak.localhost`)"
      - "traefik.http.middlewares.sslheader.headers.sslProxyHeaders.X-Forwarded-Proto=https"
      - "traefik.http.routers.keycloak.middlewares=sslheader"	  
  revision:
    image: ${NEXUS}/revision:2021-03-18
    environment:
      TZ: ${TIME_ZONE}
    volumes:
      - ./revision-service/application.yml:/lib/application.yml
  revision-ui:
    image: ${NEXUS}/b2b-revisioninfo-ui:2021-03-18
    restart: always
    ports:
      - 1188:8080
    environment:
      TZ: ${TIME_ZONE}
    volumes:
      - ./b2b-revisioninfo-ui/keycloak.json:/usr/share/nginx/html/B2B-RevisionInfo-UI/assets/config/keycloak.json
      - ./b2b-revisioninfo-ui/system.json:/usr/share/nginx/html/B2B-RevisionInfo-UI/assets/config/system.json
      - ./b2b-revisioninfo-ui/logs/host.access.log:/var/log/nginx/host.access.log
      - ./b2b-revisioninfo-ui/logs/host.error.log:/var/log/nginx/host.error.log
    depends_on:
      - revision
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.revision-ui.rule=Host(`${TRAEFIK_HOST}`) && PathPrefix(`/B2B-RevisionInfo-UI`)"
  b2b:
    image: ${NEXUS}/b2b:2021-02-22
    restart: always
    hostname: b2b
    ports:
      # Port unter dem die B2B-Instanz (auch von außen) erreichbar ist
      - ${B2B_PORT}:8080
    environment:
      TZ: ${TIME_ZONE}
    volumes:
      # mount point für die zu verwendende B2B-DB-Konfiguration
      - ./b2b-tomcat/b2bbp-engine.xml:/usr/local/tomcat/conf/Catalina/localhost/b2bbp-engine.xml
      # mount point für die zu verwendende B2B-keycloak-Konfiguration
      - ./b2b-tomcat/keycloak.json:/usr/local/tomcat/conf/keycloak.json
      # 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}
  # Container-Definition für die B2B-New-UI-Instanz
  b2b-ui:
    image: ${NEXUS}/b2b-ui:2021-03-18
    restart: always
    ports:
      # Port unter dem die B2B-New-UI-Instanz (auch von außen) erreichbar ist
      - ${NUI_PORT}:8080
    environment:
      TZ: ${TIME_ZONE}
      B2B: b2b:8080
    volumes:
      # mount point für die zu verwendende B2B-New-UI-keycloak-Konfiguration
      - ./b2b-ui/keycloak.json:/usr/share/nginx/html/B2B-UI/assets/config/keycloak.json
      - ./system.json:/usr/share/nginx/html/B2B-UI/assets/config/system.json
      - ./b2b-ui/logs/host.access.log:/var/log/nginx/host.access.log
      - ./b2b-ui/logs/host.error.log:/var/log/nginx/host.error.log
    depends_on:
      - b2b
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.b2b-ui.rule=Host(`${TRAEFIK_HOST}`) && PathPrefix(`/B2B-UI`)"
  b2b-admin-ui:
    image: ${NEXUS}/admin-ui:2021-03-18
    restart: always
    ports:
      - 1184:8080
    environment:
      TZ: ${TIME_ZONE}
    volumes:
      - ./admin-ui/keycloak.json:/usr/share/nginx/html/B2B-Admin-UI/assets/config/keycloak.json
      - ./system.json:/usr/share/nginx/html/B2B-Admin-UI/assets/config/system.json
      - ./admin-ui/logs/host.access.log:/var/log/nginx/host.access.log
      - ./admin-ui/logs/host.error.log:/var/log/nginx/host.error.log
    depends_on:
      - b2b
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.b2b-admin-ui.rule=Host(`${TRAEFIK_HOST}`) && PathPrefix(`/B2B-Admin-UI`)"	  
  index:
    image: ${NEXUS}/indexmanagement:2021-03-18
    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:2021-03-18
    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
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.index-ui.rule=Host(`${TRAEFIK_HOST}`) && PathPrefix(`/B2B-Index-Management-UI`)"	  
  fss:
    image: ${NEXUS_ERP}/fss:2021-03-18
    restart: always
    environment:
      TZ: ${TIME_ZONE}
    volumes:
      - ./fss/conf:/opt/securityserver/conf
      - ./fss/logs:/opt/securityserver/logs
  fss-ui:
    image: ${NEXUS_ERP}/fss-ui:2021-02-22
    restart: always
    ports:
      - 1186:8080
    environment:
      TZ: ${TIME_ZONE}
    volumes:
      - ./fss-ui/keycloak.json:/usr/share/nginx/html/FSS-UI/assets/config/keycloak.json
      - ./fss-ui/system.json:/usr/share/nginx/html/B2B-UI/assets/config/system.json
      - ./fss-ui/logs/host.access.log:/var/log/nginx/host.access.log
      - ./fss-ui/logs/host.error.log:/var/log/nginx/host.error.log
    depends_on:
      - fss
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.fss-ui.rule=Host(`${TRAEFIK_HOST}`) && PathPrefix(`/FSS-UI`)"	  
  notification:
    image: ${NEXUS}/notification-service:2021-02-22
    environment:
      TZ: ${TIME_ZONE}
    volumes:
      - ./usermessages-service/application.yml:/lib/application.yml
  notification-ui:
    image: ${NEXUS}/notification-ui:2021-02-22
    restart: always
    ports:
      - 1190:8080
    environment:
      TZ: ${TIME_ZONE}
    volumes:
      - ./b2b-usermessages-ui/keycloak.json:/usr/share/nginx/html/User-Messages-UI/assets/config/keycloak.json
      - ./b2b-usermessages-ui/system.json:/usr/share/nginx/html/User-Messages-UI/assets/config/system.json
      - ./b2b-usermessages-ui/logs/host.access.log:/var/log/nginx/host.access.log
      - ./b2b-usermessages-ui/logs/host.error.log:/var/log/nginx/host.error.log
    depends_on:
      - notification
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.notification-ui.rule=Host(`${TRAEFIK_HOST}`) && PathPrefix(`/User-Messages-UI`)"	  
  portal-ui:
    image: ${NEXUS}/portal-ui:2021-02-22
    restart: always
    ports:
      - 1192:8080
    environment:
      TZ: ${TIME_ZONE}
    volumes:
      - ./b2b-portal-ui/keycloak.json:/usr/share/nginx/html/B2B-Portal-UI/assets/config/keycloak.json
      - ./b2b-portal-ui/system.json:/usr/share/nginx/html/B2B-Portal-UI/assets/config/system.json
      - ./b2b-portal-ui/portal-config.json:/usr/share/nginx/html/B2B-Portal-UI/assets/config/portal-config.json
      - ./b2b-portal-ui/logs/host.access.log:/var/log/nginx/host.access.log
      - ./b2b-portal-ui/logs/host.error.log:/var/log/nginx/host.error.log
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.portal-ui.rule=Host(`${TRAEFIK_HOST}`) && PathPrefix(`/B2B-Portal-UI`)"	  

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
NEXUS_ERP=docker-nob-erp.next-level-apps.com
TIME_ZONE=Europe/Berlin
KEYCLOAK_PORT=8080
B2B_PORT=8081
NUI_PORT=8082
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.

Konfiguration des Endpunkts des Nginx Docker-Dienstes

Wir empfehlen Ihnen dieses Feature nicht zu nutzen sondern sich an unseren Standard zu halten.

Standardmäßig enthalten die meisten UI-Docker-Images (z.B. b2b-ui) Reverse-Proxy-Konfigurationen (innerhalb der jeweilgen nginx.conf), welche Sie in den allermeisten Fällen nicht anpassen müssen. Eine Anpassung wäre allerdings notwendig wenn Sie z.B. auf Services referenzieren möchten, die nicht dem vorgegebenen Namensschema (siehe Default-Werte unten) entsprechen. Das Mounten einer eigener nginx.conf zur Erreichung dieses Ziels wäre möglich, allerdings nicht empfehlenswert. Aus diesem Grund haben wir die folgenden Umgebungssvariablen eingeführt, mit denen Sie Hostname und Port für die Reverse-Proxy-Konfiguration anpassen können.

Dies sind die unterstützten Umgebungsvariablen:

  • B2B
  • PORTAL_UI
  • NOTIFICATION_SERVICE
  • REVISION_SERVICE
  • FSS_SERVICE
  • INDEX_SERVICE

Nachfolgend finden Sie eine Beispiel-Konfiguration mit den jeweiligen Default-Werten.

environment:      
      B2B: b2b:8080
      PORTAL_UI: portal-ui:8080
      NOTIFICATION_SERVICE: notification:8080
      REVISION_SERVICE: revision:8080
      FSS_SERVICE: fss:8080
      INDEX_SERVICE: notification:8080      

Hinweis: Falls Sie eine bereits eine eigene nginx.conf verwenden und in Ihren Docker-Container hineinmounten, wird dies weiterhin unterstützt.

View Me   Edit Me