Skip to content

Konfiguration

Die Konfiguration erfolgt in der Datei appsettings.json. Die nachfolgenden Unterkapitel beschreiben jeweils einen Toplevel-Eintrag.

Hinweis: Pfadangaben müssen mit doppelte Backslashes geschrieben werden.

Serilog

{
  "Serilog": {
    "MinimumLevel": {
      "Default": "[LEVEL]"
    },
    "WriteTo": [
      {
        "Name": "Console"
      },
      {
        "Name": "File",
        "Args": {
          "rollingInterval": "Day",
          "path": "[PATH]"
        }
      }
    ]
  }
}

Dies ist die Serilog-Konfiguration. Serilog wird insbesondere für das File-Logging gebraucht.

MinimumLevel.Default

Folgende Log-Level werden unterstützt:

  • Verbose
  • Debug
  • Information
  • Warning
  • Error
  • Fatal

Die Log-Level Verbose und Debug sollten nur für Fehlersuche gesetzt werden, da die geloggte Menge gross werden kann.

WriteTo.Args.Path

Hier wird der Pfad zum Log-File gesetzt. Bsp.: C:\\temp\\logs-cmi-reporting-service\\cmi-reporting-service-.log

Weitere Konfigurationen

Weitere Konfigurationsmöglichkeiten siehe https://github.com/serilog/serilog-settings-configuration.


ForwardedHeaders

Viele Proxies senden zusätzliche http-Header, um die Herkunft einer Anfrage dem Zielsystem mitzuteilen:

Der Service kann konfiguriert werden, diese Header anstatt der Verbindungsinformationen des Proxies zu verwenden. Wenn keine Konfiguration vorgenommen wird, werden die Header nicht verwendet.

Das Verhalten zu den Forward-Headern wird in der Sektion ForwardedHeaders konfiguriert. Es stehen alle Optionen der Klasse ForwardedHeadersOptions zur Verfügung.

In diesem Abschnitt wird die Dokumentation der Klasse ForwardedHeadersOptions von Microsoft nicht wiederholt, es werden nur Konfigurationshinweise zu einigen Optionen dokumentiert.

  • ForwardedHeaders: Wenn mehrere Optionen dieses Flags verwendet werden sollen, können die Flags kommagetrennt aufgeführt werden. All aktiviert alle Optionen.
  • KnownProxies: Bekannte Proxies können als Array von Ip-Adressen angegeben werden.
  • KnownNetworks: Bekannte Netzwerke können als Array in der CIDR-Notation 0.0.0.0/0 / 0:0:0:0:0:0:0:0/0 angegeben werden.
{
  "ForwardedHeaders": {
    "ForwardedHeaders": "XForwardedFor, XForwardedHost, XForwardedProto",
    "KnownProxies": [
      "10.0.0.6",
      "10.0.0.7"
    ],
    "KnownNetworks": [
      "10.0.0.0/8",
      "::1/128"
    ]
  }
}

Beispielkonfiguration nginx

```nginx configuration server { server_name reporting.my.domain; listen [::]:443 ssl http2; listen 443 ssl http2;

    client_max_body_size 10G;
    client_body_timeout 6000m;
    fastcgi_buffers 64 4K;

    location / {
        proxy_pass http://localhost:65432/;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header X-Nginx-Proxy true;
        proxy_redirect off;
   }

}

server { server_name reporting.my.domain; listen 80; listen [::]:80;

    return 301 https://$host$request_uri;

}


---

## Mandant (Tenant)
```json
{
    "Tenants": {
        "prod": {
            "OwinPrivateUri": "https://metatool.cmiag.ch:10003",
            "OpenIdConnectConfig": {
                "StsUri": "https://sts.cmiag.ch/prod/identity",
                "ClientId": "cmi-reporting-service"
            }
        }
    }
}

In der "Tenants"-Sektion werden einzelne Mandanten als eigenständige JSON-Objekte innerhalb des "Tenants"-Objekts definiert. Der Schlüssel des jeweiligen Objekts entspricht dabei dem Namen des Mandanten. Hier ist ein Beispiel mit den Mandanten prod und test:

{
  "Tenants": {d
    "prod": {
      ...
    },
    "test": {
      ...
    }
  }
}

Die Konfiguration der Mandanten kann auf zwei Arten erfolgen:

  • Mit dem Schlüssel Tenants, wie im Beispiel sichtbar. Die einzelnen Mandanten werden in Subschlüsseln abgebildet, im Beispiel ist das der Mandant prod.
  • Mit dem Schlüssel TenantConfigurationDirectory, wo ein Pfad zu einem Ordner angegeben werden kann. Die einzelnen Mandanten werden in einzelnen Dateien abgebildet, z.B. prod.json. Der Inhalt der Datei entspricht dem Wert des Schlüssels des Mandanten.

OwinPrivateUri

URI unter der der Owin Private Port des CMI Servers erreicht werden kann.

OpenIdConnectConfig

Das OpenIdConnectConfig-Objekt muss mit den folgenden Properties abgefüllt werden:

  • StsUri: URI unter der der STS erreicht werden kann, beinhaltet die Mandantenkennung gemäss Konfiguration STS. Beispiel.: https://sts3.cloud.ch/<MANDANT>/identity
  • ClientId: ClientId, die im STS für den Reporting Service vergeben wurde. Die Minimalkonfiguration vom STS ist hier zu finden.

Datenbank

{
    "DatabaseProvider": "MSSQL",
    "ConnectionStrings": {
        "MSSQL": "Server=localhost;Initial Catalog=reporting;User Id=sa;Password=supersecretpassword;Encrypt=False"
    }
}

Der CMI Reporting Service speichert Informationen für sich und von den Mandanten in einer Datenbank ab.

Die einzelnen Konfigurationswerte sind:

  • DatabaseProvider: Technologie der verwendeten Datenbank, es gibt die Werte MSSQL und PostgreSQL.
  • ConnectionStrings: Beinhaltet Connection-Strings. Es wird nur der Schlüssel berücksichtigt, der in DatabaseProvider konfiguriert wurde und dieser muss zwingend angegeben werden.

Diverses

Backup

Da der CMI Reporting Service über eine eigene Datenbank verfügt, sollte diese in der Backup-Strategie berücksichtigt werden.