System Konfiguration

Allgemeines

Die Konfiguration liegt im $CORVUS_ROOT/conf Verzeichnis. Der Name der Konfigurationsdateien ist nicht relevant, gelesen werden alle Dateien mit der Endung .json in sortierter Reihenfolge. Für die Konfiguration wird ein vollständiges Datenmodel benutzt, und alle Dateien werden sortiert dem Datenmodell hinzugefügt. Damit können Konfigurationsbereiche in einzelne Dateien gespeichert werden, die man z.B. im Multi-Node Betrieb kopieren kann.

Beispiel für Dateinamen

Zum Beispiel kann man:

100-proxy.json
200-mail.json
300-multinode.json

Oder man schreibt alles in eine Datei. Ganz egal.

Kommentare

Man kann überall und zu jederZeit in den Dateien den Key comment oder comment2 und so weiter verwenden. comment wird vom JSON Parser ignoriert.

Aktiv Flag

Zu beachten ist, dass viele Konfigurationsblöcke explizit ein "isActive": true benötigen. Per Default is isActive auf false.

Running Configuration

Beim Start des Systems werden alle Konfigurationen gelesen und zusammengeführt. Wenn dieser Vorgang abgeschlossen ist, und alle Parameter validiert wurden, wird das System gestartet. Kurz vorher jedoch wird eine Running Configuration Datei abgelegt. Sie befindet sich in $CORVUS_ROOT/var/tmp/running-config.json und wird bei jedem Start überschrieben.

Konfiguration

Proxy

Es können mehrere Proxies konfiguriert werden. Wenn einer nicht geht, wird automatisch der nächste benutzt. Jedoch ist das aktuell nicht implementiert. Auch Authentifikation ist nicht implementiert.

Der Proxy, sofern einer nötig ist, wird für die Verbindung zum M2M Service benutzt. Dort liegen Lizenzen und Updates. Ein normaler HTTPS (HTTPS only) Proxy ist ausreichend.

Sofern möglich sollten Sie die IP-Adressen benutzen, um mögliche DNS Probleme zu eliminieren.

{
	"config": {
		"proxies": [
			{
				"isActive": true,
				"orderPriority": 10,
				"host": "myproxy.company.net",
				"port": 3128
			}
		]
	}
}
Parameter Beschreibung
config.proxies[].isActive Kann true oder false sein
config.proxies[].orderPriority Wird für die Sortierung benutzt. Kleinere Nummern zuerst
config.proxies[].host Der Hostname oder die IPv4 oder eine IPv6 Adresse des Proxies
config.proxies[].port Der TCP Port des Proxies

SMTP

Es können mehrere SMTP Relay Server spezifiziert werden, wenn einer nicht reagiert, wird automatisch der nächste genommen.

Aktuell wird nur Port 25 unterstützt, ohne START-SSL und ohne TLS.

{
	"config": {
		"smtp": {
			"fromMail": "corvus@corvus01.company.net",
			"fromName": "Corvus System",
			"relays": [
				{
					"isActive": false,
					"orderPriority": 10,
					"host": "my-relay01.company.net",
					"port": 25
				},
				{
					"isActive": true,
					"orderPriority": 20,
					"host": "my-relay02.company.net",
					"port": 25
				}
			],
			"alertRecipients": [
				{
					"isActive": true,
					"toName": "The Master Of Universe",
					"toMail": "admin@mycompany.net"
				},
				{
					"isActive": false,
					"toName": "Der Dauerurlauber",
					"toMail": "in-vacation@mycompany.net"
				}
			]
		}
	}
}
Parameter Beschreibung
config.smtp.fromMail Die E-Mail Adresse mit der das System senden soll (MAIL FROM)
config.smtp.fromName Der Name der als Sender in der E-Mail auftauchen soll
config.smtp.relays[].isActive Kann true oder false sein
config.smtp.relays[].orderPriority Wird für die Sortierung benutzt. Kleinere Nummern zuerst
config.smtp.relays[].host Der Hostname oder die IPv4 oder eine IPv6 Adresse des Relay
config.smtp.relays[].port Der TCP Port des Relay
config.smtp.alertRecipients[] Eine Liste von Empfängern von brutalen Systemfehlermeldungen
config.smtp.alertRecipients[].isActive Kann true oder false sein
config.smtp.alertRecipients[].toName Der Name des Opfers
config.smtp.alertRecipients[].toMail Dessen E-Mail Adresse

Frontend

Mit der Server Konfiguration legt man die IP des Frontends fest, definiert die SSL-Zertifikate, und kann interne Ports beeinflussen.

{
	"config": {
		"frontend": {
			"externalUrl": "https://corvus.mycompany.net:13480/corvus",
			"contextRoot": "/corvus",
			"sockets": [
				{
					"isActive": true,
					"protocol": "http",
					"listen": "ANY",
					"port": 13479
				},
				{
					"protocol": "http",
					"listen": "ANY",
					"port": 8080
				},
				{
					"isActive": true,
					"protocol": "https",
					"listen": "ANY",
					"port": 13480,
					"ssl": {
						"certX509": "/etc/ssl/certificate.crt.x509",
						"keyPkcs8": "/etc/ssl/certificate.key.pkcs8"
					}
				}
			]
		}
	}
}
Parameter Beschreibung
config.frontend.externalUrl Das ist die URL mit der die Benutzer auf das Frontend zugreifen. Die URL wird in E-Mails verwendet
config.frontend.contextRoot Die URL auf den das System als Stammverzeichnis hören soll
config.frontend.sockets[].isActive Kann true oder false sein
config.frontend.sockets[].protocol Kann http oder https sein
config.frontend.sockets[].listen Aktuell nur ANY. Der Hostname oder die IPv4 oder eine IPv6 Adresse der lokalen Schnittstelle
config.frontend.sockets[].port Der TCP Port auf dem das Frontend reagieren soll
config.frontend.sockets[].ssl.certX509 Das Zertifikat, welches das Frontend benutzen soll im X.509 Format
config.frontend.sockets[].ssl.keyPkcs8 Der Key, welches das Frontend benutzen soll im PKCS#8 Format

Misc

Parameter die aktuell noch in keine Kategorie hereinpassen

{
	"config": {
		"misc": {
			"lockPort": 13470
		}
	}
}
Parameter Beschreibung
config.misc.lockPort Ein interner spezial Port

Database

Konfiguration der Datenbank Verbindungen für das System.

Man kann mehrere Datenbanken konfigurieren und durch ein Flag die aktive Datenbank setzen. Man kann auch mehrere Datenbanken als aktiv markieren, sofern es sich um eine Multi-Path Multi-Master Datenbank handelt.

{
	"config": {
		"database": {
			"backup": {
				"local": {
					"isActive": true
				},
				"remote": {
					"isActive": false,
					"sharedKey": "laASDFk42sdJJ$HSDh234gaLk452i23j$$sdLfj123"
				}
			},
			"instances": [
				{
					"isActive": true,
					"orderPriority": 10,
					"name": "Production",
					"mode": "RW",
					"type": "mysql",
					"host": "10.9.9.2",
					"port": 3306,
					"db": "corvusProduction",
					"username": "corvusUser",
					"password": "f439qh4fh987hO)/Hr6oh2w8h"
				},
				{
					"isActive": false,
					"orderPriority": 20,
					"name": "Test 01",
					"mode": "RO",
					"type": "mysql",
					"host": "10.22.44.5",
					"port": 3306,
					"db": "corvusTest",
					"username": "corvusUser",
					"password": "HGo8q73rghIO$UHG829rgoZUGogh",
					"deactivateSsl": true
				}
			]
		}
	}
}
Parameter Beschreibung
config.database.backup.local.isActive Kann true oder false sein
config.database.backup.remote.isActive Kann true oder false sein
config.database.backup.remote.sharedKey Ein spezieller E2E Schüssel für die Verschlüsselung des Backups auf dem Remote Server
config.database.instances[].isActive Kann true oder false sein
config.database.instances[].orderPriority Wird für die Sortierung benutzt. Kleinere Nummern zuerst
config.database.instances[].name Ein Name der Instanz, um die Instanzen auseinanderhalten zu können
config.database.instances[].type Aktuell wird nur mysql akzeptiert. Die Datenbank kann aber auch eine MariaDB sein (noch)
config.database.instances[].mode Aktuell wird nur RW akzeptiert. Kann RO/RW/WO sein, ReadOnly für Slaves. Ein WriteOnly geht auch
config.database.instances[].host Der Hostname oder die IPv4 oder eine IPv6 Adresse des Datenbank Servers
config.database.instances[].port Der TCP Port des Datenbank Servers
config.database.instances[].db Der Name der Datenbank
config.database.instances[].username Der Username für die Datenbank
config.database.instances[].password Das Password
config.database.instances[].deactivateSsl Deaktiviert die Default SSL Verbindung zur Datenbank

Multi-Node

Die Node konfiguration der Multi-Node Konfiguration kann zwischen den Nodes kopiert werden. Der eigene Node wird anhand der Node ID erkannt und wird entsprechend behandelt.

Die Nodes können alle Multi-Path konfiguriert werden, fällt eine Verbindung aus, wird automatisch die nächste genommen. Auch kann das System mit mehreren Partitionen, Multi-Node-Gruppen umgehen. Das wird später noch wichtig.

{
	"config": {
		"multinode": {
			"isActive": true,
			"partitions": [
				{
					"isActive": true,
					"name": "Live Network 01",
					"nodeId": 1,
					"nodes": [
						{
							"isActive": true,
							"name": "Node 01",
							"nodeId": 1,
							"contextPath": "/corvus",
							"sockets": [
								{
									"isActive": true,
									"orderPriority": 10,
									"protocol": "http",
									"host": "10.0.0.11",
									"port": 13479
								},
								{
									"isActive": false,
									"orderPriority": 20,
									"protocol": "http",
									"host": "192.168.0.11",
									"port": 13479
								}
							]
						},
						{
							"isActive": false,
							"name": "Node 02",
							"nodeId": 2,
							"comment": "Der Node wird umgebaut und ist länger nicht verfügbar",
							"contextPath": "/corvus",
							"sockets": [
								{
									"protocol": "http",
									"host": "10.0.0.12",
									"port": 13479
								},
								{
									"isActive": true,
									"protocol": "http",
									"host": "192.168.0.12",
									"port": 13479
								}
							]
						}
					]
				}
			]
		}
	}
}
Parameter Beschreibung
config.multinode.isActive Kann true oder false sein
config.multinode.partitions[].isActive Kann true oder false sein
config.multinode.partitions[].name Der Name der Node Partition
config.multinode.partitions[].nodeId Die eigene Node ID
config.multinode.partitions[].nodes[].isActive Kann true oder false sein
config.multinode.partitions[].nodes[].name Der Name des Nodes
config.multinode.partitions[].nodes[].nodeId Die Node ID
config.multinode.partitions[].nodes[].contextPath Der Context Path des Nodes
config.multinode.partitions[].nodes[].sockets[].isActive Kann true oder false sein
config.multinode.partitions[].nodes[].sockets[].orderPriority Wird für die Sortierung benutzt. Kleinere Nummern zuerst
config.multinode.partitions[].nodes[].sockets[].protocol Kann http oder https sein
config.multinode.partitions[].nodes[].sockets[].host Der Hostname oder die IPv4 oder eine IPv6 Adresse des Nodes
config.multinode.partitions[].nodes[].sockets[].port Der TCP Port des Nodes

Service

Die Service-Konfiguration wird hier festgelegt und kann ggf. zur Laufzeit modifiziert werden, ist aber nach einem Neustart wieder im Urzustand.

Die Reihenfolge der Properties Einträge ist nicht relevant, die Reihenfolge wird durch die Länge des Namens impliziert. Ein “.*” wird also zuerst ausgewertet, alle 100 % Name Matches werden als letztes gelesen und überschreiben ggf. die Werte

{
	"config": {
		"service": {
			"properties": [
				{
					"name": ".*",
					"logDebug": true
				},
				{
					"name": "databaseBackup",
					"disableService": true
				},
				{
					"name": "mail.*",
					"disableAutoStart": true
				},
				{
					"name": "checkDeviceReachable",
					"deviceNameList": "gw1 gw2",
					"logDebug": false
				}
			]
		}
	}
}
Parameter Beschreibung
config.service.properties[].name Der Name des Services, kann auch ein RegEx sein
config.service.properties[].logDebug Kann true oder false sein. Debug Logging kann sehr umfangreich werden
config.service.properties[].disableService Kann true oder false sein. Damit wird ein Service vollständig deaktiviert
config.service.properties[].disableAutoStart Kann true oder false sein. Damit wird ein Service beim Start nicht hochgefahren

Im Beispiel sieht man ein config.service.properties[].deviceNameList, das ist ein Service spezifischer Wert, siehe dazu in den Services, jeder Service hat möglicherweise Properties, die sind in der Hilfe zu den Services aufgelistet.

Corvus Help - 28.February 2026 03:33:38 UTC - Commit 667ccc2e