Konfiguration des Servers#

Die Konfiguration des Servers erfolgt entweder in einer .yaml Konfigurationsdatei in einem lokalen Verzeichnis, oder über Environment-Variablen, die vor dem Server Start gesetzt werden.

Die Konfigurationsdatei wird an folgenden Stellen gesucht:

  • /etc/live/config.yaml
  • config/config.yaml
  • ./config.yaml

Einen abweichenden Pfad geben Sie über die Umgebungsvariable LIVE_PATHS_CONFIG_FILE oder das Flag --config-file an.

Die Werte werden in dieser Reihenfolge übersteuert: Konfigurationsdatei → Umgebungsvariablen → CLI-Flags. Umgebungsvariablen tragen alle das Präfix LIVE_.

Parameter und Standardwerte#

server:
  # Der Port, auf dem der Server lauscht (Default 8080)
  port: 8080                              # ENV: LIVE_SERVER_PORT

  # Die Adresse, an die der Server bindet (Default 0.0.0.0)
  bind: 0.0.0.0                           # ENV: LIVE_SERVER_BIND

  # Die externe Basis-URL. Wird zum Erstellen von Links
  # und für die Origin-Bindung (WebAuthn) verwendet.
  url: https://mein.server.de             # ENV: LIVE_SERVER_URL

  # Optionale CORS-Settings (JSON-Array), damit ggf. ein
  # Client auch auf einen anderen Server zugreifen kann.
  cors: []                                # ENV: LIVE_SERVER_CORS_JSON

database:
  # Verbindungs-URL zur CouchDB (Pflicht).
  url: http://live:live@db:5984/live      # ENV: LIVE_DATABASE_URL

  # Optionales Verzeichnis für den Read-Model-Cache.
  cache: ./data/cache                     # ENV: LIVE_DATABASE_CACHE

system:
  # Wenn keine Lizenz angegeben ist,
  # dann läuft der Server im Demo-Modus (max. 50 Aufträge).
  license: "ABCD-1234-..."                # ENV: LIVE_SYSTEM_LICENSE

  # Beim ersten Start auf leerer Datenbank wird ein initiales Admin-Token
  # vergeben und im Log ausgegeben. Sie können dieses Token auch vorgeben,
  # z.B. um in einer Pipeline das Onboarding zu automatisieren.
  # Wenn Sie es nicht setzen, wird eine GUID generiert.
  initialAdminToken: "..."                # ENV: LIVE_SYSTEM_INITIAL_ADMIN_TOKEN

  # Das initiale Admin-Token kann auch mehrfach verwendet werden.
  # Default ist false, dann ist es ein OTP (Einmaltoken).
  initialAdminTokenMultiUse: false        # ENV: LIVE_SYSTEM_INITIAL_ADMIN_TOKEN_MULTI_USE

log:
  # Log-Level: trace | debug | info | warn | error (Default info)
  level: info                             # ENV: LIVE_LOG_LEVEL
  # Im Falle von Containern einfach leerlassen,
  # dann wird wie üblich auf stdout geschrieben.
  file:                                   # ENV: LIVE_LOG_FILE

audit:
  # Eine optionale Datei für das Audit-Log, also wer hat wann
  # fachlich was geändert.
  file:                                   # ENV: LIVE_AUDIT_FILE

Weitere Bereiche sind verfügbar, werden hier aber nicht vertieft: capabilities.{pwa,docs,scalar,mcp,webdav,sftp} (Funktionsschalter), auth.session.*, webauthn.{rpId,rpName,origin}, paths.* (u. a. paths.resourcesPath / LIVE_PATHS_RESOURCES_PATH für optionale OEM-Ressourcen) und locale.

Betrieb hinter einem Reverse Proxy#

Wird der Server hinter einem Reverse Proxy betrieben, beachten Sie:

  • Der Host-Header muss unverändert durchgereicht werden (proxy_set_header Host $host), da er für die WebAuthn-Origin-Bindung benötigt wird.
  • Große Uploads müssen erlaubt sein (client_max_body_size 0 bzw. ein ausreichend hoher Wert), damit Anhänge übertragen werden können.
  • Kein TLS-Intercept: Die TLS-Kette darf nicht aufgebrochen werden (keine SSL-Intercept-Proxies oder HTTPS-scannende Antivirus-Lösungen), sonst bricht die Origin-Bindung.
  • Setzen Sie zusätzlich die externe Basis-URL über server.url / LIVE_SERVER_URL.

Hier die Beispiel-Konfiguration des nginx-Proxys unserer URL https://app.inkasso.live:

server {
    server_name app.inkasso.live;

    # To allow special characters in headers
    ignore_invalid_headers off;

    # Allow any size file to be uploaded.
    # Set to a value such as 1000m; to restrict file size to a specific value
    client_max_body_size 0;

    error_log /var/log/nginx/app.inkasso.live-error.log error;
    access_log /var/log/nginx/app.inkasso.live-access.log combined;

    if ( $is_bot ) { return 410; }
    location /robots.txt { return 200 "User-agent: *\nDisallow: /"; }

    location / { 
        proxy_set_header Host   $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        proxy_connect_timeout   10s;
        proxy_send_timeout      600s;
        proxy_read_timeout      600s;
        proxy_buffering         on;
        proxy_pass http://192.168.10.80:8912;        
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/autodiscover.42i.org/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/autodiscover.42i.org/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
    if ($host = app.inkasso.live) {
        return 301 https://$host$request_uri;
    } # managed by Certbot

    server_name app.inkasso.live;
    listen 80;
    return 404; # managed by Certbot
}