chore(docker): .dockerignore angepasst; lokale Build-Schritte in Rebuild-Skripten; Doku/README zu production vs production-prebuilt aktualisiert

This commit is contained in:
2025-10-06 18:59:17 +02:00
parent 7a84130aec
commit 1124b1f40b
24 changed files with 1149 additions and 270 deletions

View File

@@ -100,20 +100,51 @@ pnpm dev
## Docker Deployment
### Docker Build
### Lokale Entwicklung mit Docker
Für schnelles lokales Testing mit vorgebauten Artefakten:
```bash
# Docker Image erstellen
docker build -t stargirlnails-booking .
# 1. Baue Client und Server lokal
pnpm install --frozen-lockfile
pnpm run build
# Container starten
docker run -d \
--name stargirlnails-app \
-p 3000:3000 \
--env-file .env \
stargirlnails-booking
# 2. Baue und starte Container (nutzt production-prebuilt Stage)
docker compose build
docker compose up -d
```
### Production-Deployment
Für Remote-Deployment (baut alles im Container):
```bash
# Nutzt production Stage für vollständigen Build
docker-compose -f docker-compose-prod.yml up --build -d
```
**Wichtig:** `docker-compose-prod.yml` baut Client und Server im Container und benötigt keine lokalen Builds.
### Docker Build-Stages
Das Dockerfile definiert zwei relevante Workflows:
- `production`: Vollständiger Build (Client + Server) innerhalb von Docker langsamer, ideal für CI/CD
- `production-prebuilt`: Lokaler Build der Artefakte (`dist/`, `server-dist/`) und Kopie in das Image schneller für lokale Entwicklung
Warum `dist/` und `server-dist/` nicht in `.dockerignore` gehören: Diese Verzeichnisse werden im `production-prebuilt`-Workflow benötigt, damit sie beim `docker compose build` in das Image kopiert werden können.
Details siehe [`docs/docker-build-stages.md`](docs/docker-build-stages.md)
### Native Module Hinweise (bcrypt)
Die App verwendet das native Node-Modul `bcrypt`, das für Alpine Linux kompiliert werden muss.
- Beim ersten Start oder nach Dependency-Updates kann ein Rebuild notwendig sein.
- In der `production` Stage wird `bcrypt` während des Docker-Builds kompiliert und verifiziert.
- In der `production-prebuilt` Stage erfolgt eine Verifikation/Rebuild beim Container-Start, und der Start bricht ab, wenn `bcrypt` fehlt.
Siehe ausführliche Hinweise und Troubleshooting in [`docs/docker-build-stages.md`](docs/docker-build-stages.md).
### Docker Compose (empfohlen)
Erstelle eine `docker-compose.yml` Datei:
@@ -170,6 +201,29 @@ chmod +x scripts/setup-caddy.sh
- Überwache Container mit Health Checks
- **Persistente Daten**: Der `.storage` Ordner wird als Volume gemountet, um Buchungen und Einstellungen zu erhalten
### Docker-Container startet nicht
**Symptom:** Container startet mit "Cannot find module" Fehlern
**Lösung:**
- Lokal: Stelle sicher, dass `pnpm build` vor `docker-compose up` ausgeführt wurde
- Production: Prüfe, dass `docker-compose-prod.yml` den `target: production` verwendet
- Siehe [`docs/docker-build-stages.md`](docs/docker-build-stages.md) für Details
- Nach Sicherheits- oder Dependency-Updates: `docker compose down && docker compose build --no-cache && docker compose up -d`
- Verifikation: `docker compose exec stargirlnails node -e "require('bcrypt')"`
### Development-Workflow mit nativen Modulen
Wenn du ein natives Modul wie `bcrypt` hinzufügst oder updatest, ist ein Container-Rebuild erforderlich. Nutze dafür die Scripts:
```bash
# Linux/macOS
./scripts/rebuild-dev.sh
# Windows
scripts\rebuild-dev.cmd
```
## Features
### Buchungssystem