Files
music-hub/specs/production-hardening.md
Robin Choice 3be8d90a81 chore: session checkpoint 2026-06-10
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-10 14:16:44 +02:00

3.2 KiB

Production Hardening

Status: Active Repo: musichub Erstellt: 2026-06-09

Ziel

Music Hub von „läuft im Test" auf produktionsreif für echte externe Klienten bringen — ohne Workarounds beim Login und ohne öffentlich erreichbare Datenbank.

Warum

Die App ist feature-reich und live auf hub.mydrugismusic.com, aber zwei Produktions-Blocker stehen seit ~April offen (am 2026-06-09 via Coolify-API verifiziert):

  • Kein echter E-Mail-Versand: RESEND_API_KEY ist in der API-App nicht gesetzt. email.ts fällt auf Logging zurück → Magic Links erreichen niemanden. Ohne das kann sich kein neuer Nutzer real einloggen.
  • DB öffentlich erreichbar: Postgres ist is_public: true auf Port 15432. War ursprünglich nur für den Test geöffnet, weil der API-Container den internen Hostname nicht erreichte.

In Scope

1. E-Mail-Versand scharf schalten

  • Resend-Account / Domain mydrugismusic.com verifizieren (DNS: SPF, DKIM)
  • RESEND_API_KEY in Coolify-API-App setzen (UUID eccgw0cgggocwcss4og8so84)
  • EMAIL_FROM gegen verifizierte Domain prüfen (ist bereits gesetzt)
  • Redeploy + echten Magic-Link-Flow End-to-End testen (Registrierung → Mail kommt an → Login klappt)

2. DB privat stellen

  • Production-DATABASE_URL (Env-uuid zo80kws0, preview=False) von public IP auf internen Hostname mit Passwort umstellen: postgres://musichub:<pw>@qwcokswkccws04c08cko4c8w:5432/musichub (Wert siehe Coolify internal_db_url)
  • API-App redeployen → prüfen ob running:healthy bleibt (= interner Hostname erreichbar)
  • Wenn ja: DB auf is_public: false setzen, Port 15432 schließen
  • Verifizieren: Login + Upload funktionieren weiter
  • Rollback falls API nicht hochkommt: DATABASE_URL zurück auf 46.224.235.131:15432, redeploy

Out of Scope

  • Background Sync (PWA Phase 3) — separates Feature, danach
  • Onboarding-Role — danach
  • Weiteres Feature-Polish

Erfolgskriterien

  • RESEND_API_KEY in Coolify gesetzt, Domain verifiziert
  • Neue Registrierung → echte Magic-Link-Mail kommt an → Login erfolgreich
  • DB is_public: false, Port 15432 von außen nicht mehr erreichbar (2026-06-09)
  • API-Container verbindet über internen Hostname, App running:healthy (2026-06-09)
  • Bestehende Nutzer-Flows (Login, Upload, Share) end-to-end gegenprüfen

Implementierungsnotizen

  • Coolify-Deploy-Workflow + UUIDs: siehe Memory reference_coolify.md
  • Am 2026-06-09 via Coolify-API geklärt: die „zwei DATABASE_URL" sind kein Konflikt — public-IP-Variante ist Production (preview=False), interne-Hostname-Variante ist nur Preview (preview=True). Live-App nutzt ausschließlich die public IP.
  • App (musichub-api) und DB (musichub-db) teilen destination_id: 0 → selbe Destination, internes Docker-Network sollte stehen. Ursprüngliches „nicht erreichbar" war vermutlich eine falsch befüllte URL, kein echtes Netzwerkproblem — daher zuerst Umstellen+Redeploy testen statt Netzwerk-Debugging.
  • Korrekte interne URL inkl. Passwort liefert Coolify als internal_db_url auf dem DB-Objekt.
  • True-Peak des Mastering-Experiments (mastering-delivery-live-ep.md) ist erledigt — diese Spec löst sie als aktive Spec ab