Zum Hauptinhalt springen

Docker

Das Projekt trennt sauber zwischen lokalem Dev-Setup und serverseitigem Deployment:

  • Lokal: Docker Compose mit Hot Reload für Frontend und Backend sowie einfachem /api-Proxy im Projekt-Frontend.
  • Server: Docker Compose mit Registry-Images und zentralem Reverse Proxy außerhalb des Projekts.
  • Der Projekt-Nginx übernimmt auf dem Server kein /api-Routing mehr.

Compose-Dateien

  • docker-compose.yml ist die image-basierte Basis für Deployments.
  • docker-compose.local.yml ist für den lokalen Hot-Reload-Stack mit Volume-Mounts und lokalen Portfreigaben gedacht.
  • docker-compose.server.yml hängt Frontend und Backend zusätzlich an das externe Reverse-Proxy-Netz.
  • Der Frontend-Container liefert im Server-Modus nur die SPA aus. /api wird dort nicht mehr intern weitergeleitet.

Was --build macht

--build brauchst du nur lokal oder in der CI beim Image-Bau. Auf dem Server solltest du nicht bauen, sondern nur gepushte Images ziehen.

Lokal ist --build sinnvoll:

  • beim ersten Start
  • nach Änderungen an Dockerfiles
  • nach Änderungen an package.json / package-lock.json
  • wenn du sicherstellen willst, dass die lokalen Dev-Images frisch gebaut sind

Normale Änderungen an Frontend- oder Backend-Code brauchen lokal keinen Image-Build mehr. docker-compose.local.yml mountet die Arbeitskopie in die laufenden Dev-Container und startet Frontend und Backend mit Hot Reload.

Auf dem Server ist der gewünschte Ablauf stattdessen:

docker compose -f docker-compose.yml -f docker-compose.server.yml pull
docker compose -f docker-compose.yml -f docker-compose.server.yml up -d

Healthcheck

http://localhost:3001/api/health

Lokale Standardbefehle

Stack starten:

docker compose -f docker-compose.yml -f docker-compose.local.yml up -d

Logs:

docker compose -f docker-compose.yml -f docker-compose.local.yml logs -f

Prisma Studio:

./scripts/local/prisma-studio.sh

Wichtig für E-Mail-Assets

E-Mail-Logos und andere E-Mail-Bilder nicht als SVG einbinden. Viele mobile Mail-Clients zeigen SVGs in E-Mails nur als Fragezeichen oder Platzhalter. Für Mailtemplates stattdessen ein kleines PNG/JPG aus public/ verwenden.

Neue public-Assets werden erst nach einem Frontend-Image-Rebuild im Nginx-Container ausgeliefert.