2.1 KiB
2.1 KiB
Docker produktiv
Letzte Aktualisierung: 2026-03-03
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
Security Header Baseline
Die produktive Nginx-Konfiguration setzt folgende Header serverseitig:
X-Content-Type-Options: nosniffX-Frame-Options: SAMEORIGINReferrer-Policy: strict-origin-when-cross-originPermissions-Policy: camera=(), microphone=(), geolocation=(), payment=(), usb=()X-Permitted-Cross-Domain-Policies: noneStrict-Transport-Security: max-age=31536000
Hinweise:
- HSTS wird nur im HTTPS-Serverblock gesetzt.
includeSubDomainsundpreloadsind absichtlich nicht gesetzt.
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://....