Technik:API-Gateway: Unterschied zwischen den Versionen

Aus CoPlanner 11
Zur Navigation springenZur Suche springen
Beispielkonfiguration für ein API-Gateway mit 2 Report Server Instanzen als Link.
Keine Bearbeitungszusammenfassung
 
(3 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
__TOC__
__TOC__{{Hinweis|Text=Bis CoP 11 Release 1 2026. Ab CoP 11 Release 1 2026.gibt es das Report-Gateway um mehrere Reportserver pro CoPlanner Server zu verwenden.}}


Verfügbar ab CoP 10 HF 2.2
Über das API-Gateway soll z.B. ein CopServer mit zwei Reportserver anbinden können.


Über das API-Gateway kann z.B. ein CopServer mit zwei Reportservern betrieben werden, auf die mehrere Benutzer gleichmäßig aufgeteilt werden.


=Einrichtung=
=Einrichtung=
1.) Rest.Client-Ordner aus dem Serververzeichnis in das ApiGateway-Verzeichnis kopieren.
1.) Rest.Client-Ordner aus dem Serververzeichnis in das ApiGateway-Verzeichnis kopieren.
2.) In ApiGateway-Ordner in der Datei appsettings.json die Hosting-URL bzw. den Port festlegen (siehe Konfigurationsdateien)
2.) In ApiGateway-Ordner in der Datei appsettings.json die Hosting-URL bzw. den Port festlegen (siehe Konfigurationsdateien)
 
3.) In ApiGateway-Ordner in der Datei ocelot.json werden die Routen für die dahinterliegenden Services definiert. Dabei sind die Standardrouten, welche angepasst werden müssen:
3.) In ApiGateway-Ordner in der Datei ocelot.json werden die Routen für die dahinterliegenden Services definiert. Dabei sind die Standardrouten, welche angepasst werden müssen:  
:* <nowiki>https://localhost:4443/coplanner</nowiki> für den Coplanner Server  
:* <nowiki>https://localhost:4443/coplanner</nowiki> für den Coplanner Server  
:* <nowiki>https://localhost:4444/coplanner</nowiki> für ReportServer 1 und  
:* <nowiki>https://localhost:4444/coplanner</nowiki> für ReportServer 1 und  
Zeile 22: Zeile 18:
Die Clients sollten sich dann direkt auf die URL des API-Gateways verbinden und nicht direkt auf den Server.
Die Clients sollten sich dann direkt auf die URL des API-Gateways verbinden und nicht direkt auf den Server.


Die Cop.ApiGateway.exe kann direkt gestartet werden mit Doppelklick oder mittels Konsole. Dann läuft sie als Konsolenapp. Sie kann aber auch als Windowsservice mit <pre>sc create <gewünschter Servicename> binPath=<Vollständiger Pfad zur EXE>"</pre> registriert werden und dann über die Windows-Serviceverwaltung verwaltet werden. Alternativ können weitere Parameter direkt beim Anlegen des Service definiert werden, welche es gibt finden Sie in der Microsoftdokumentation zu sc create.
Die Cop.ApiGateway.exe kann direkt gestartet werden mit Doppelklick oder mittels Konsole. Dann läuft sie als Konsolenapp. Sie kann aber auch als Windowsservice mit <pre>sc create <gewünschter Servicename> binPath=<Vollständiger Pfad zur EXE>"</pre> registriert werden und dann über die Windows-Serviceverwaltung verwaltet werden. Alternativ können weitere Parameter direkt beim Anlegen des Service definiert werden - welche es gibt finden Sie in der [https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/sc-create Microsoft-Dokumentation zu sc create].




Zeile 31: Zeile 27:
:* JwtBearerIssuer: sollte nicht geändert werden
:* JwtBearerIssuer: sollte nicht geändert werden
:* JwtBearerIssuerKey: sollte nicht geändert werden
:* JwtBearerIssuerKey: sollte nicht geändert werden
:* PathBase: sofern für den Aufruf des Gateways eine Erweiterung hinter dem Port notwendig sein, kann diese hier angegeben werden. Will man also z.B. nicht über <nowiki>https://servername.coplanner.com:4446</nowiki> zugreifen, sondern <nowiki>https://servername.coplanner.com:4446/coplanner, so muss hier /coplanner angegeben werden
:* PathBase: Sofern für den Aufruf des Gateways eine Erweiterung hinter dem Port notwendig ist, kann diese hier angegeben werden. Will man also z.B. nicht über <nowiki>https://servername.coplanner.com:4446</nowiki> zugreifen, sondern über <nowiki>https://servername.coplanner.com:4446/coplanner</nowiki>, muss hier /coplanner angegeben werden


===Kestrel===
===Kestrel===
:* Endpoints: Hier wird definiert, wie auf das Service zugegriffen wird und sofern https verwendet wird, welches Zertifikat verwendet wird.
:* Endpoints: Hier wird definiert, wie auf das Service zugegriffen wird und, sofern https verwendet wird, welches Zertifikat genutzt werden soll.


Beispiele:
Beispiele:


Verwendung bei nur http:
Verwendung bei nur http:
<pre>
<syntaxhighlight lang="json">
Http": {
"Http": {
  "Url": "http://+:4448"
    "Url": "http://+:4448"
}
}
</pre>
</syntaxhighlight>


Verwendung, wenn das Zertifikat in einem Verzeichnis abgelegt wird (muss nicht installiert werden):
Verwendung, wenn das Zertifikat in einem Verzeichnis abgelegt wird (muss nicht installiert werden):
<pre>
<syntaxhighlight lang="json">
"HttpsInlineCertFile": {
"HttpsInlineCertFile": {
"Url": "https://+:4448",
    "Url": "https://+:4448",
"Certificate": {
    "Certificate": {
    "Path": ".\MeinZertifikat.pfx",
        "Path": "./MeinZertifikat.pfx",
    "Password": "MeinPasswort"
        "Password": "MeinPasswort"
    }
    }
}
}
</pre>
</syntaxhighlight>


Verwendung, wenn das Zertifikat in einem Zertifikatsspeicher liegt:
Verwendung, wenn das Zertifikat in einem Zertifikatsspeicher liegt:
<pre>
<syntaxhighlight lang="json">
"HttpsInlineCertStore": {
"HttpsInlineCertStore": {
"Url": "https://+:4448",
    "Url": "https://+:4448",
"Certificate": {
    "Certificate": {
    "Subject": "myservername.coplanner.com",
        "Subject": "myservername.coplanner.com",
    "Store": "Root",
        "Store": "Root",
    "Location": "LocalMachine",
        "Location": "LocalMachine",
    "AllowInvalid": "false"
        "AllowInvalid": "false"
    }
    }
}
}
</pre>
</syntaxhighlight>


==ocelot.json==
==ocelot.json==
Hier werden die Routen angepasst.
Hier werden die Routen angepasst.


:* DownstreamScheme: gibt an, ob per http oder https zugegriffen wird
:* DownstreamScheme: Gibt an, ob per http oder https zugegriffen wird.
:* DownstreamPathTemplate: hier wird definiert, wie die URL hinter <DownstreamScheme>://<Host>:<Port> weitergeht. In der Standardkonfiguration hier, wird davon ausgegangen, dass die WebAppUrl des Servers <nowiki>https://localhost:4443/coplanner ist. Ist das /coplanner in der WebAppUrl nicht verwendet, so muss es hier aus den DownStreamPathTemplate entfernt werden.
:* DownstreamPathTemplate: Hier wird definiert, wie die URL hinter <DownstreamScheme>://<Host>:<Port> weitergeht. In der Standardkonfiguration wird davon ausgegangen, dass die WebAppUrl des Servers <nowiki>https://localhost:4443/coplanner ist. Ist das /coplanner in der WebAppUrl nicht verwendet, so muss es hier aus den DownStreamPathTemplate entfernt werden.
:* Host: Hostname unter dem das Service erreichbar ist
:* Host: Hostname unter dem das Service erreichbar ist.
:* Port: Port unter dem das Service erreichbar ist
:* Port: Port unter dem das Service erreichbar ist.


z.B.:
z.B.:
<pre>
<syntaxhighlight lang="json">
"DownstreamPathTemplate": "/coplanner/api/v1.0/commands/{url}",
"DownstreamPathTemplate": "/coplanner/api/v1.0/commands/{url}",
"DownstreamScheme": "https",
"DownstreamScheme": "https",
"DownstreamHostAndPorts": [
"DownstreamHostAndPorts": [
{
    {
  "Host": "servername.coplanner.com",
        "Host": "servername.coplanner.com",
  "Port": 4443
        "Port": 4443
}
    }
</pre>
]
</syntaxhighlight>




Gibt es Routen, wie den Reportserver, bei dem wir mehr als eine Instanz haben, wird das folgendermaßen angegeben:
Gibt es Routen, wie den Reportserver, bei dem mehr als eine Instanz betrieben werden soll, wird das folgendermaßen angegeben:
<pre>
<syntaxhighlight lang="json">
    // reports
// reports
    {
{
      "DownstreamPathTemplate": "/coplanner/api/v1.0/reports/{everything}",
    "DownstreamPathTemplate": "/coplanner/api/v1.0/reports/{everything}",
      "DownstreamScheme": "https",
    "DownstreamScheme": "https",
      "DownstreamHostAndPorts": [
    "DownstreamHostAndPorts": [
         {
         {
          "Host": "servername.coplanner.com",
            "Host": "servername.coplanner.com",
          "Port": 4444
            "Port": 4444
         },
         },
         {
         {
          "Host": "servername.coplanner.com",
            "Host": "servername.coplanner.com",
          "Port": 4445
            "Port": 4445
         }
         }
      ],
    ],
</pre>
</syntaxhighlight>


==NLog.Server.config bzw. NLog.Service.config==
==NLog.Server.config bzw. NLog.Service.config==
Prinzipiell kann hier mehr angepasst werden, aber die grundlegenden Eigenschaften:
Prinzipiell kann hier mehr angepasst werden, aber die grundlegenden Eigenschaften:


:* logDirectory: Verzeichnis ohne den Dateinamen, wo hingeloggt werden soll
:* logDirectory: Verzeichnis ohne den Dateinamen, wo hingeloggt werden soll.
:* fileName: Hier kann man den Dateinamen anpassen oder wenn man möchte auch den gesamten Pfad
:* fileName: Hier kann man den Dateinamen anpassen oder wenn man möchte auch den gesamten Pfad.
:* archiveAboveSize: gibt an, ab welcher Dateigröße eine neue Datei geschrieben wird. Der Standard von 10000000 entspricht 10 MB.
:* archiveAboveSize: Gibt an, ab welcher Dateigröße eine neue Datei geschrieben wird. Der Standard von 10000000 entspricht 10 MB.


==[[Technik:CoPlanner-Server#SvrConfig.xml|SvrConfig.xml]]==
==[[Technik:CoPlanner-Server#SvrConfig.xml|SvrConfig.xml]]==
Zeile 118: Zeile 115:


== Beispielkonfiguration für 2 Report Server Instanzen ==
== Beispielkonfiguration für 2 Report Server Instanzen ==
[https://copsupport.coplanner.com/oc/index.php/s/xmNKyKRYxtbgX4E Beispiel]
[https://oc.coplanner.com/index.php/s/DtC7LdMjgr42s33 Beispiel]

Aktuelle Version vom 2. April 2026, 07:40 Uhr

Hinweis  Bis CoP 11 Release 1 2026. Ab CoP 11 Release 1 2026.gibt es das Report-Gateway um mehrere Reportserver pro CoPlanner Server zu verwenden.


Über das API-Gateway kann z.B. ein CopServer mit zwei Reportservern betrieben werden, auf die mehrere Benutzer gleichmäßig aufgeteilt werden.

Einrichtung

1.) Rest.Client-Ordner aus dem Serververzeichnis in das ApiGateway-Verzeichnis kopieren. 2.) In ApiGateway-Ordner in der Datei appsettings.json die Hosting-URL bzw. den Port festlegen (siehe Konfigurationsdateien) 3.) In ApiGateway-Ordner in der Datei ocelot.json werden die Routen für die dahinterliegenden Services definiert. Dabei sind die Standardrouten, welche angepasst werden müssen:

  • https://localhost:4443/coplanner für den Coplanner Server
  • https://localhost:4444/coplanner für ReportServer 1 und
  • https://localhost:4445/coplanner für ReportServer 2.

Sollten diese unter anderen Ports betrieben werden, sind entsprechend Anpassungen notwendig.


Zwei ReportServer kann man anlegen, indem der ReportServer-Ordner kopiert und mit einer angepassten Konfiguration gestartet wird.

Die Clients sollten sich dann direkt auf die URL des API-Gateways verbinden und nicht direkt auf den Server.

Die Cop.ApiGateway.exe kann direkt gestartet werden mit Doppelklick oder mittels Konsole. Dann läuft sie als Konsolenapp. Sie kann aber auch als Windowsservice mit

sc create <gewünschter Servicename> binPath=<Vollständiger Pfad zur EXE>"

registriert werden und dann über die Windows-Serviceverwaltung verwaltet werden. Alternativ können weitere Parameter direkt beim Anlegen des Service definiert werden - welche es gibt finden Sie in der Microsoft-Dokumentation zu sc create.


Konfigurationsdateien

appsettings.json

WebConfig

  • JwtBearerIssuer: sollte nicht geändert werden
  • JwtBearerIssuerKey: sollte nicht geändert werden
  • PathBase: Sofern für den Aufruf des Gateways eine Erweiterung hinter dem Port notwendig ist, kann diese hier angegeben werden. Will man also z.B. nicht über https://servername.coplanner.com:4446 zugreifen, sondern über https://servername.coplanner.com:4446/coplanner, muss hier /coplanner angegeben werden

Kestrel

  • Endpoints: Hier wird definiert, wie auf das Service zugegriffen wird und, sofern https verwendet wird, welches Zertifikat genutzt werden soll.

Beispiele:

Verwendung bei nur http:

"Http": {
    "Url": "http://+:4448"
}

Verwendung, wenn das Zertifikat in einem Verzeichnis abgelegt wird (muss nicht installiert werden):

"HttpsInlineCertFile": {
    "Url": "https://+:4448",
    "Certificate": {
        "Path": "./MeinZertifikat.pfx",
        "Password": "MeinPasswort"
    }
}

Verwendung, wenn das Zertifikat in einem Zertifikatsspeicher liegt:

"HttpsInlineCertStore": {
    "Url": "https://+:4448",
    "Certificate": {
        "Subject": "myservername.coplanner.com",
        "Store": "Root",
        "Location": "LocalMachine",
        "AllowInvalid": "false"
    }
}

ocelot.json

Hier werden die Routen angepasst.

  • DownstreamScheme: Gibt an, ob per http oder https zugegriffen wird.
  • DownstreamPathTemplate: Hier wird definiert, wie die URL hinter <DownstreamScheme>://<Host>:<Port> weitergeht. In der Standardkonfiguration wird davon ausgegangen, dass die WebAppUrl des Servers <nowiki>https://localhost:4443/coplanner ist. Ist das /coplanner in der WebAppUrl nicht verwendet, so muss es hier aus den DownStreamPathTemplate entfernt werden.
  • Host: Hostname unter dem das Service erreichbar ist.
  • Port: Port unter dem das Service erreichbar ist.

z.B.:

"DownstreamPathTemplate": "/coplanner/api/v1.0/commands/{url}",
"DownstreamScheme": "https",
"DownstreamHostAndPorts": [
    {
        "Host": "servername.coplanner.com",
        "Port": 4443
    }
]


Gibt es Routen, wie den Reportserver, bei dem mehr als eine Instanz betrieben werden soll, wird das folgendermaßen angegeben:

// reports
{
    "DownstreamPathTemplate": "/coplanner/api/v1.0/reports/{everything}",
    "DownstreamScheme": "https",
    "DownstreamHostAndPorts": [
        {
            "Host": "servername.coplanner.com",
            "Port": 4444
        },
        {
            "Host": "servername.coplanner.com",
            "Port": 4445
        }
    ],

NLog.Server.config bzw. NLog.Service.config

Prinzipiell kann hier mehr angepasst werden, aber die grundlegenden Eigenschaften:

  • logDirectory: Verzeichnis ohne den Dateinamen, wo hingeloggt werden soll.
  • fileName: Hier kann man den Dateinamen anpassen oder wenn man möchte auch den gesamten Pfad.
  • archiveAboveSize: Gibt an, ab welcher Dateigröße eine neue Datei geschrieben wird. Der Standard von 10000000 entspricht 10 MB.

SvrConfig.xml

Wenn mehrere Reportserver vorhanden sind, dann wird die ReportServerUrl hier nicht angegeben.

Beispielkonfiguration für 2 Report Server Instanzen

Beispiel