Skip to content

Produktionsbetrieb ​

Produktions-Compose-Datei ​

Für den Produktionsbetrieb verwende:

bash
docker compose -f deployment/docker-compose.prod.yml up -d

Die Produktionskonfiguration unterscheidet sich von der Entwicklungsumgebung durch:

  • Keine Quell-Volume-Mounts (gebaut aus Images)
  • restart: unless-stopped für alle Dienste
  • Ressourcenlimits (CPU, Speicher)
  • Kein direkter Port-Zugriff auf Datenbank und MinIO

Secrets in deployment/.env ​

Alle Konfigurationswerte und Secrets stehen in der Datei deployment/.env. Sie entsteht als Kopie von deployment/.env.example, ist per .gitignore vom Repository ausgeschlossen und ist der einzige Ort, an dem Secrets auf dem Server auf der Platte liegen:

bash
cd deployment
cp .env.example .env
# .env ausfüllen — Werte aus deinem Passwort-Manager
bash scripts/deploy.sh

Das Deploy-Skript liest .env direkt; es gibt keine verschlüsselte Secrets-Datei im Repository und keinen Entschlüsselungsschritt. Die Werte gehören in einen Passwort-Manager, nicht in Git (für die Referenzinstallation ist das der Projekt-Tresor Clavis V1 in 1Password). JWT_SECRET_KEY und HMAC_AUDIT_KEY werden für jede Installation neu erzeugt, z. B. mit openssl rand -base64 48.

TLS und Reverse Proxy ​

Der Anwendungs-Stack öffnet keine Host-Ports und terminiert kein TLS. Davor steht ein Reverse Proxy, der die eine öffentliche Adresse (z. B. app.clavis-rallye.de) per HTTPS bedient und nach Pfad weiterleitet:

PfadZiel
/api/* (inklusive WebSocket-Upgrade)clavis-api:8000
alles andereclavis-web:80

Die Anwendung ist auf eine Origin ausgelegt: API und Frontend laufen unter derselben Domain, die API unter dem Pfad /api. Die Referenzinstallation nutzt dafür den Nginx Proxy Manager des Servers mit einem Let's-Encrypt-Zertifikat. Wer stattdessen den mitgelieferten All-in-one-Stack betreibt (docker-compose.yml im Wurzelverzeichnis des App-Repositories), bekommt dieselbe Weiterleitung über den enthaltenen Caddy-Dienst; dessen Caddyfile enthält einen auskommentierten Produktionsblock mit TLS-Einstellungen nach BSI TR-02102, in den die eigene Domain einzutragen ist.

Umgebungsvariablen für Produktion ​

VariableBeschreibung
IMAGE_TAGVersion der Container-Images aus der Registry (Pflicht, siehe Updates)
DATABASE_URLVerbindungs-URL der PostgreSQL-Datenbank inklusive Passwort
MINIO_ACCESS_KEYMinIO-Zugangsdaten
MINIO_SECRET_KEYMinIO-Geheimschlüssel
JWT_SECRET_KEYJWT-Signaturschlüssel (≥32 Zeichen, zufällig)
HMAC_AUDIT_KEYHMAC-Schlüssel für Audit-Log-Kette
CORS_ORIGINS, WEBAUTHN_RP_ID, WEBAUTHN_ORIGINÖffentliche Domain bzw. Origin der Installation (z. B. app.clavis-rallye.de / https://app.clavis-rallye.de)

Alle [SECRET]-markierten Variablen aus deployment/.env.example müssen gesetzt werden.