Konfiguration

Parameter

Folgende Parameter können für die Collector App konfiguriert werden:

Parameter Beschreibung Default
host
Die IP Adresse des Interface über das der Webserver der App zur Verfügung gestellt werden soll. Wird localhost gewählt, ist die App nur von dem Server, auf dem sie installiert wurde, erreichbar. Standardmäßig bindet die App an alle Interfaces und ist somit von außen erreichbar.
0.0.0.0
port
Der Port auf welchem der Webserver der App laufen soll
4000
tokenSecret
Der Schlüssel, mit dem der User Cookie signiert wird. Die mindestlänge beträgt 32 Zeichen.
-
encryptionKey
Der Schlüssel, mit dem Collector-Api-Tokens verschlüsselt und Benutzer-Passwörter gehashed in der Datenbank gespeichert werden. Die mindestlänge beträgt 32 Zeichen.
-
corsOrigin
Die IP Adressen oder Domains unter denen die Collector App über das Netzwerk erreichbar ist. Dies dient der Sicherheit. Anfragen von Web-Seiten mit einer andren IP oder Domain werden geblockt. Mehrere IP Adressen oder Daomains werden über ein ; getrennt
http://localhost:4000
apiURL
Die Url zum Collector App Graphql-Server. Diese Konfiguration ist für das das Frontend. Das Backend startet die API stets unter der Route /api/graphql
http://localhost:4000/api/graphql
wsUrl
Die Url zum Collector App Web-Socket. Diese Konfiguration ist für das das Frontend. Das Backend startet den Web-Socket stets unter der Route /api/subscriptions
ws://localhost:4000/api/subscriptions
database
Es können verschiedene SQL Datenbanken konfiguriert werden wie hier beschrieben
typeorm SQLite config

Die Collector App benötigt eine Datenbank, um Nutzer und Einstellungen zu speichern. Hierfür können verschiedene SQL Datenbanken-Management-Systeme konfiguriert werden. Standardmäßig verwendet die Collector App eine SQLite Datenbank in Form einer Datei. Es wird also kein Datenbank Server benötigt.

Es gibt verschiedene Möglichkeiten die Collector App zu konfigurieren die im Folgenden erläutert werden.

Sichere Web-Kommunikation (TLS)

Der Web/API Server der Collector App läuft unverschlüsselt (http). Es lässt sich auch keine Verschlüsselung (https) konfigurieren. Das hat den Hintergrund, da sonst der Konfigurationsaufwand, vor allem durch das Zertifikatsmanagement, deutlich komplizierter wäre. In einem vertrauenswürdigen, internen Netzwerk kann der unverschlüsselte Betrieb unter Umständen toleriert werden.

Warning

Sobald die Collector App in einem Netzwerk betrieben wird, auf das auch nicht vertrauenswürdige Personen Zugriff haben könnten oder gar im Internet, ist eine verschlüsselt sehr wichtig, da sonst übertragene Passwörter mitgelesen werden können!

Um die Collector App via TLS (https) zu betreiben, wird der Web-Server nginx empfohlen. Dieser kann als so genannter Reverse Proxy fungieren. Dabei konfiguriert man die Collector App so, dass sie nur unter localhost oder einem sicheren VPN läuft. Nginx wird auf dem selben Server oder auf einem im VPN installiert und verbindet sich mit der Collector App über das unverschlüsselt http Protokoll. Nach außen hin zu dem unsicheren Netzwerk stellt nginx einen sicheren https Server bereit. Dadurch ist nginx in der Lage die Anfragen die über das sichere Protokoll kommen an die Collector weiterzuleiten.

Beispiel Nginx Konfiguration als Reverse Proxy für die Collector App:

events {}
http {

  upstream collector_app {
      server {http_collector_url};
  }

  map $http_upgrade $connection_upgrade {
          default upgrade;
          ''      close;
  }

# Anfragen an http werden auf https umgeleitet
  server {
      listen 0.0.0.0:80;
      server_name {server_name};
      server_tokens off;
      return 301 https://$host$request_uri;
  }

# Der sichere https server
  server {
      listen 443 ssl;
      ssl_certificate {path_to_cert};
      ssl_certificate_key {path_to_key};

      ssl_protocols TLSv1.2 TLSv1.1 TLSv1;

      server_name {server_name};
      access_log /var/log/nginx/myapp.log;
      error_log /var/log/nginx/myapp_error.log;

      location /collector-app {
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header Host $http_host;
         proxy_set_header X-NginX-Proxy true;
         proxy_set_header X-Ssl on;

         proxy_pass http://collector_app/collector-app;
      }

      location /api/ {
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header Host $http_host;
         proxy_set_header X-NginX-Proxy true;
         proxy_set_header X-Ssl on;

         proxy_pass http://collector_app/api/;
      }

      location /api/subscriptions {
         proxy_set_header X-Real-IP $remote_addr;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header Host $host;
         proxy_http_version 1.1;
         proxy_set_header Upgrade $http_upgrade;
         proxy_set_header Connection $connection_upgrade;
         proxy_connect_timeout 7d;
         proxy_send_timeout 7d;
         proxy_read_timeout 7d;


         proxy_pass http://collector_app/api/subscriptions;
      }

      location / {
          return 301 /collector_app/;
      }
  }
}

Der Wert für die Collector App Url {http_collector_url} und den nginx host name {server_name} müssen entsprechend konfiguriert werden. Außerdem benötigt man ein signiertes Zertifikat {path_to_cert} und Schlüssel {path_to_key}. Wird die Collector App übers Internet betrieben, kann der Zertifikatsdienst Let's Encrypt verwendet werden.

Zu Testzwecken kann auch ein selbst signiertes Zertifikat erstellt werden:

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365

JSON Datei

Die Default-Konfigurationsdatei befindet sich

  • unter Windows im App Data Verzeichnis: %appdata%/iTE-SI/Collector-App/config/default.json
  • und unter Docker/Linux /etc/collector-app/default.json

Defaultmäßig hat die Datei folgenden Inhalt:

{
  "host": "0.0.0.0",
  "port": 4000,
  "tokenSecret": "this-is-a-secret-value-with-at-least-32-characters",
  "encryptionKey": "e44c966f21b9e1577802464f8924e6a37e3e9751fa01304213b2f845d8841d61",
  "corsOrigin": "http://localhost:4000",
  "apiUrl": "http://localhost:4000/api/graphql",
  "wsUrl": "ws://localhost:4000/api/subscriptions",
  "database": {
    "type": "sqlite",
    "database": "/var/lib/collector-app/db.sqlite3"
  }
}

Im Abschnitt database lassen sich unterschiedlich SQL Datenbanken konfigurieren. Hierfür wird auf die Doku von typeorm verwiesen: https://github.com/typeorm/typeorm/blob/0.2.45/docs/connection-options.md

Standardmäßig wird eine sqlite3 Datenbankdatei verwendet, damit die Collector App, ohne andere Abhängigkeiten, eigenständig betrieben werden kann. Für die Performance der App ist diese Datenbank in der Regel vollkommen ausreichend.

Custom Konfiguration

Möchte man die Standard-Einstellungen anpassen, dann sollte man dies nicht nicht der default.json Datei tun, sondern man erstellt eine Kopie production.json im selben Verzeichnis. Diese Datei kann nun nach belieben angepasst werden.

Info

Es wird empfolen, nach der Installation die beiden Secrets tokenSecret und encryptionKey zu ändern.

Environment Variablen

Für das Deployment via Docker Container aber auch zum setzen der Secret-Keys eigenen sich vor allem Environment Variablen. Ist eine Variable gesetzt wird sie gegenüber dem Wert in der Konfigurationsdatei bevorzugt verwendet.

Allgemeine Environment Variablen

  • COLLECTOR_APP_HOST
  • COLLECTOR_APP_PORT
  • COLLECTOR_APP_TOKEN_SECRET
  • COLLECTOR_APP_ENCRYPTION_KEY
  • COLLECTOR_APP_CORS_ORIGIN
  • COLLECTOR_APP_PUBLIC_GRAPHQL_URL
  • COLLECTOR_APP_PUBLIC_WS_URL

Datenbank Environment Variablen

Zur Konfiguration der Datenbank werden die Typeorm Environment Variablen gesetzt wie hier beschrieben.

  • TYPEORM_CACHE
  • TYPEORM_CACHE_ALWAYS_ENABLED
  • TYPEORM_CACHE_DURATION
  • TYPEORM_CACHE_OPTIONS
  • TYPEORM_CONNECTION
  • TYPEORM_DATABASE
  • TYPEORM_DEBUG
  • TYPEORM_DRIVER_EXTRA
  • TYPEORM_HOST
  • TYPEORM_LOGGER
  • TYPEORM_LOGGING
  • TYPEORM_MAX_QUERY_EXECUTION_TIME
  • TYPEORM_PASSWORD
  • TYPEORM_PORT
  • TYPEORM_SCHEMA
  • TYPEORM_SID
  • TYPEORM_SUBSCRIBERS
  • TYPEORM_SUBSCRIBERS_DIR
  • TYPEORM_SYNCHRONIZE
  • TYPEORM_URL
  • TYPEORM_USERNAME
  • TYPEORM_UUID_EXTENSION