Skip to content

In Produktion deployen

Diese Anleitung beschreibt die Mindestschritte für den Betrieb einer NENE2-basierten Anwendung in der Produktion: Erstellen eines Produktions-Images, sichere Verwaltung von Umgebungsvariablen und Platzieren eines Reverse-Proxys.

Voraussetzung: Ihre Anwendung funktioniert lokal mit docker compose up -d app.


1. Produktions-Docker-Image erstellen

Das Entwicklungs-Image mountet das Quellverzeichnis und enthält Entwicklungswerkzeuge. Für die Produktion erstellen Sie ein eigenständiges Image mit nur den Runtime-Abhängigkeiten.

Erstellen Sie docker/php/Dockerfile.prod:

dockerfile
# Stage 1 — Abhängigkeiten installieren
FROM composer:2 AS vendor
WORKDIR /app
COPY composer.json composer.lock ./
RUN composer install \
    --no-dev \
    --no-interaction \
    --no-progress \
    --optimize-autoloader \
    --prefer-dist

# Stage 2 — Runtime-Image
FROM php:8.4-apache AS runtime

RUN apt-get update \
    && apt-get install -y --no-install-recommends unzip \
    && docker-php-ext-install pdo_mysql \
    && rm -rf /var/lib/apt/lists/* \
    && a2enmod rewrite \
    && printf '<Directory /var/www/html/public_html>\n    AllowOverride All\n    Require all granted\n</Directory>\n' \
       > /etc/apache2/conf-available/nene2.conf \
    && a2enconf nene2 \
    && sed -ri -e 's!/var/www/html!/var/www/html/public_html!g' /etc/apache2/sites-available/*.conf \
    && sed -ri -e 's!/var/www/!/var/www/html/public_html!g' /etc/apache2/apache2.conf

WORKDIR /var/www/html

COPY public_html/ public_html/
COPY src/         src/
COPY config/      config/
COPY templates/   templates/
COPY --from=vendor /app/vendor vendor/
COPY composer.json composer.lock ./

EXPOSE 80

Erstellen und pushen:

bash
docker build -f docker/php/Dockerfile.prod -t my-app:latest .
docker push my-registry/my-app:latest

2. Umgebungsvariablen sicher verwalten

Fügen Sie niemals eine .env-Datei in ein Produktions-Image ein. Injizieren Sie Umgebungsvariablen über das Secret-Management Ihrer Plattform.

Erforderliche Variablen

VariableProduktionswert
APP_ENVproduction
APP_DEBUGfalse
DB_HOSTIhr verwalteter Datenbankhost
DB_PASSWORDAus dem Secret Store — niemals hartcodieren
NENE2_MACHINE_API_KEYAus dem Secret Store — niemals hartcodieren

3. Reverse-Proxy vorschalten

Der NENE2-Apache-Container ist nicht dafür ausgelegt, direkt dem Internet ausgesetzt zu sein. Schalten Sie Nginx, Caddy oder einen Cloud-Load-Balancer vor.

Nginx-Beispiel

nginx
server {
    listen 443 ssl http2;
    server_name api.example.com;

    location / {
        proxy_pass         http://127.0.0.1:8080;
        proxy_set_header   Host              $host;
        proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

Caddy-Beispiel

caddyfile
api.example.com {
    reverse_proxy localhost:8080
}

4. Produktions-Sicherheits-Checkliste

  • [ ] APP_ENV=production — deaktiviert Entwicklungs-Fehlerdetails
  • [ ] APP_DEBUG=false — unterdrückt Stack-Traces in HTTP-Antworten
  • [ ] Datenbank-Zugangsdaten aus einem Secret Store
  • [ ] NENE2_MACHINE_API_KEY ist ein starker Zufallswert (≥ 32 Zeichen)
  • [ ] Container-Port nur an Loopback-Adresse gebunden
  • [ ] TLS am Reverse-Proxy terminiert

5. Nach dem Deployment verifizieren

bash
curl -fsS https://api.example.com/health
curl -fsS -H 'X-NENE2-API-Key: <key>' https://api.example.com/machine/health

6. Problem Details Typ-URIs

NENE2 verwendet https://nene2.dev/problems/... als offizielle Framework-Domain. Die eingebauten Fehlertyp-Seiten werden dort automatisch aufgelöst — für den Standardfehlerumfang ist keine Konfiguration erforderlich.

Wenn Ihr Projekt eigene Problemtypen definiert (z.B. payment-failed) und diese URIs unter Ihrer eigenen Domain auflösen sollen, setzen Sie PROBLEM_DETAILS_BASE_URL in .env:

ini
PROBLEM_DETAILS_BASE_URL=https://problems.example.com/

Veröffentlicht unter der MIT-Lizenz.