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.
Zum Beispiel kann man:
100-proxy.json
200-mail.json
300-multinode.json
Oder man schreibt alles in eine Datei. Ganz egal.
Man kann überall und zu jederZeit in den Dateien den Key comment oder comment2 und so weiter verwenden.
comment wird vom JSON Parser ignoriert.
Zu beachten ist, dass viele Konfigurationsblöcke explizit ein "isActive": true benötigen. Per Default is isActive auf false.
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.
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 |
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 |
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 |
Parameter die aktuell noch in keine Kategorie hereinpassen
{
"config": {
"misc": {
"lockPort": 13470
}
}
}
| Parameter | Beschreibung |
|---|---|
| config.misc.lockPort | Ein interner spezial Port |
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 |
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 |
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