# Docker Build Fix: Upload-Dateien ausschließen

## Problem

Der Docker Build schlug fehl mit:
```
no space left on device
```

**Ursache**: Die großen MP3-Dateien in `public/uploads/` wurden in den Build-Context kopiert und verbrauchten zu viel Speicherplatz.

## Lösung

Eine `.dockerignore` Datei wurde erstellt, die folgende Dateien/Ordner vom Build ausschließt:

- `public/uploads/*` - Upload-Dateien (werden als Volume gemountet)
- `data/*` - Datenbank-Dateien (werden als Volume gemountet)
- `node_modules` - werden während des Builds installiert
- `.next`, `out`, `build` - Build-Artefakte
- Backup-Dateien, Logs, temporäre Dateien

## Zusätzliche Maßnahmen

Falls der Build weiterhin Probleme macht:

### 1. Docker aufräumen

```bash
# Entferne nicht verwendete Images
docker image prune -a

# Entferne nicht verwendete Container
docker container prune

# Entferne nicht verwendete Volumes (VORSICHT: kann Daten löschen!)
docker volume prune

# Kompletter Cleanup (alles außer laufenden Containern)
docker system prune -a
```

### 2. Speicherplatz prüfen

```bash
# Zeige Speicherplatz
df -h

# Zeige Docker-Speicherverbrauch
docker system df

# Zeige größte Images
docker images --format "table {{.Repository}}\t{{.Tag}}\t{{.Size}}" | sort -k3 -h
```

### 3. Build-Kontext prüfen

```bash
# Prüfe was in den Build-Context kopiert wird
docker build --no-cache --progress=plain -t test-build . 2>&1 | grep "transferring context"
```

### 4. Upload-Dateien manuell ausschließen

Falls die `.dockerignore` nicht greift, können Upload-Dateien vorübergehend verschoben werden:

```bash
# Vor dem Build
mv public/uploads public/uploads.backup
mkdir -p public/uploads
touch public/uploads/.gitkeep

# Build durchführen
docker compose build

# Uploads wiederherstellen
rm -rf public/uploads
mv public/uploads.backup public/uploads
```

## Wichtig

Die Upload-Dateien werden **nicht** ins Docker-Image kopiert, sondern als Volume gemountet:

```yaml
volumes:
  - ./public/uploads:/app/public/uploads
```

Das bedeutet:
- Upload-Dateien bleiben auf dem Host-System
- Sie werden zur Laufzeit gemountet
- Sie sollten **nicht** ins Image kopiert werden (spart viel Speicher)

## Verifikation

Nach dem Build sollte das Image deutlich kleiner sein:

```bash
# Zeige Image-Größe
docker images hoerdle-hoerdle

# Prüfe ob Uploads im Image sind
docker run --rm hoerdle-hoerdle ls -lh /app/public/uploads
# Sollte nur .gitkeep oder Covers zeigen, keine MP3-Dateien
```

