feat(quick-260909-dgj): Migrationsverbindung von Laufzeitverbindung trennen (Task 2/4)

- apps/api/scripts/migrate-and-start.sh: TESSERA_MIGRATE_DATABASE_URL fuer
  den Migrationsschritt, DATABASE_URL bleibt unveraendert fuer den
  Laufzeitschritt; leer/nicht gesetzt = bisheriges Verhalten
- Dockerfile kopiert scripts/ und ruft das Skript als CMD auf; exec statt
  &&-Verkettung, damit Signale den Node-Prozess erreichen
- docker-compose.yml/.prod.yml reichen TESSERA_MIGRATE_DATABASE_URL durch
  (leerer Vorgabewert); docker-compose.dev.yml/.ci.yml unveraendert
- .env.example erklaert beide Variablen mit Platzhaltern, Umstellung bleibt
  auskommentiert
- 5 Tests in start-script.spec.ts (rot vor dem Skript, jetzt gruen)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FYZcd3SSmo14QTqWx2KKzU
This commit is contained in:
2026-09-09 10:00:45 +02:00
parent b3375ae016
commit a5f99e52e3
6 changed files with 159 additions and 1 deletions
+9
View File
@@ -2,6 +2,15 @@ DB_PASSWORD=your_db_password_here
DATABASE_URL=postgresql://tessera:your_db_password_here@db:5432/tessera
NODE_ENV=development
# DATABASE_URL ist die Verbindung, mit der die laufende Anwendung arbeitet.
# TESSERA_MIGRATE_DATABASE_URL ist die separate Verbindung, mit der beim
# Containerstart NUR "prisma migrate deploy" laeuft. Bleibt sie leer, laeuft
# alles wie bisher — beide Schritte nutzen DATABASE_URL. Die getrennte
# Belegung ist erst sinnvoll, wenn docs/mandantentrennung-datenbankrolle.md
# vollstaendig abgearbeitet ist; vorher wuerde eine ungeprüfte Umstellung die
# Anwendung von ihren eigenen Daten aussperren.
# TESSERA_MIGRATE_DATABASE_URL=postgresql://tessera:your_db_password_here@db:5432/tessera
# Encrypts stored credentials (LDAP bind password, calendar and mailbox logins).
# Required - the stack refuses to start without it.
# Generate one with: openssl rand -hex 32