Files
breadcrumb-the-shire/docs/docker-produktiv.md

94 lines
2.1 KiB
Markdown
Raw Normal View History

# Docker produktiv
2026-03-04 15:56:58 +01:00
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 `80` und `443` sind 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.tld`
- `APP_ENV=prod`
- `APP_DEBUG=false`
- stabile `APP_CRYPTO_KEY`
- starke DB/SMTP-Passwörter
## 2) Nginx auf Domain/TLS setzen
In `/docker/nginx/prod.conf`:
- `server_name` auf echte Domain(s) anpassen
Zertifikate ablegen:
- `/docker/nginx/certs/fullchain.pem`
- `/docker/nginx/certs/privkey.pem`
2026-03-04 15:56:58 +01:00
### Security Header Baseline
Die produktive Nginx-Konfiguration setzt folgende Header serverseitig:
- `X-Content-Type-Options: nosniff`
- `X-Frame-Options: SAMEORIGIN`
- `Referrer-Policy: strict-origin-when-cross-origin`
- `Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=(), usb=()`
- `X-Permitted-Cross-Domain-Policies: none`
- `Strict-Transport-Security: max-age=31536000`
Hinweise:
- HSTS wird nur im HTTPS-Serverblock gesetzt.
- `includeSubDomains` und `preload` sind absichtlich nicht gesetzt.
## 3) Produktion starten
```bash
docker compose -f docker-compose.prod.yml up --build -d
```
Konfiguration validieren:
```bash
docker compose -f docker-compose.prod.yml config
```
## 4) Betrieb prüfen
```bash
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 über `db/init/init.sql` greift nur beim ersten DB-Setup)
## Hinweise
- `phpmyadmin` ist in Prod absichtlich nicht enthalten.
- Wenn ein externer Reverse-Proxy TLS terminiert, kann `prod.conf` auf HTTP intern reduziert werden; `APP_URL` bleibt trotzdem `https://...`.