build(quick-261009-p0m): Laufzeitabbilder ohne Entwicklungswerkzeuge

- api: eigene Stufe prod-deps (nur Betriebsabhaengigkeiten, Prisma-Client dort erzeugt), Laufzeitstufe direkt von node:24-alpine
- api und web: npm, npx, corepack und yarn des Node-Abbilds entfernt
- api-Abbild 1,59 auf 1,12 GB; Fundzahl 3 kritisch/45 hoch auf 0 kritisch/6 hoch
- Beleg: Start gegen frische Datenbank (63 Migrationen), Rauchtests am neuen Stack
- Sicherheitsprotokoll, Betriebs- und Entwicklungsanleitung, CHANGELOG

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-10-09 20:29:00 +02:00
parent 072f9551dc
commit 2a8a7d4270
6 changed files with 65 additions and 12 deletions
+8
View File
@@ -410,6 +410,14 @@ protokolliert die durchgelaufenen Prisma-Migrationen sowie zuletzt
Kanal und Kurzkennung des Standes, der gerade läuft (siehe Kapitel 9). Erst danach
startet `web`, weil `depends_on: api: condition: service_healthy` das erzwingt.
**Befehle im Container:** Die Container von `api` und `web` enthalten keine Paketverwaltung
(kein npm, pnpm, npx oder yarn) und keine Entwicklungswerkzeuge – das Abbild trägt nur, was zum
Laufen nötig ist (und ist dadurch beim Server-Abbild deutlich kleiner; Näheres im
[Sicherheitsprotokoll](sicherheitsprotokoll.md)). Befehle im Container laufen deshalb direkt mit
`node`, zum Beispiel `docker compose exec api node -e "console.log('ok')"`. Ein Befehl wie
`docker compose exec api pnpm …` oder `… npm …` funktioniert nicht mehr. Die Migrationen führt
weiterhin das Startskript aus (Kapitel 5), dafür müssen Sie nichts von Hand tun.
| Symptom | Wahrscheinliche Ursache | Prüfen / Beheben |
|---|---|---|
| `docker compose up` bricht sofort ab, ohne dass ein Container startet, mit einer Meldung zu `TESSERA_ENCRYPTION_KEY` | Variable fehlt in `.env` – Compose selbst verweigert die Variablen-Interpolation (`${TESSERA_ENCRYPTION_KEY:?...}`) | `TESSERA_ENCRYPTION_KEY` setzen (siehe Kapitel 2), danach erneut starten. |