Infrastruktur

Umgebungsvariablen

Diese Seite listet alle Umgebungsvariablen auf, mit denen sich rocklog Edge in einer On-Premise-Installation konfigurieren lässt. Die Variablen werden im Regelfall in der zentralen .env-Datei neben werner-docker/docker-compose.yaml gepflegt und wirken sich auf einen oder mehrere Werner-Dienste aus.

Die Auflistung ist nach Domäne gruppiert. Wo angegeben, kann die Spalte Default als Voreinstellung übernommen werden – Werte ohne Default sind zwingend zu setzen.


Sicherheit

Variablen, die kryptografische Schlüssel oder Passworte enthalten. Sie sollten ausschließlich auf der Zielmaschine vorgehalten und nicht ins Git eingecheckt werden.

WERNER_SECRET_KEY

  • Wo verwendet: werner-backend
  • Default: (nicht gesetzt – muss explizit konfiguriert werden, sobald sensible Werte verarbeitet werden)
  • Wertebereich: Base64-codierter, 32 Byte langer Zufallsschlüssel (256 Bit). Nach Base64-Codierung resultiert das in einer 44 Zeichen langen Zeichenkette mit = als Padding-Zeichen am Ende.
  • Zweck: Master-Schlüssel für die symmetrische Verschlüsselung sensibler Werte in der Tabelle private_system_config (aktuell das SMTP-Authentifizierungspasswort). Verwendet wird AES‑256 im GCM-Modus.

Schlüssel erzeugen:

openssl rand -base64 32

Beispielausgabe (NICHT verwenden):

N+P5b1pQ6uMUHE2Qq8H8b6X4t1Yj1z9rZ4cWk7lz0WI=

Operatives Verhalten:

  • Ist die Variable nicht gesetzt, schlägt jeder Lese- oder Schreibvorgang auf eine als sensibel markierte Konfiguration mit einem klaren Fehler fehl. Nicht-sensible Werte (z. B. Host, Port, Absenderadresse) bleiben weiterhin lesbar.
  • Ein Wechsel des Schlüssels macht zuvor verschlüsselte Werte unentzifferbar. In diesem Fall müssen die betroffenen Werte (z. B. SMTP-Passwort) über die Oberfläche neu gesetzt werden.
  • Der Schlüssel sollte für Test-, Staging- und Produktionsumgebung jeweils eigenständig erzeugt werden.

WERNER_POSTGRES_PASSWORD

  • Wo verwendet: Postgres-Container, werner-backend (für JDBC-URL)
  • Default: postgres
  • Wertebereich: beliebige Zeichenkette
  • Zweck: Passwort des Datenbank-Superusers postgres. In Produktion zwingend zu ändern.

WERNER_KEYCLOAK_DB_PASSWORD

  • Wo verwendet: Keycloak-Container
  • Default: HappyPlanet7
  • Wertebereich: beliebige Zeichenkette
  • Zweck: Passwort des dedizierten Keycloak-Datenbankbenutzers ukeycloak. In Produktion zwingend zu ändern.

WERNER_KEYCLOAK_ADMIN_USER / WERNER_KEYCLOAK_ADMIN_PASSWORD

  • Wo verwendet: Keycloak-Container
  • Defaults: token87bart / HappyJFish7
  • Zweck: Initiale Admin-Zugangsdaten für die Keycloak-Konsole. In Produktion zwingend zu ändern.

Keycloak

Variablen, die das Verhalten von Keycloak und die Anbindung von werner-backend und werner-server an die Keycloak-Instanz steuern.

KC_URL

  • Wo verwendet: werner-backend, werner-server, Keycloak-Container
  • Default: http://localhost:81/keycloak
  • Wertebereich: vollständige URL inklusive Schema, Host, Port und Pfad-Präfix
  • Zweck: Basis-URL der Keycloak-Instanz. werner-backend prüft hierüber Bearer-Token, werner-server leitet Anmeldungen über diese Adresse um.

KC_REALM

  • Wo verwendet: werner-backend, werner-server, viele weitere Komponenten
  • Default: test
  • Wertebereich: Realm-Name, der in Keycloak existiert (z. B. rocklogedge, wtazv, lyon)
  • Zweck: Realm, gegen den authentifiziert wird. Wird zusätzlich als Bestandteil von Container-Volume-Pfaden verwendet, sodass mehrere Realms parallel auf einem Host betrieben werden können.

WERNER_AUTH_REQUIRED

  • Wo verwendet: werner-backend, werner-server
  • Default: true
  • Wertebereich: true | false
  • Zweck: Wenn false, akzeptiert werner-backend Anfragen ohne gültiges Bearer-Token. Sinnvoll für Smoke-Tests und CI; in Produktion zwingend true.

WERNER_KEYCLOAK_PORT

  • Wo verwendet: Keycloak-Container (Hostmapping)
  • Default: 8090
  • Wertebereich: TCP-Portnummer
  • Zweck: Port, unter dem Keycloak auf dem Host erreichbar ist (Container-intern bleibt es 8080).

Datenbank

Konfiguration des PostgreSQL-Containers und der Datenverbindung.

POSTGRES_DB

  • Default: postgres
  • Wertebereich: Name einer PostgreSQL-Datenbank
  • Zweck: Name der Datenbank, in der die Werner-Tabellen angelegt werden.

POSTGRES_USER

  • Default: postgres
  • Zweck: Datenbankbenutzer, den werner-backend verwendet.

WERNER_POSTGRES_PORT

  • Default: 5438
  • Wertebereich: TCP-Portnummer
  • Zweck: Hostport, unter dem die Datenbank von außerhalb des Docker-Netzwerks erreichbar ist (z. B. zur Diagnose mit psql).

WERNER_POSTGRES_VERSION

  • Default: unknown
  • Wertebereich: ein Tag des Images gixxi/werner-postgres
  • Zweck: Image-Version, in der Postgres und sämtliche postinstall-Migrationen gebündelt sind.

WERNER_POSTGRES_LIMIT_CPUS / WERNER_POSTGRES_LIMIT_MEMORY

  • Defaults: 4 / 4gb
  • Zweck: Ressourcenobergrenzen, die Docker dem Postgres-Container einräumt.

DATABASE_URL (werner-server, Entwicklung)

  • Default: (in .env.production gepflegt)
  • Wertebereich: Prisma-Connection-URL nach Schema postgresql://user:pw@host:port/db?schema=public
  • Zweck: Wird ausschließlich vom werner-server-Build verwendet, um das Prisma-Schema zu generieren und Lese-Queries zur Laufzeit auszuführen. In der gewöhnlichen Produktionsumgebung wird der Wert aus der .env-Datei abgeleitet.

JDBC-URL (werner-backend)

  • Wertebereich: vollständiger JDBC-URL, in docker-compose.yaml aus den Postgres-Variablen zusammengesetzt.
  • Zweck: Connection-URL, mit der werner-backend das Hikari-Connection-Pool aufbaut.

werner-backend

Variablen, die ausschließlich werner-backend (das Clojure-Backend) betreffen.

WERNER_BACKEND_PORT

  • Default: 8080
  • Zweck: Hostport, unter dem werner-backend HTTP-Anfragen entgegennimmt.

WERNER_REPL_PORT

  • Default: 4050
  • Zweck: Hostport für das nREPL des Backends. Sollte in Produktion entweder geschlossen oder über eine Firewall geschützt werden.

WERNER_BACKEND_VERSION

  • Default: unknown
  • Zweck: Tag des Images gixxi/werner-backend. Sollte zu WERNER_SERVER_VERSION und WERNER_PWA_VERSION passen.

WERNER_BACKEND_LIMIT_CPUS / WERNER_BACKEND_LIMIT_MEMORY

  • Defaults: 4 / 4gb
  • Zweck: Ressourcenobergrenzen für den Backend-Container.

INTERFACE_TMP_DIR

  • Default: /home/lambdaroyal-anon/werner/tmp-${KC_REALM}
  • Zweck: Hostverzeichnis, das in werner-backend als /tmp/werner eingehängt wird. Hier werden Export-Dateien, Importe und temporäre Artefakte abgelegt.

werner-server

Variablen, die ausschließlich werner-server (das SolidStart-Frontend für Stammdaten und Schnittstellen) betreffen.

WERNER_SERVER_PORT

  • Default: 3000
  • Zweck: Hostport, unter dem werner-server HTTP-Anfragen entgegennimmt.

WERNER_SERVER_VERSION

  • Default: unknown
  • Zweck: Tag des Images gixxi/werner-server.

WERNER_BACKEND_URL

  • Default: http://werner-backend:8080
  • Wertebereich: vollständige URL des werner-backend
  • Zweck: Adresse, unter der werner-server seine eigenen Server-Routen an werner-backend weiterleitet.

WERNER_PWA_URL_PREFIX

  • Default: http://werner-pwa.rocklog.ch
  • Zweck: URL-Präfix, das in werner-server eingebettete Links auf die PWA verwenden (z. B. Deep-Links nach erfolgreicher Stammdatenpflege).

WERNER_PROFILE

  • Default: container
  • Wertebereich: container | library
  • Zweck: Steuert, welche Navigationspunkte sichtbar sind. container ist die Standardeinstellung für Containerwirtschaft, library für Bibliotheksbetrieb.

VITE_MAPBOX_LK

  • Wertebereich: Mapbox-Public-Token (pk.…)
  • Zweck: Wird in der Adress-Suche verwendet, um Vorschläge und Details von Mapbox abzurufen.

VITE_HSTABLE_LK

  • Wertebereich: Lizenzschlüssel der HSTable-Komponente
  • Zweck: Aktiviert die Tabellen-Bibliothek, mit der Stammdatenlisten dargestellt werden.

MAPBOX_SUGGEST_ENDPOINT / MAPBOX_RETRIEVE_ENDPOINT

  • Defaults: https://api.mapbox.com/search/searchbox/v1/suggest / …/retrieve
  • Zweck: REST-Endpunkte der Mapbox Search-Box-API. Werden serverseitig aufgerufen, sodass das Mapbox-Token nicht im Browser landet.

WERNER_SRVER_LIMIT_CPUS / WERNER_SERVER_LIMIT_MEMORY

  • Defaults: 4 / 500m
  • Zweck: Ressourcenobergrenzen für den werner-server-Container. Hinweis: der CPU-Schlüssel enthält im docker-compose absichtlich den Tippfehler WERNER_SRVER_LIMIT_CPUS.

werner-pwa

Variablen, die ausschließlich werner-pwa (die Endgeräte-PWA) betreffen.

WERNER_PWA_PORT

  • Default: 3001
  • Zweck: Hostport, unter dem werner-pwa erreichbar ist.

WERNER_PWA_VERSION

  • Default: unknown
  • Zweck: Tag des Images gixxi/werner-pwa.

WERNER_PWA_APP_NAME

  • Default: rocklog edge
  • Zweck: Name, der in der PWA als Titel und in der Adressleiste angezeigt wird.

VITE_SCANDIT_LICENSE_KEY

  • Wertebereich: Scandit-Lizenzschlüssel
  • Zweck: Aktiviert die Barcode-/Datamatrix-Scanner-Engine in der PWA. Es ist ein Default-Schlüssel hinterlegt, der für Demo-Zwecke ausreicht; produktive Installationen sollten einen eigenen Schlüssel verwenden.

WERNER_PWA_LIMIT_CPUS / WERNER_PWA_LIMIT_MEMORY

  • Defaults: 1 / 300m
  • Zweck: Ressourcenobergrenzen für den PWA-Container.

Laufzeit / Allgemein

Variablen, die mehrere oder alle Container betreffen.

TZ

  • Default: Europe/Zurich
  • Wertebereich: IANA-Zeitzonenkennung (z. B. Europe/Berlin, UTC)
  • Zweck: Zeitzone, die in jedem Container als Systemzeit angenommen wird. Beeinflusst Logzeitstempel und die Anzeige von Datumswerten.

WERNER_NGINX_TEST_PORT

  • Default: 80
  • Zweck: Hostport, unter dem der nginx-test-Reverse-Proxy beim Profil alpha exponiert wird. Nur für Testumgebungen relevant.

WERNER_POSTINSTALL_VERSION

  • Default: unknown
  • Zweck: Tag des Images gixxi/werner-postinstall. Dieses Image führt einmalige SQL-Migrationen aus, bevor werner-backend gestartet wird.

.env-Beispiel

Eine minimal-typische .env-Datei in werner-docker/ sieht in einer Produktionsumgebung etwa so aus:

# Versionen aller Werner-Images, in der Regel synchron getaktet
WERNER_BACKEND_VERSION=3.2.133
WERNER_SERVER_VERSION=3.2.133
WERNER_PWA_VERSION=3.2.133
WERNER_POSTGRES_VERSION=3.2.133
WERNER_POSTINSTALL_VERSION=3.2.133

# Realm
KC_URL=https://auth.example.com/keycloak
KC_REALM=customerXY

# Sicherheit
WERNER_SECRET_KEY=<openssl rand -base64 32>
WERNER_POSTGRES_PASSWORD=<starkes passwort>
WERNER_KEYCLOAK_DB_PASSWORD=<starkes passwort>
WERNER_KEYCLOAK_ADMIN_USER=<admin-name>
WERNER_KEYCLOAK_ADMIN_PASSWORD=<starkes passwort>

# Lizenzen
VITE_SCANDIT_LICENSE_KEY=<scandit key>
VITE_HSTABLE_LK=<hstable key>
VITE_MAPBOX_LK=<mapbox key>

# Pfad für Datenaustausch (Importe, Exporte, ggf. FTP-Mirror)
INTERFACE_TMP_DIR=/srv/werner/io
Previous
Installation on Premise