- Add icanhazstring/composer-unused as dev dependency for dependency hygiene checks - Add German documentation (docs/) covering architecture, conventions, workflows, and developer checklists - Add API layer (ApiAuth, ApiBootstrap, ApiResponse), audit, scheduler, custom fields, and SSO services - Add Microsoft OIDC SSO, API token management, and user lifecycle features - Add swagger-ui vendor integration and OpenAPI spec - Add production Docker setup and bin/ scripts - Update composer dependencies, config, templates, and frontend assets throughout Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1.6 KiB
1.6 KiB
Docker produktiv
Letzte Aktualisierung: 2026-02-21
Ziel
Diese Anleitung beschreibt den Betrieb mit Domain auf Basis von /docker-compose.prod.yml.
Voraussetzungen
- DNS zeigt auf den Server (
A/AAAA) - Ports
80und443sind offen - TLS-Zertifikate vorhanden
Produktionsdateien
- Compose:
/docker-compose.prod.yml - Nginx:
/docker/nginx/prod.conf - PHP:
/docker/php/php.prod.ini - ENV-Vorlage:
/.env.prod.example
1) Umgebung vorbereiten
.env auf Produktionswerte setzen:
APP_URL=https://deine-domain.tldAPP_ENV=prodAPP_DEBUG=false- stabile
APP_CRYPTO_KEY - starke DB/SMTP-Passwörter
2) Nginx auf Domain/TLS setzen
In /docker/nginx/prod.conf:
server_nameauf echte Domain(s) anpassen
Zertifikate ablegen:
/docker/nginx/certs/fullchain.pem/docker/nginx/certs/privkey.pem
3) Produktion starten
docker compose -f docker-compose.prod.yml up --build -d
Konfiguration validieren:
docker compose -f docker-compose.prod.yml config
4) Betrieb prüfen
docker compose -f docker-compose.prod.yml logs -f nginx php scheduler
Prüfen:
- App über
https://...erreichbar - Login funktioniert
- Scheduler läuft minütlich (Logausgaben)
5) Bestandssysteme
Bei bestehender Datenbank:
- idempotentes SQL-Update manuell ausführen
(Auto-Init überdb/init/init.sqlgreift nur beim ersten DB-Setup)
Hinweise
phpmyadminist in Prod absichtlich nicht enthalten.- Wenn ein externer Reverse-Proxy TLS terminiert, kann
prod.confauf HTTP intern reduziert werden;APP_URLbleibt trotzdemhttps://....