Installation

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

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 und config/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-servicezu starten
  • den data-loader sowie finish-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

View Me   Edit Me