Vorbereitungen
- Docker installieren
- Das docker-service-environment Repo im GitLab liefert vorkonfigurierte Umgebung aller Services der Archivlösung aus, dessen Konfiguration nur noch entsprechend dem eigenen System angepasst werden muss. Dieses kann gerne bei uns angefragt werden.
- Schnittstellen zum Archiv-System bereitstellen (abhängig vom Archiv-System, mehr dazu siehe als Konfiguration vom jeweiligem archive-writer und -searcher Service)
Für lokale Installation/Entwicklung
Docker mit Windows
- Um ordnungsgemäß zu funktionieren, sollte der Docker Engine mindestens 4GB Arbeitsspeicher zugewiesen werden.
Docker Desktop -> Settings -> Resources -> Advanced
- Falls Docker über WSL2 dann zu viel zugewiesenen Speicher verbraucht, kann der Speicherverbrauch limitiert werden.
SFTP Server als Archiv-System
- SFTP-Server installieren/bereitstellen (Beispiel: Rebex Tiny SFTP Server)
Konfiguration der Archivierung
Die von uns bereit gestellte Docker-Compose Umgebung ist bereits für Sie vorkonfiguriert. Sie ist strukturell wie folgt aufgebaut:
Der Großteil der Konfiguration wird über die .env
Datei festgelegt und während des Startprozesses auf die einzelnen Services als Parameter übertragen.
Die einzelnen Komponenten werden über die applicaton.yml
Datein im entsprechenden config
Ordner konfiguriert.
Welche Einstellungen je Service genau vorgenommen werden können ist unter der entsprechenden Seite der Dokumentation beschrieben.
Konfiguration der globalen Archivierungsparameter über Environment Datei .env
Hier die dokumentierte Fassung der .env
Datei:
##### docker-compose
# Projektname der docker-compose
COMPOSE_PROJECT_NAME=b2b-archiver
##### rabbitmq
# Version des RabbitMQ Docker-Image
RABBITMQ_VERSION=3.8.9-management-alpine
# Hostname des RabbitMQ Servers
RABBITMQ_HOST=rabbitmq
# Port des RabbitMQ Servers
RABBITMQ_PORT=5672
# Benutzer des RabbitMQ Servers
RABBITMQ_USER=tech_user
# Passwort des RabbitMQ Servers
RABBITMQ_PASSWORD=rabbitmq
##### elasticsearch
# Version des Elasticsearch Docker-Image
ELASTICSEARCH_VERSION=7.10.1
# Hostname des Elasticsearch Servers
ELASTICSEARCH_HOST=elasticsearch
# Port des Elasticsearch Servers
ELASTICSEARCH_PORT=9300
# Port des Elasticsearch HTTP Servers
ELASTICSEARCH_HTTP_PORT=9200
# Clustername des Elasticsearch Servers (optional)
CLUSTER_NAME=
# Name des Elasticsearch Knotens (optional)
NODE_NAME=
# Name des Elasticsearch Indexes
INDEX_NAME=archive
#### B2B database
## Hinweis: Die Archivierungsservices mit Datenbankzugriff (data-loader und finish-service) benötigen den entsprechenden Datenbanktreiber. Dieser muss dazu im docker-services-environment unter config im jeweiligem Service Ordner gelegt werden (z.B. postgresql-42.5.0.jar).
# Treiberklasse des Datenbanktreibers
DATABASE_DRIVER_CLASS_NAME=org.postgresql.Driver
# B2B Datenbank URL
DATABASE_URL=jdbc:postgresql://host.docker.internal:5432/b2bbp?currentSchema=b2bbp
# B2B Datenbank Benutzer
DATABASE_USER=postgres
# B2B Datenbank Passwort
DATABASE_PASSWORD=postgres
##### archive-system
## Für ein Archivsystem über SFTP
# SFTP Host
SFTP_HOST=host.docker.internal
# SFTP Port
SFTP_PORT=22
# SFTP Benutzer
SFTP_USER=tester
# SFTP Passwort
SFTP_PASSWORD=password
# Privater Schlüssel für SFTP Verbindung
SFTP_PRIVATE_KEY_FILE_NAME=id_rsa
# SFTP Remote Server Pfad
SFTP_REMOTE_DIRECTORY=./data/
## Für ein NSCALE Archivsystem
# Verzeichnis für die zu archivierenden NSCALE Dokumente
NSCALE_FOLDER_OUT=./nscale/to_Arc
# Verzeichnis für die zu archivierenden ZIP-komprimierten NSCALE Dokumente (falls nscale-message-zipper verwendet wird)
NSCALE_ZIP_FOLDER=./nscale/zip_to_Arc
# Für den nscale-message-zipper: Mindestalter in Stunden der zu archivierenden NSCALE Dokumente um dises zu komprimieren. Mindestens 1 Stunde um sicherzustellen, dass nicht noch parallel weitere Dokumente im stündlichen Sub-Ordner durch einen archive-writer-nscale geschrieben werden.
NSCALE_WRITER_FOLDER_AGE_IN_HOURS=1
# NSCALE Benutzer
NSCALE_USER=username
# NSCALE Passwort
NSCALE_PASSWORD=password
# NSCALE Dokumentenbereich
NSCALE_DOC_AREA=B2B
# NSCALE Instanz
NSCALE_INSTANCE=edidokb2b
# NSCALE Host
NSCALE_HOST=11.11.11.11
# NSCALE Port
NSCALE_PORT=9000
# NSCALE Client ID
NSCALE_CLIENT_ID=2323232323232323
##### static-starter-service
# Release Version
STATIC_STARTER_SERVICE_VERSION=2022-11-23
# Startzeitpunkt des Archivierungszeitraums
PERIOD_FROM_STATIC=2022-11-23 16:00:00
# Endzeitpunkt des Archivierungszeitraums
PERIOD_TO_STATIC=2022-11-23 18:00:00
# Intervall in Minuten der erzuegten Zeitscheiben = Zeitraum aus dem gleichzeitig Nachrichten aus der Datenbank zur Archivierung geladen werden. Parameter kann die Performance und Stabilität der Archivierung beeinflussen.
SPLIT_INTERVAL_IN_MINUTES_STATIC=5
##### dynamic-starter-service
# Release Version
DYNAMIC_STARTER_SERVICE_VERSION=2021-07-28
# Startzeit des Archivierungszeitraums in Tagen vor heute
PERIOD_FROM=1000
# Endzeit des Archivierungszeitraums in Tagen vor heute
PERIOD_TO=365
# Intervall in Minuten der erzuegten Zeitscheiben = Zeitraum aus dem gleichzeitig Nachrichten aus der Datenbank zur Archivierung geladen werden. Parameter kann die Performance und Stabilität der Archivierung beeinflussen.
SPLIT_INTERVAL_IN_MINUTES=1
##### data-loader
# Release Version
DATA_LOADER_VERSION=2024-02-28
# Nachrichten Attribute aus der B2B Datebank, die mit archiviert werden sollen. Die Attribute müssen durch Komma getrennt werden. Die Attribute müssen in der B2BBP_DATA_ATTRIBUTE oder B2BBP_DATA_ATTRIBUTE_ARCHIVE vorhanden sein. Mehr zu den Attribut-Ids siehe unten.
ATTRIBUTE_IDS=SECURITY_SERVER_PROTOCOL,B3P_SECURE_MIME_MSG_MAIN,B3P_MIME_MSG_MAIN,B3P_MIME_MSG_MAIN_ORIG,B3P_MIME_MSG_CONTRL,B3P_BASE_MESSAGE_EDI,B3P_AS2_STREAM,B3P_AS2_ORIG_STREAM,B3P_AS2_STREAM_CONTRL,B3P_AS2_ORIG_STREAM_CONTRL
##### archive-writer
## Für ein Archivsystem über SFTP
# Release Version
ARCHIVE_WRITER_SFTP_VERSION=2021-06-28
## Für ein NSCALE Archivsystem
# Release Versionen
ARCHIVE_WRITER_NSCALE_VERSION=2023-03-16
NSCALE_REQUEST_IMPORTER_VERSION=2023-03-01
# Optional, falls eine ZIP-Komprimierung der NSCALE Dokumente erfolgen soll
NSCALE_MESSAGE_ZIPPER_VERSION=2023-02-24
##### archive-index-writer
# Release Version
ARCHIVE_INDEX_WRITER_VERSION=2023-11-20
##### finish-service
# Release Version
FINISH_SERVICE_VERSION=2024-02-28
##### archive-searcher
## Für ein Archivsystem über SFTP
# Release Version
ARCHIVE_SEARCHER_VERSION=2021-06-28
## Für ein NSCALE Archivsystem
# Release Version
ARCHIVE_SEARCHER_NSCALE_VERSION=2023-03-01
##### archive-index-searcher
# Release Version
ARCHIVE_INDEX_SEARCHER_VERSION=2021-06-28
RabbitMQ
Hier müssen in der Regel keine Einstellungen vorgenommen werden.
Die ausgelieferte Konfiguration startet den RabbitMQ Server in einem Docker Container samt der benötigten Queues und Exchanges.
Diese werden über die config/rabbitmq/rabbitmq.config
und der config/rabbitmq/definitions.json
konfiguriert und angelegt.
Elasticsearch
Wird keine externe Elasticsearchinstanz verwendet können auch hier die Standartwerte verwendet werden.
Über das Feld INDEX_NAME
wird der Name des Archivs innerhalb des Elasticsearch Servers konfiguriert und angegeben.
Die Archivierung unterstützt dabei die noch lizenzfreie Elasticsearch Version 7.10.1.
B2B Nachrichten Attribut-Ids für die Archivierung
Beispiele von AttributIds zum Laden der Informationen aus den B2B Nachrichten Attribute Tabellen (B2BBP_DATA_ATTRIBUTE oder B2BBP_DATA_ATTRIBUTE_ARCHIVE):
Name des Attributs | Verwendung |
---|---|
SECURITY_SERVER_PROTOCOL | FSS Protokoll zur Verschlüsselung/Signierung |
B3P_SECURE_MIME_MSG_MAIN | Ausgehende verschlüsselte Mail |
B3P_MIME_MSG_MAIN | Ein/ausgehende Mail (je nicht verschlüsselt) |
B3P_MIME_MSG_MAIN_ORIG | Eingehende (ggf. verschlüsselte) Mail |
B3P_MIME_MSG_CONTRL | Ein/ausgehende (noch) nicht verschlüsselte CONTRL Mail |
B3P_MIME_MSG_CONTRL_ORIG | Ein/ausgehende (ggf. verschlüsselte) CONTRL Mail |
B3P_BASE_MESSAGE | In der B2B initial eingegangene Nachricht zur Verarbeitung z.B. EDIFACT oder IDOC-XML. Hinweis: In der Regel ist dies Teil der Mail oder AS2 Nachricht. |
B3P_AS2_STREAM | Ein/ausgehende AS2 Nachricht (je nicht verschlüsselt) |
B3P_AS2_ORIG_STREAM | Ein/ausgehende AS2 Nachricht (ggf. verschlüsselt) |
B3P_AS2_STREAM_CONTRL | Ein/ausgehende (noch) nicht verschlüsselte CONTRL AS2 Nachricht |
B3P_AS2_ORIG_STREAM_CONTRL | Ein/ausgehende (ggf. verschlüsselte) CONTRL AS2 Nachricht |
B2B Nachrichten Attribut-Ids für die Archivierung von AS4-Nachrichten
Name des Attributs | Verwendung |
---|---|
BASE_MESSAGE | Edifact-Nachricht, die per AS4-Nachricht empfangen wurde |
PAYLOAD | Edifact-Nachricht, die als AS4-Nachricht verschickt wurde. Wurde ein anderes Attribut mit der URL im RestClientService übergeben, so muss dieses Attribut anstatt PAYLOAD archiviert werden. |
AS4_MESSAGE | AS4 Soap Message mit verschlüsselter Edifact als Anhang |
AS4_MESSAGE_META | Meta-Informationen der AS4 Nachricht |
AS4_RECEIPT | Quittung einer AS4 Nachricht |
AS4_RECEIPT_META | Meta-Informationen der Quittung |
Logging
Beim Logging schreiben die Services ihre Logs in den Standard-Out, welcher von Docker in die Container Logs geschrieben werden.
Das Logging wird in der docker-compose.yml zu jedem Service einzeln konfiguriert, siehe auch docker-compose Dokumentation.
Über max-size
(Größe einer Log-Datei) und max-file
(maximale Anzahl von Log-Dateien) lässt sich der Speicherbedarf der Logs begrenzen.
Ist die maximale Anzahl erreicht wird die älteste Log-Datei überschrieben.
Konfiguration B2B zur Suche im Archivsystem
Damit die B2B die Archiv-Searcher Services zur Suche im Archiv verwendet, muss der entsprechende B2B Archivadapter an den folgenden drei drei GlobalProperties
konfiguriert werden:
Eigenschaft | Wert |
---|---|
B3P_ARCHIVE_MESSAGE_MONITOR_IMPL | org.b2bbp.administration.monitoring.ArchiveMessageMonitorServiceCaller |
B3P_ARCHIVE_AS2_MESSAGE_MONITOR_IMPL | org.b2bbp.administration.monitoring.ArchiveMessageMonitorServiceCaller |
B3P_ARCHIVE_MONITOR_IMPL | org.b2bbp.administration.monitoring.ArchiveMessageMonitorServiceCaller |
Die Konfigurationen zur Anbindung des Archiv-Searcher und Archiv-Index-Searcher Services werden in der B2B Extension ARCHIVE_CALLER_CONFIGURATION
vorgenommen.
Darin müssen die Properties analog zu den folgenden Beispielen konfiguriert werden:
ARCHIVE_INDEX_URL=http://host.docker.internal:8280
ARCHIVE_INDEX_PATH_GET_MESSAGE_BY_FILTER=/message
ARCHIVE_INDEX_PATH_GET_COUNT_BY_FILTER=/messagecount
ARCHIVE_FILE_URL=http://host.docker.internal:8180
ARCHIVE_FILE_PATH_GET_MESSAGE_BY_ARCHIVE_ID=/archive
MAIL_ATTRIBUTE_ARCHIVE_FIELD=B3P_MIME_MSG_MAIN
Um eine fehlerfreie Archivsuche in der NUI zu gewährleisten, muss die Extension SEARCH_LAYER_CONFIGURATION
ggf. um folgende Werte erweitert werden:
SEARCH_TYPES=ARCHIVE,...
ARCHIVE_PATH=/usr/local/tomcat/tomcat_all/index/archive
Das im ARCHIVE_PATH
angegebene Verzeichnis muss manuell erstellt werden (auch wenn es nicht benötigt wird).
Start der Archivkomponenten
Voraussetzungen
Für einen erfolgreichen Start und Betrieb der Archivierung müssen folgende Einstellungen getroffen werden:
- Docker Login (mit bereit gestellten Zugangsdaten nach Erwerb) zum Download der Docker Service Artefakte
- Server hat genug RAM (und CPU) für die Ausführung der Docker Services
- B2B Datenbank ist erreichbar, läuft und hat alle notwendigen Tabellen
- Archiv System (Schnittstellen) sind konfiguriert und erreichbar
- Unter
config/data-loader
undconfig/finish-service
müssen die.jar
Dateien der Datenbanktreiber liegen. Diese werden in den Service-Container gemountet um ausgeführt zu werden.
Allgemeiner Befehl: docker-compose up -d
Ausführung der Archivierung durch den Start eines starter-services
Der dynamic-starter-service
und static-start-service
sind in der docker-compose.yml
enthalten und im .env
konfiguriert, aber werden beim docker-compose up
i.A. nicht mithochgefahren.
Sie triggern die Archivierung von Nachrichten eines konfigurierten Nachrichten-Zeitraums.
Der dynamic-starter-service
erlaubt die Archivierung von Nachrichten mit Abstand zum heutigen Datum (z.b. alle Nachrichten älter als 90 Tage).
Dieser kann über die Konfiguration eines Cronjobs periodisch hochgefahren werden und entsprechende neue Zeiträume ergänzen.
Mehr dazu siehe unten.
Der static-starter-service
erlaubt die Archivierung einer konfigurierten Zeitspanne.
Dieser kommt in der Regel dann zum Einsatz, wenn die Archivierung nach initialer Einrichtung noch einen Zeitraum aufholen muss oder ein definierter Zeitraum nach-Archiviert werden soll.
Der Service aus der docker-compose.yml
kann (wie jeder andere Service auch) manuell per Befehl separat gestartet werden: docker-compose up -d --scale static-starter-service=1 static-starter-service
Konfiguration der Cronjobs
Die Cron-Konfiguration wird insbesondere verwendet um
- den
dynamic-starter-service
zu starten - den
data-loader
sowiefinish-service
nur zu bestimmten Zeiten laufen lassen zu können, um den Zugriff zur B2B Datenbank zeitlich zu begrenzen.
Hierzu können die bereitgestellten .sh
-Skripte aus dem config/host/home
-Verzeichnis in das $HOME
-Verzeichnis des ausführenden Dockernutzers kopiert werden.
Hinweis: Diese müssen auch vom Dockernutzer ausführbar gespeichert werden.
Die bereitgestellte cron-collection.cron
enthält die nötigen Befehle, welche über die Cron-Steuerung aufgerufen werden können.
Diese wird über den Konsolenbefehl crontab -e
(ausgeführt mit dem Dockernutzer!) eingestellt.
Hinweis: Mit #
kann man Zeilen auskommentieren.
Beispiel: Start einer Cron-Steuerung (über crontab -e
):
# Stop des data-loaders und finish-service täglich um 02:00 Uhr
0 2 * * * $HOME/bin/database-archive-containers-stop.sh > $HOME/database-archive-containers.log 2>&1
# Start des data-loaders und finish-service täglich um 16:00 Uhr
0 16 * * * $HOME/bin/database-archive-containers-start.sh >> $HOME/database-archive-containers.log 2>&1
# Start des dynamic-starter-service alle 5 Minuten
*/5 * * * * $HOME/bin/dynamic-starter-service.sh > $HOME/dynamic-starter-service.log 2>&1
Skalierung der Archivierung
Durch das Starten mehrerer gleicher Services kann Archivierung gezielt und leicht skaliert werden. Die Anzahl der einzelnen Services (zunächst ausgenommen RabbitMQ und Elasticsearch Server) der Lösung kann so nach Bedarf angepasst werden, indem die Anzahl der Serviceinstanzen im Startbefehl mitgegeben wird.
Zum Beispiel docker-compose up --scale data-loader=3 --scale archive-writer=2 -d
startet drei Instanzen des data-loaders und zwei Instanzen des archive-writers.
Die Namen der Services entsprechen denen der docker-compose.yml
und werden nummeriert z.B. b2b-archiver_data-loader_1
.
Wichtige Befehle
docker-compose up
Baut und startet alle Container, Netzwerke der Archivlösung und startet diese.docker-compose down
Stoppt und löscht bestehende Container und Netzwerke. Achtung: Das Löschen der Netzwerke kann unbeabsichtigte Auswirkungen auf die Services haben (RabbitMQ Nachrichten, Elasticsearch Index) und sollte nur mit Bedacht verwendet werden!docker-compose start/stop
Startet mit neuerdocker-compose
Konfiguration bzw. stoppt die Container ohne sie zu löschen.docker stop container-name
Stoppt einen Container.docker rm container-name
Löscht einen Container.docker exec -it container-name sh
Öffnet ein Terminal im entsprechenden Container.