docker-compose.yml reicht zwei nötige Umgebungsvariablen nicht durch #43

Closed
opened 2026-09-01 13:42:41 +00:00 by florian.wilde · 1 comment
Owner

Problem

Der Dienst app in der docker-compose.yml zählt seine Umgebungsvariablen einzeln auf und hat kein env_file:. Zwei mit v1.11.0 eingeführte Werte fehlen dort:

  • ERSTEINRICHTUNG_GEHEIMNIS
  • VERTRAUE_PROXY

Wer sie laut .env.example und INSTALLATION.md in die .env einträgt, bringt sie damit nicht in den Container. Die Anwendung sieht sie nie.

Folgen

  • VERTRAUE_PROXY fehlt still. Die Anmeldesperre zählt dann nur nach E-Mail-Adresse statt zusätzlich nach Anschluss. Es gibt eine Logzeile beim ersten Mal, aber nichts, was im Betrieb auffällt.
  • ERSTEINRICHTUNG_GEHEIMNIS fehlt lauter. Bei einer Neuinstallation ließe sich der erste Zugang nicht anlegen, und die Meldung verweist auf eine .env, in der der Wert korrekt steht — man sucht an der falschen Stelle.

Die Dokumentation aus v1.11.0 ist an dieser Stelle also schlicht falsch.

Umsetzung

Beide Variablen in den environment:-Block des Dienstes app aufnehmen, mit denselben Vorgaben wie die übrigen:

      ERSTEINRICHTUNG_GEHEIMNIS: ${ERSTEINRICHTUNG_GEHEIMNIS:-}
      VERTRAUE_PROXY: ${VERTRAUE_PROXY:-}

Bewusst ohne Vorgabewert true bei VERTRAUE_PROXY: Die Voreinstellung soll die strengere bleiben, und wer einen Proxy davorstellt, sagt es ausdrücklich.

Bei der Gelegenheit prüfen, ob weitere in .env.example dokumentierte Werte im Compose-Dienst fehlen — derselbe Fehler kann sich anderswo wiederholen.

Akzeptanzkriterien

  • docker compose config zeigt beide Variablen beim Dienst app.
  • Ein Test oder Prüfskript stellt sicher, dass jede in .env.example dokumentierte Variable, die die Anwendung liest, auch durchgereicht wird — sonst wiederholt sich das beim nächsten neuen Wert.
  • INSTALLATION.md erwähnt, dass die docker-compose.yml die Werte einzeln durchreicht.
## Problem Der Dienst `app` in der `docker-compose.yml` zählt seine Umgebungsvariablen einzeln auf und hat **kein** `env_file:`. Zwei mit v1.11.0 eingeführte Werte fehlen dort: - `ERSTEINRICHTUNG_GEHEIMNIS` - `VERTRAUE_PROXY` Wer sie laut `.env.example` und `INSTALLATION.md` in die `.env` einträgt, bringt sie damit **nicht** in den Container. Die Anwendung sieht sie nie. ## Folgen - **`VERTRAUE_PROXY` fehlt still.** Die Anmeldesperre zählt dann nur nach E-Mail-Adresse statt zusätzlich nach Anschluss. Es gibt eine Logzeile beim ersten Mal, aber nichts, was im Betrieb auffällt. - **`ERSTEINRICHTUNG_GEHEIMNIS` fehlt lauter.** Bei einer Neuinstallation ließe sich der erste Zugang nicht anlegen, und die Meldung verweist auf eine `.env`, in der der Wert korrekt steht — man sucht an der falschen Stelle. Die Dokumentation aus v1.11.0 ist an dieser Stelle also schlicht falsch. ## Umsetzung Beide Variablen in den `environment:`-Block des Dienstes `app` aufnehmen, mit denselben Vorgaben wie die übrigen: ```yaml ERSTEINRICHTUNG_GEHEIMNIS: ${ERSTEINRICHTUNG_GEHEIMNIS:-} VERTRAUE_PROXY: ${VERTRAUE_PROXY:-} ``` Bewusst ohne Vorgabewert `true` bei `VERTRAUE_PROXY`: Die Voreinstellung soll die strengere bleiben, und wer einen Proxy davorstellt, sagt es ausdrücklich. Bei der Gelegenheit prüfen, ob weitere in `.env.example` dokumentierte Werte im Compose-Dienst fehlen — derselbe Fehler kann sich anderswo wiederholen. ## Akzeptanzkriterien - `docker compose config` zeigt beide Variablen beim Dienst `app`. - Ein Test oder Prüfskript stellt sicher, dass jede in `.env.example` dokumentierte Variable, die die Anwendung liest, auch durchgereicht wird — sonst wiederholt sich das beim nächsten neuen Wert. - `INSTALLATION.md` erwähnt, dass die `docker-compose.yml` die Werte einzeln durchreicht.
florian.wilde added the in-arbeit label 2026-09-01 14:09:40 +00:00
florian.wilde started working 2026-09-01 14:09:53 +00:00
florian.wilde worked for 2 minutes 2026-09-01 14:12:44 +00:00
Author
Owner

🚀 Umgesetzt und nach main übernommen.

Vorgehen

  1. Beide Seiten erhoben: Was liest env.ts aus, was gibt die Compose-Datei mit? Dabei kam ein dritter fehlender Wert dazu — S3_SSE aus #42, gerade erst eingeführt und schon in derselben Falle.
  2. Alle drei ergänzt. VERTRAUE_PROXY bewusst ohne Vorgabe true: Die strengere Einstellung bleibt die Voreinstellung.
  3. tests/umgebung-durchreichen.test.ts gebaut — der eigentliche Ertrag.
  4. Hinweis in INSTALLATION.md, Schritt 3: Die .env allein genügt nicht.

Der Test vergleicht, statt aufzuzählen. Er liest links, was env.ts ausliest (auch über pflicht(), zahl(), schalter(), schluessel32()), rechts, was die Compose-Datei mitgibt, und meldet die Differenz. Eine feste Liste hätte dasselbe Problem gehabt wie die Compose-Datei: Sie veraltet, sobald jemand einen Wert hinzufügt.

Dazu ein Test, der sicherstellt, dass die Erkennung überhaupt etwas findet — sonst stünde die Prüfung grün da und prüfte nichts. Das ist mir in dieser Sitzung schon zweimal passiert.

Geprüft: 736 Unit-Tests · tsc sauber · Lint sauber · drei Mutationen, jede wird rot.

Für das Livesystem: Nach dem Ausrollen kann der app:-Block aus deiner docker-compose.override.yml weg — die Werte kommen jetzt aus der regulären Datei. Der minio:-Block entfällt mit #42.

Pull Request: #50 (gemergt)

🚀 **Umgesetzt und nach `main` übernommen.** <!-- claude-status pr: 50 --> **Vorgehen** 1. Beide Seiten erhoben: Was liest `env.ts` aus, was gibt die Compose-Datei mit? Dabei kam ein dritter fehlender Wert dazu — `S3_SSE` aus #42, gerade erst eingeführt und schon in derselben Falle. 2. Alle drei ergänzt. `VERTRAUE_PROXY` bewusst **ohne** Vorgabe `true`: Die strengere Einstellung bleibt die Voreinstellung. 3. `tests/umgebung-durchreichen.test.ts` gebaut — der eigentliche Ertrag. 4. Hinweis in `INSTALLATION.md`, Schritt 3: Die `.env` allein genügt nicht. **Der Test vergleicht, statt aufzuzählen.** Er liest links, was `env.ts` ausliest (auch über `pflicht()`, `zahl()`, `schalter()`, `schluessel32()`), rechts, was die Compose-Datei mitgibt, und meldet die Differenz. Eine feste Liste hätte dasselbe Problem gehabt wie die Compose-Datei: Sie veraltet, sobald jemand einen Wert hinzufügt. Dazu ein Test, der sicherstellt, dass die Erkennung überhaupt etwas findet — sonst stünde die Prüfung grün da und prüfte nichts. Das ist mir in dieser Sitzung schon zweimal passiert. **Geprüft:** 736 Unit-Tests · `tsc` sauber · Lint sauber · drei Mutationen, jede wird rot. **Für das Livesystem:** Nach dem Ausrollen kann der `app:`-Block aus deiner `docker-compose.override.yml` weg — die Werte kommen jetzt aus der regulären Datei. Der `minio:`-Block entfällt mit #42. **Pull Request:** #50 (gemergt)
florian.wilde removed the in-arbeit label 2026-09-01 14:13:30 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Total Time Spent: 2 minutes
florian.wilde
2 minutes
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: florian.wilde/betreuungs-cockpit#43