Zum Hauptinhalt springen
Version: 5.3

Externe Datenbank

Anstelle der internen Datenbank des opcrouter/runtime Images kann auch eine externe Datenbank (MongoDB) zur Speicherung der Projektdaten und der übertragenen Werte angebunden werden. Hierfür wird die Verwendung des opcrouter/service Images empfohlen, da dieses über keine interne Datenbank verfügt und somit auch auf 32 Bit Systemen lauffähig ist. Die Anbindung einer externen Datenbank an das opcrouter/runtime Image ist zwar auch möglich, jedoch wird die interne Datenbank durch die Anbindung einer externen Datenbank nicht deaktiviert oder gar automatisch gelöscht und läuft im Container weiter.

Wann ist die Verwendung einer externen Datenbank empfehlenswert?

Die Verwendung einer externen Datenbank empfiehlt sich insbesondere dann, wenn das Deployment des OPC Routers über Orchestrierungssoftware wie Kubernetes oder Docker Compose erfolgt. Dies ermöglicht eine einfache Verteilung der Anwendungen auf mehrere Systeme, so dass z.B. ein opcrouter/service-Container auf einem 32-Bit-ARM-System laufen kann, während ein opcrouter/runtime-Container aufgrund der integrierten Datenbank nur auf 64-Bit-Systemen lauffähig ist.

hinweis

MongoDB ist nicht kompatibel zu 32-Bit-Systemen. Daher muss auch eine externe Datenbank auf einem 64-Bit-System betrieben werden.

Externe Datenbank einrichten

Für dieses Beispiel werden wir einen MongoDB Docker Container als externe Datenbank erstellen. Dazu verwenden wir das offizielle mongo Image mit dem Tag 6-jammy. Dieses stellt die aktuelle MongoDB 6 Version zur Verfügung. Es können auch andere MongoDB-Instanzen eingebunden werden.

MongoDB ist nicht kompatibel zu 32-Bit-Systemen. Daher muss auch eine externe Datenbank auf einem 64-Bit-System betrieben werden.
Externe Datenbank einrichten
Für dieses Beispiel werden wir einen MongoDB Docker Container als externe Datenbank erstellen. Dazu verwenden wir das offizielle mongo Image mit dem Tag 6-jammy. Dieses stellt die aktuelle MongoDB 6 Version zur Verfügung. Es können auch andere MongoDB-Instanzen eingebunden werden.
warnung

Dieses MongoDB Deployment verwendet keine Authentifizierung und persistiert die Daten nicht auf benannten Volumes und ist daher nur für Demonstrationszwecke und nicht für den produktiven Einsatz geeignet.

Hierbei ist zu beachten, dass die MongoDB für die Verwendung mit dem OPC Router 5 als Replica Set konfiguriert sein muss. Dies wird hier durch das Argument --replSet rs0 sichergestellt. Eine bestehende MongoDB-Datenbank kann auch über den Befehl rs.initiate() als Replica Set konfiguriert werden.

Damit die MongoDB von unserem OPC Router Container aus erreichbar ist, stellen wir hier auch sicher, dass sich der externaldb Container im selben Bridge Netzwerk befindet, wobei wir hier explizit das Standard Docker Bridge Netzwerk bridge angeben. Dies sollte zwar in den meisten Docker-Umgebungen nicht notwendig sein und wird hier nur zu Demonstrationszwecken gemacht. Außerdem muss kein Port nach außen geöffnet werden, da wir die Datenbank nur innerhalb des Netzwerks ansprechen müssen.

Wir ermitteln die IP des erstellten Containers externaldb innerhalb des bridge Netzwerks, damit wir diese in unserem Verbindungsstring verwenden können:

// Some codedocker container inspect \
-f "{{range .NetworkSettings.Networks}}{{println .IPAddress}}{{end}}" \
externaldb

Hier wird eine Formatierungsoption im Argument -f verwendet, um nur die benötigte IP-Adresse anzuzeigen. Der Befehl sollte eine einzelne IP-Adresse zurückgeben, hier verwenden wir als Beispiel die IP-Adresse 172.17.0.2 für das weitere Vorgehen. Dadurch ergibt sich der Verbindungsstring mongodb://172.17.0.2:27017.

OPC Router Container mit Anbindung an externe Datenbank erstellen

Nun kann einfach aus dem Image opcrouter/service:latest ein Container erstellt werden. Auch hier geben wir als Netzwerk explizit bridge an, außerdem geben wir den Port 8080 nach außen frei, so dass wir den OPC Router bei erfolgreichem Deployment auf localhost:8080 erreichen können.

warnung

Der Verbindungsstring, der an die Umgebungsvariable OR_DATABASE_CONNECTION_STRING übergeben wird, muss noch an Ihren Verbindungsstring angepasst werden.

 docker run -d \
--name service \
--network bridge \
-e OR_I_ACCEPT_EULA=true \
-e OR_DISABLE_AUTH=true \
-e OR_DATABASE_CONNECTION_STRING="mongodb://172.17.0.2:27017" \
-p 8080:8080 \
opcrouter/service:latest
hinweis

Mit Ausführen des Befehls stimmen Sie durch das Setzen der Umgebungsvariable OR_I_ACCEPT_EULA auf true den Endbenutzer-Lizenzbedingungen zu.

Zu Demonstrationszwecken ist hier die Authentifizierung des Web Management durch die Umgebungsvariable OR_DISABLE_AUTH abgeschaltet, dies wird jedoch nicht empfohlen.

Der hier besonders wichtige Aspekt ist das Setzen des Verbindungsstrings auf die Umgebungsvariable OR_DATABASE_CONNECTION_STRING. Der Verbindungsstring kann außerdem bei Bedarf den Benutzernamen und das Passwort enthalten, um auf Datenbanken mit Authentifizierung zuzugreifen. Weiteres zum Verbindungsstring lässt sich in der offiziellen MongoDB-Dokumentation nachlesen.

warnung

Damit die Anbindung an die MongoDB funktioniert, muss die MongoDB als Replica Set konfiguriert sein. Anderenfalls scheitert der Verbundungsversuch des OPC Routers und loggt eine MongoDB.Driver.MongoCommandException. In der offiziellen MongoDB-Dokumentation erfahren sie mehr über Replica Sets.