# Optimierungsvorschläge für die Docker-Compose Umgebung

## ToDo-Liste

- [ ] **Datenbank Passwörter & Secrets absichern**
  - Datenbankpasswörter nicht im Klartext in der YAML speichern, sondern `secrets`-Mechanismus verwenden.
  - `.env` Werte für Datenbanken statt statischer Angaben verwenden.
  - Beispiel: `MYSQL_ROOT_PASSWORD_FILE` und `MYSQL_PASSWORD_FILE` setzen und Secrets einbinden.

- [ ] **Performance & Caching verbessern**
  - `cache_from` und `cache_to` im Build-Prozess (BuildKit) einrichten.
  - Für PHP einen dedizierten Volume für den Composer-Cache nutzen.
  - Nginx-Cache als eigenes Volume deklarieren.
  - Die Vendor-Ordner aus Mounts ausschließen oder gesondert berücksichtigen, damit lokale Änderungen keine Build-Optimierungen verhindern.

- [ ] **Netzwerk- und Bind-Mounts optimieren**
  - Bei Nginx nur das Public-Verzeichnis (`public/`) einbinden, nicht das gesamte Projektverzeichnis.
  - Nicht benötigte Verzeichnisse (wie z.B. `vendor/`) explizit ausschließen.
  - Healthchecks und Startbedingungen konsistent definieren.

- [ ] **Image-Versionen festlegen**
  - Keine `latest`-Images nutzen, sondern möglichst immer eine feste Version angeben (z.B. `mariadb:11.3` statt `mariadb:latest`).
  - Gilt auch für Redis, PHP und weitere Services.

- [ ] **Ressourcenlimits setzen**
  - `deploy.resources` für Speicher und CPU bei allen Services, nicht nur beim Worker.

- [ ] **Security-Best-Practices**
  - Nicht produktive Ports (z.B. bei Entwicklung) durch `.env` variabel und gezielt auf localhost begrenzen.
  - Feste Netzwerkbereiche und eigene Netzwerke für sensible Kommunikation (z.B. Backend, Cache).

- [ ] **Multi-Stage Builds in Dockerfiles nutzen**
  - Die Images im PHP- und Worker-Bereich sollten über Multi-Stage-Builds möglichst klein gehalten werden (z.B. `FROM php:X-cli AS base`, dann Production-Image).

- [ ] **Environment-Konfiguration für Dev/Prod trennen**
  - Eine `docker-compose.override.yml` für Entwicklung mit vollem Source-Mount und Debug-Konfiguration anlegen.
  - Für Produktion keine Source-Mounts, keine Debug-Variablen, optimierte Settings.

- [ ] **Log-Rotation aktivieren**
  - Logging-Driver auf `json-file` einstellen und Optionen für Größe/Rotation setzen.

- [ ] **Monitoring & Healthchecks**
  - Für alle Services sinnvolle Healthchecks ergänzen.
  - (Optional) Monitoring und/oder Alerting ergänzen.

---

**Tipp:** Die oben stehenden Punkte können Schritt für Schritt umgesetzt und pro optimiertem Bereich abgehakt werden.
