Zum Hauptinhalt springen

Einführung

Beim Ausrollen einer Laravel-Anwendung in Produktion sind einige Vorbereitungen sinnvoll, damit sie möglichst effizient läuft. Dieser Leitfaden zeigt die wichtigsten Punkte für ein zuverlässiges Produktions-Deployment.

Deployment-Ablauf

Server-Voraussetzungen

Laravel benötigt PHP 8.3 oder höher und die folgenden Erweiterungen:
ErweiterungBeschreibung
CtypeZeichentyp-Prüfung
cURLHTTP-Kommunikation
DOMXML/HTML-DOM
FileinfoMIME-Typ-Erkennung
FilterDatenfilter
HashHashing
MbstringMultibyte-Strings
OpenSSLVerschlüsselung
PCREReguläre Ausdrücke
PDODatenbank
SessionSession-Handling
TokenizerPHP-Token
XMLXML-Verarbeitung

Serverkonfiguration

Nginx

Für Nginx nutzen Sie folgende Konfiguration als Basis. Wichtig: Alle Anfragen an public/index.php weiterleiten. Verschieben Sie index.php nicht in den Projekt-Root – sonst werden vertrauliche Dateien öffentlich.
server {
    listen 80;
    listen [::]:80;
    server_name example.com;
    root /srv/example.com/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

    index index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ ^/index\.php(/|$) {
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_hide_header X-Powered-By;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

FrankenPHP

FrankenPHP ist ein moderner, in Go geschriebener PHP-Server. Sie starten Ihre Laravel-Anwendung mit einem einzigen Befehl:
frankenphp php-server -r public/
Details zu HTTP/3, moderner Kompression, Laravel Octane und Standalone-Binaries finden Sie in der Laravel-Doku von FrankenPHP.

Verzeichnisrechte

Laravel benötigt Schreibrechte auf bootstrap/cache und storage. Sorgen Sie dafür, dass der Webserver-Prozess in diese Verzeichnisse schreiben kann.
chmod -R 775 storage bootstrap/cache
chown -R www-data:www-data storage bootstrap/cache

Optimierung

Zur Produktions-Deployzeit sollten Sie Konfiguration, Events, Routen und Views cachen. Der Befehl optimize erledigt alles gebündelt.
php artisan optimize
Zum Löschen:
php artisan optimize:clear

Einzelne Optimierungsbefehle

optimize führt folgende Befehle aus – bei Bedarf können Sie sie einzeln nutzen.
BefehlBeschreibung
php artisan config:cacheKonfigurationsdateien zusammenfassen und cachen
php artisan event:cacheEvent → Listener-Mapping cachen
php artisan route:cacheRouten cachen
php artisan view:cacheBlade-Views vorkompilieren
Nach config:cache darf env() nur noch innerhalb von Konfigurationsdateien aufgerufen werden. Nach dem Cachen wird .env nicht mehr gelesen, sodass env() außerhalb null liefert.

Dienste neu laden

Nach einem Deployment müssen langlaufende Dienste wie Queue-Worker, Laravel Reverb oder Laravel Octane den neuen Code laden – also neu starten.
php artisan reload
Der Befehl beendet lade-fähige Dienste. Ihr Prozess-Manager (z. B. Supervisor) soll sie automatisch wieder starten.
Bei Laravel Cloud erfolgt das grazile Reloaden aller Dienste automatisch – der reload-Befehl entfällt.

Debug-Modus

Die Option debug in config/app.php steuert, wie viel Fehlerinformation an Nutzer geht. Standardmäßig richtet sich der Wert nach APP_DEBUG aus .env.
Setzen Sie APP_DEBUG in Produktion unbedingt auf false. Bleibt APP_DEBUG=true, könnten Zugangsdaten und geheime Schlüssel für Endnutzer sichtbar werden.
# .env (Produktion)
APP_DEBUG=false

Health-Check-Route

Laravel bringt eine Health-Check-Route mit, die sich mit Uptime-Monitoren, Load Balancern oder Kubernetes verbindet. Standardmäßig gibt es den Endpunkt /up. Er antwortet mit 200, wenn die Anwendung ordnungsgemäß gestartet ist, andernfalls mit 500. Der Pfad ist in bootstrap/app.php konfigurierbar:
->withRouting(
    web: __DIR__.'/../routes/web.php',
    commands: __DIR__.'/../routes/console.php',
    health: '/status', // Default /up
)
Beim Aufruf wird das Event Illuminate\Foundation\Events\DiagnosingHealth gefeuert, sodass Sie eigene Prüfungen (Datenbank, Cache) in Listenern ergänzen können.

Deployment mit Laravel Cloud oder Forge

Laravel Cloud

Suchen Sie eine vollständig verwaltete, automatisch skalierende Plattform, ist Laravel Cloud die Empfehlung. Eine für Laravel optimierte PaaS mit Managed Compute, DB, Cache und Object Storage. Sie wird vom Laravel-Team direkt getunt und integriert sich nahtlos.

Laravel Forge

Wenn Sie Server selbst verwalten möchten, sich aber nicht mit dem Setup von Nginx, MySQL usw. befassen wollen, ist Laravel Forge praktisch. Forge erstellt Server bei DigitalOcean, Linode, AWS und Co. und installiert Nginx, MySQL, Redis, Memcached, Beanstalk automatisch.

Nächste Schritte

Deployment — Offizielle Doku

Ausführliche und aktuelle Details zur Deployment-Konfiguration finden Sie in der offiziellen Dokumentation.
Zuletzt geändert am 13. Juli 2026