Laravel deployen: Anwendung auf dem vServer veröffentlichen
Laravel deployen auf dem Server: PHP-FPM, Composer, .env, Datenbank, Dateirechte, Nginx, Queue Worker, Scheduler, SSL und Updates Schritt für Schritt.

Inhalt
Eine Laravel-Anwendung auf dem Server zu deployen ist mehr, als nur den Code auf den Server zu bringen: PHP-FPM, die Composer-Abhängigkeiten, die Einstellungen in .env, die Datenbank, die Dateirechte, Nginx, die Queue Worker und der Scheduler müssen korrekt konfiguriert sein. Wenn Sie die Schritte in dieser Anleitung einmal durchgegangen sind, bringen Sie Ihre nächsten Projekte mit demselben Aufbau in wenigen Minuten online.
In dieser Anleitung zeigen wir, wie Sie eine Laravel-Anwendung auf einem frischen Ubuntu-Server von Anfang bis Ende deployen, Queue und Scheduler einrichten, SSL aktivieren und spätere Updates ausrollen.
Voraussetzungen
- Server: Ein Ubuntu-Server mit Root-Zugriff. In dieser Anleitung verwenden wir Ubuntu 24.04.
- PHP: Die PHP-Version und die Erweiterungen, die Ihre Laravel-Version verlangt. Die Zeile
phpin der Dateicomposer.jsonIhres Projekts gibt die erforderliche Mindestversion an. - Datenbank: MariaDB, MySQL oder PostgreSQL. Zur Installation lesen Sie unsere Anleitungen MySQL und MariaDB installieren oder PostgreSQL installieren.
- Domain: Ein A-Eintrag, der auf die IP-Adresse Ihres Servers zeigt.
Schritt 1: PHP, Composer und Nginx
Nachdem Sie sich per SSH mit Ihrem Server verbunden haben:
sudo apt update
sudo apt install nginx git unzip \
php8.3-fpm php8.3-cli php8.3-mysql php8.3-mbstring php8.3-xml \
php8.3-curl php8.3-zip php8.3-bcmath php8.3-intl php8.3-redis
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
Verlangt Ihr Projekt eine andere PHP-Version, ändern Sie 8.3 in den Paketnamen; wie Sie mehrere Versionen parallel betreiben, erklären wir in unserer Anleitung PHP Version ändern. Wenn Sie PostgreSQL verwenden, installieren Sie statt php8.3-mysql das Paket php8.3-pgsql.
Schritt 2: Den Code auf den Server holen
Legen Sie den Ordner der Anwendung an und holen Sie den Code aus dem Git-Repository:
sudo mkdir -p /var/www/app
sudo chown $USER:www-data /var/www/app
git clone git@github.com:benutzer/app.git /var/www/app
cd /var/www/app
composer install --no-dev --optimize-autoloader
Wie Sie dem Server einen Deploy-Key hinzufügen, der nur dieses Repository lesen darf, und Deployments automatisieren, erklären wir in unserer Anleitung Deployment mit Git. Wenn Sie Ihre Frontend-Dateien mit Vite bauen, ergänzen Sie außerdem den Schritt npm ci && npm run build.
Schritt 3: Einstellungen in .env
cp .env.example .env
php artisan key:generate
nano .env
Die wichtigsten Einstellungen für die Produktionsumgebung:
APP_ENV=production
APP_DEBUG=false
APP_URL=https://ihredomain.de
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=app
DB_USERNAME=app
DB_PASSWORD=ein-starkes-passwort
APP_DEBUG=false: Muss in der Produktionsumgebung unbedingt deaktiviert sein. Bleibt die Einstellung aktiv, können Fehlerseiten Besuchern Konfigurationsdaten einschließlich Passwörtern anzeigen.APP_KEY: Wird mitkey:generateerzeugt. Verlieren Sie diesen Schlüssel, lassen sich verschlüsselte Daten und Sessions nicht mehr lesen; sichern Sie ihn an einem sicheren Ort.- Wenn Sie Redis verwenden, setzen Sie
CACHE_STORE,SESSION_DRIVERundQUEUE_CONNECTIONaufredis; mehr dazu in unserem Artikel Was ist Redis?.
Fügen Sie die Datei .env niemals dem Git-Repository hinzu.
Schritt 4: Datenbank, Dateirechte und Cache
php artisan migrate --force
php artisan storage:link
sudo chown -R $USER:www-data storage bootstrap/cache
sudo chmod -R 775 storage bootstrap/cache
php artisan optimize
migrate --force: Legt in der Produktionsumgebung die Datenbanktabellen an;--forceüberspringt die Sicherheitsabfrage.storage:link: Legt den Linkpublic/storagean, damit hochgeladene Dateien über das Web erreichbar sind.- Dateirechte: Der Webserver muss in die Ordner
storageundbootstrap/cacheschreiben können. Vergeben Sie für das gesamte Projekt nicht777. optimize: Erstellt die Caches für Konfiguration, Routen und Views und beschleunigt so die Anwendung. Führen Sie diesen Befehl erneut aus, nachdem Sie die Datei.envgeändert haben.
Schritt 5: Nginx konfigurieren
Legen Sie die Datei /etc/nginx/sites-available/app an. Achten Sie darauf, dass das Web-Root nicht das Projekt selbst ist, sondern der Ordner public:
server {
listen 80;
listen [::]:80;
server_name ihredomain.de;
root /var/www/app/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
Aktivieren Sie die Website:
sudo ln -s /etc/nginx/sites-available/app /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Wenn Sie statt public den Projektordner als Web-Root festlegen, kann Ihre Datei .env aus dem Internet lesbar werden. Die Grundlagen von Nginx erklären wir in unserer Anleitung Nginx installieren.
Schritt 6: SSL
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d ihredomain.de
Certbot holt das Zertifikat, passt die Nginx-Konfiguration für HTTPS an und richtet die automatische Verlängerung ein. Mehr dazu in unserem Artikel Was ist ein SSL-Zertifikat?.
Schritt 7: Queue Worker und Scheduler
Queue Worker: Führt Aufgaben wie den E-Mail-Versand und die Dateiverarbeitung im Hintergrund aus. Legen Sie die Datei /etc/systemd/system/app-queue.service an:
[Unit]
Description=Laravel Queue Worker
After=network.target
[Service]
User=www-data
Group=www-data
Restart=always
WorkingDirectory=/var/www/app
ExecStart=/usr/bin/php artisan queue:work --sleep=3 --tries=3 --max-time=3600
[Install]
WantedBy=multi-user.target
sudo systemctl enable --now app-queue
Scheduler: Für die geplanten Aufgaben von Laravel genügt eine einzige Cron-Zeile, die jede Minute ausgeführt wird. Fügen Sie sie mit sudo crontab -u www-data -e hinzu:
* * * * * cd /var/www/app && php artisan schedule:run >> /dev/null 2>&1
Wie Cron funktioniert, erklären wir in unserer Anleitung Cronjob einrichten.
Updates deployen
Wenn Sie eine neue Version veröffentlichen, gehen Sie so vor:
cd /var/www/app
php artisan down
git pull
composer install --no-dev --optimize-autoloader
php artisan migrate --force
php artisan optimize
php artisan queue:restart
php artisan up
queue:restart sorgt dafür, dass die Queue Worker den neuen Code verwenden. Wie Sie diese Schritte in einem Skript bündeln und mit GitHub Actions automatisieren, erklären wir in unserer Anleitung Deployment mit Git. Vergessen Sie nicht, vor Deployments mit Datenbankänderungen ein Backup der Datenbank zu erstellen.
Nodesty Server für Laravel
Die AMD Ryzen 9 9950X vServer von Nodesty sorgen mit hoher Single-Core-Leistung für kurze Antwortzeiten bei PHP-Anfragen; die AMD EPYC 7763 vServer bieten viel RAM, um Anwendung, Datenbank, Redis und Queue Worker auf demselben Server zu betreiben. Mit vollem Root-Zugriff, NVMe-Speicher, DDoS-Schutz durch nShield und kostenlosen täglichen Backups mit 7 Tagen Aufbewahrung bringen Sie Ihre Laravel-Projekte sicher online.
Häufig gestellte Fragen
Kann ich Laravel auf Shared Hosting betreiben?
Bei kleinen Projekten ist das möglich, aber für Queue Worker, den Scheduler und Werkzeuge wie Composer brauchen Sie SSH-Zugriff und Kontrolle über den Server. Für Anwendungen, die Queues und Hintergrundjobs nutzen, ist ein vServer mit vollem Root-Zugriff deutlich besser geeignet.
Ich bekomme einen 500-Fehler, aber keine Fehlermeldung. Warum?
In der Produktionsumgebung ist APP_DEBUG auf false gesetzt, daher werden keine ausführlichen Fehler angezeigt. Die Details zum Fehler stehen in der Datei storage/logs/laravel.log. Die häufigsten Ursachen sind ein fehlender APP_KEY, falsche Datenbankzugangsdaten und ein Ordner storage, der nicht beschreibbar ist.
Ich habe die .env-Datei geändert, aber die Änderung greift nicht. Warum?
Wurde die Konfiguration gecacht, liest Laravel die .env-Datei nicht erneut ein. Erneuern Sie den Cache, indem Sie php artisan config:cache noch einmal ausführen; laufen Queue Worker, starten Sie diese mit php artisan queue:restart ebenfalls neu.
Warum führt der Queue Worker den neuen Code nicht aus?
Queue Worker sind lang laufende Prozesse und halten den Code, der beim Start geladen wurde, im Arbeitsspeicher. Führen Sie nach jedem Deployment php artisan queue:restart aus; systemd oder Supervisor starten die Worker dann automatisch neu.
Kann ich die Anwendung während des Deployments in den Wartungsmodus versetzen?
Ja. Der Befehl php artisan down versetzt die Anwendung in den Wartungsmodus und zeigt Besuchern eine Wartungsseite; nach dem Deployment schalten Sie sie mit php artisan up wieder frei. Bei kurzen Deployments können Sie stattdessen auch ein unterbrechungsfreies Deployment einrichten.
Welche Datenbank sollte ich für Laravel verwenden?
Laravel unterstützt MariaDB, MySQL und PostgreSQL. Welche Sie wählen, hängt von den Anforderungen Ihres Projekts und der Erfahrung Ihres Teams ab. Zusätzlich Redis für Queues, Cache und Sessions zu nutzen, verbessert die Performance.
Über den Autor
Nodesty-Team · Infrastruktur und Support
Das Nodesty-Team betreibt unsere Server, unser Netzwerk und unseren DDoS-Schutz im Alltag und beantwortet Support-Anfragen rund um die Uhr. Diese Ratgeber entstehen aus dieser Arbeit.
Verwandte Artikel

Ubuntu Upgrade: Server auf die neue LTS-Version bringen
Ubuntu Server auf die neue LTS-Version upgraden: Backup, Vorbereitung, do-release-upgrade, SSH-Verbindung, Kontrollen danach und Neuinstallation erklärt.

Was ist ein Load Balancer? So funktioniert Lastverteilung
Was ist ein Load Balancer und wofür? Methoden der Lastverteilung, Health Checks, Sessions, Load Balancing mit Nginx, HAProxy und wann Sie einen brauchen.

PostgreSQL installieren: Anleitung für Linux-Server
PostgreSQL installieren unter Linux: Rollen und Datenbanken anlegen, Zugriff über pg_hba.conf, Fernzugriff, Backups mit pg_dump und Performance-Tuning.