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

2.2 KiB

Docker produktiv

Letzte Aktualisierung: 2026-03-06

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
  • Nginx-only Setup: .htaccess wird nicht ausgewertet

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

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

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 ü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://....