Magento 2 Experten — Hyvä Theme, Tailwind CSS & SEO aus einer Hand ›

Das Docker-Setup von API Platform vertieft

Das Docker-Setup von API Platform vertieft

~14 Min. Lesezeit Zuletzt aktualisiert am 8. August 2026

Bevor wir mit der eigentlichen API-Entwicklung beginnen, ein detaillierter Blick auf compose.yaml – wichtig, um SPÄTER (Kapitel 98) das Deployment zu verstehen.

compose.yaml im Detail (gekürzt)

compose.yaml
services:
    php:
        build:
            context: .
            target: frankenphp_dev
        depends_on:
            - database
        environment:
            SERVER_NAME: ${SERVER_NAME:-localhost}, php:80
            DATABASE_URL: postgresql://app:!ChangeMe!@database:5432/app?serverVersion=16&charset=utf8
            MERCURE_URL: https://php/.well-known/mercure
        volumes:
            - ./api:/app
        ports:
            - target: 443
              published: 443

    database:
        image: postgres:${POSTGRES_VERSION:-16}-alpine
        environment:
            POSTGRES_DB: ${POSTGRES_DB:-app}
            POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-!ChangeMe!}
        volumes:
            - database_data:/var/lib/postgresql/data

volumes:
    database_data:

FrankenPHP: der moderne PHP-Anwendungsserver

target: frankenphp_dev nutzt FrankenPHP – einen modernen PHP-Anwendungsserver, der Caddy (Webserver MIT automatischem HTTPS) UND den PHP-Interpreter in EINEM Prozess vereint. Anders als der klassische Ansatz (Nginx/Apache PLUS separater PHP-FPM-Prozess) läuft hier ALLES in EINEM Container – einfacher zu betreiben, oft auch performanter.

Das volumes-Mapping verstehen

./api:/app spiegelt Ihr LOKALES api/-Verzeichnis in den Container – Änderungen an Ihrem Code (auf Ihrem Rechner mit Ihrem Editor bearbeitet) sind SOFORT im Container sichtbar, OHNE das Image neu zu bauen. GENAU deshalb funktioniert lokale Entwicklung trotz Docker so flüssig.

Umgebungsvariablen: .env vs. compose.yaml

DATABASE_URL ist HIER DIREKT in compose.yaml gesetzt – GENAU derselbe Zweck wie .env in der Symfony-Schulung (Kapitel 4), nur auf Docker-Ebene statt PHP-Ebene definiert. Symfony liest diese Umgebungsvariable GENAU GLEICH wie zuvor, unabhängig davon, WOHER sie kommt.

Achtung: !ChangeMe! als Standard-Passwort ist BEWUSST offensichtlich unsicher – für PRODUKTIONS-Deployments (Kapitel 98) MUSS dieser Wert durch ein echtes, generiertes Secret ersetzt werden, GENAU wie APP_SECRET in der Symfony-Schulung.

Logs anschauen

docker compose logs php --follow
docker compose logs database --follow

--follow (kurz -f) streamt neue Log-Zeilen live – unschätzbar wertvoll bei der Fehlersuche, da Symfonys eigenes var/log/-Verzeichnis (Kapitel 4 der Symfony-Schulung) INNERHALB des Containers liegt und nicht direkt vom Host aus einsehbar ist, ohne diesen Befehl.

In den Container einloggen

docker compose exec php bash

Tipp: Für längere Debugging-Sessions ist eine INTERAKTIVE Shell im Container oft praktischer als JEDEN einzelnen Befehl mit docker compose exec php ... zu präfixieren – nach exit landen Sie wieder auf Ihrem Host-System.