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.ymlist die image-basierte Basis für Deployments.docker-compose.local.ymlist für den lokalen Hot-Reload-Stack mit Volume-Mounts und lokalen Portfreigaben gedacht.docker-compose.server.ymlhängt Frontend und Backend zusätzlich an das externe Reverse-Proxy-Netz.- Der Frontend-Container liefert im Server-Modus nur die SPA aus.
/apiwird 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.