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. Dafür ist das Mounten einer eigener nginx.conf empfehlenswert.
View Me Edit Me