Eine Compose-Datei, sieben Services
nginx, PHP, Vue SSR, MySQL, Redis, Memcached und die Queue starten aus einer Datei. Ein frischer Checkout sind drei Befehle.
Der Site-Stack ist keine Mischung mehr aus lokalem PHP, einem Node-Skript und einer Datenbank, die jemand anders startete. Eine Compose-Datei startet nginx, php, queue, schedule, vue, mysql, redis und memcached. Das PHP-Image ist ein lokales laraboom-php:latest plus redis- und memcached-Extensions, eine langsame Registry blockiert den ersten Lauf also nicht.
Das Hochfahren hat drei Schritte. Die zwei Env-Dateien kopieren. Compose bauen und starten. composer setup im PHP-Container ausführen. Setup schreibt den App-Key, wartet bis MySQL Verbindungen annimmt, fährt Migrationen, seedet die öffentlichen Inhalte und verlinkt storage.
Warum das Warten zählt
Migrationen scheiterten beim Kaltstart. MySQL initialisierte noch. Der Fehler sah wie falsche Zugangsdaten aus. Das Setup-Skript wiederholt die Verbindung jetzt für eine begrenzte Zeit und nennt den Service, auf den es wartet. Ein zweiter Lauf ist sicher. Seeds ersetzen Demo-Zeilen statt sie zu duplizieren.
Der Build ist gestuft. Lockfiles installieren in einer frühen Schicht. Der Frontend-Build hat eine eigene Stage. Nur das Ergebnis landet im Runtime-Image. Eine PHP-Änderung installiert Composer-Pakete nicht neu. Rebuilds fielen von Minuten auf Sekunden.
Was noch gesund sein muss
nginx darf SSR nicht routen, bevor der vue-Container steht. Sonst ist der erste Hit eine leere Shell. Die Storage-Volume-UID muss zum PHP-User passen, sonst scheitern Uploads erst nach dem ersten Admin-Login. Queue und Schedule sind getrennte Prozesse, ein langer Job verzögert also keinen Cron-Tick.
Der Check nach einem frischen Checkout ist kurz. Home-HTML kommt aus Vue SSR. /api/user antwortet ohne Token. Redis und Memcached nehmen einen Ping aus dem PHP-Container an. Wenn eines davon fehlschlägt, ist die Compose-Datei der Ort, nicht ein Host-routes-Ordner.
