# 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.