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 zwingendtrue.
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.productiongepflegt) - 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.yamlaus 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 zuWERNER_SERVER_VERSIONundWERNER_PWA_VERSIONpassen.
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/wernereingehä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.
containerist die Standardeinstellung für Containerwirtschaft,libraryfü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 Profilalphaexponiert 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