Wie man Laravel auf einem Linux VPS (Debian 13 / Ubuntu 24.04) installiert
Geschätzte Zeit: 30-45 Minuten
Schwierigkeit: Mittel ⭐⭐
System: Debian 13 (Trixie) / Ubuntu 24.04 LTS
📋 Einführung
Dieser Leitfaden erklärt Ihnen, wie Sie Laravel 12 (neueste Version) auf einem Linux VPS mit Debian 13 oder Ubuntu 24.04 installieren. Am Ende dieses Tutorials haben Sie eine produktionsbereite Umgebung mit:
- ✅ PHP 8.3 (erforderlich für Laravel 12)
- ✅ Composer (PHP-Abhängigkeitsmanager)
- ✅ Nginx (leistungsstarker Webserver)
- ✅ MariaDB (Datenbank)
- ✅ Laravel 12 (PHP-Framework)
Voraussetzungen
| Voraussetzung | Beschreibung |
|---|---|
| 🖥️ Linux VPS | Debian 13 oder Ubuntu 24.04 mit Root-Zugriff |
| 🔑 SSH-Zugriff | Root- oder Sudo-Benutzeranmeldung |
| 🌐 Domainname | (Optional) Zum Zugriff über eine URL |
| 💾 RAM | Mindestens 1 GB empfohlen |
| 💿 Speicherplatz | Mindestens 10 GB |
Erforderliche Konfiguration für Laravel 12
| Komponente | Mindestversion |
|---|---|
| PHP | 8.2 (8.3 oder 8.4 empfohlen) |
| Composer | 2.x |
| Datenbank | MySQL 5.7+ / MariaDB 10.3+ / PostgreSQL 10+ / SQLite 3.26+ |
🔄 Schritt 1: System aktualisieren
Aktualisieren Sie Ihr System, bevor Sie mit der Installation beginnen.
SSH-Verbindung
ssh root@your-server-ip
Pakete aktualisieren
# Paketliste aktualisieren
apt update
# Installierte Pakete aktualisieren
apt upgrade -y
✅ Erwartetes Ergebnis: Alle Pakete sind auf dem neuesten Stand.
🐘 Schritt 2: PHP 8.3 installieren
Laravel 12 erfordert mindestens PHP 8.2. Wir werden PHP 8.3 installieren, um bessere Leistung zu erzielen.
Für Debian 13
Debian 13 (Trixie) enthält standardmäßig PHP 8.4. Fügen Sie das Sury-Repository hinzu, um PHP 8.3 zu installieren:
# Abhängigkeiten installieren
apt install -y apt-transport-https lsb-release ca-certificates curl gnupg
# GPG-Schlüssel des Sury-Repository herunterladen
curl -fsSL https://packages.sury.org/php/apt.gpg | gpg --dearmor -o /usr/share/keyrings/sury-php.gpg
# Sury-Repository hinzufügen
echo "deb [signed-by=/usr/share/keyrings/sury-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/sury-php.list
# Paketliste aktualisieren
apt update
Für Ubuntu 24.04
Ubuntu 24.04 enthält standardmäßig PHP 8.3. Wenn Sie eine neuere Version wünschen, fügen Sie das PPA Ondřej hinzu:
# Abhängigkeiten installieren
apt install -y software-properties-common
# PHP-PPA hinzufügen (optional für PHP 8.4)
add-apt-repository ppa:ondrej/php -y
# Paketliste aktualisieren
apt update
PHP 8.3 und erforderliche Erweiterungen installieren
apt install -y php8.3 php8.3-fpm php8.3-cli php8.3-common \
php8.3-mysql php8.3-pgsql php8.3-sqlite3 \
php8.3-curl php8.3-gd php8.3-mbstring php8.3-xml \
php8.3-zip php8.3-bcmath php8.3-intl php8.3-readline \
php8.3-tokenizer php8.3-opcache
| Erweiterung | Verwendung |
|---|---|
php8.3-fpm | FastCGI-Prozess-Manager (für Nginx) |
php8.3-mysql | MySQL/MariaDB-Verbindung |
php8.3-curl | HTTP-Anfragen |
php8.3-gd | Bildmanipulation |
php8.3-mbstring | Multibyte-Zeichenketten (UTF-8) |
php8.3-xml | XML-Verarbeitung |
php8.3-zip | ZIP-Komprimierung |
php8.3-bcmath | Präzisionsberechnungen |
php8.3-intl | Internationalisierung |
Installation überprüfen
php -v
Erwartetes Ergebnis:
PHP 8.3.x (cli) (built: ...)
Copyright (c) The PHP Group
Zend Engine v4.3.x, Copyright (c) Zend Technologies
with Zend OPcache v8.3.x, Copyright (c), by Zend Technologies 📦 Schritt 3: Composer installieren
Composer ist der PHP-Abhängigkeitsmanager, der für Laravel unerlässlich ist.
Composer herunterladen und installieren
# Installer herunterladen
curl -sS https://getcomposer.org/installer -o composer-setup.php
# Composer global installieren
php composer-setup.php --install-dir=/usr/local/bin --filename=composer
# Installer entfernen
rm composer-setup.php
Installation überprüfen
composer --version
Erwartetes Ergebnis:
Composer version 2.x.x 2024-xx-xx xx:xx:xx 🌐 Schritt 4: Nginx installieren
Nginx ist ein leistungsstarker Webserver, ideal für Laravel.
Nginx installieren
apt install -y nginx
Nginx starten und aktivieren
# Nginx starten
systemctl start nginx# Beim Start aktivieren
systemctl enable nginx# Status überprüfen
systemctl status nginx
Erwartetes Ergebnis:
● nginx.service - Ein leistungsstarker Webserver und ein Reverse-Proxy-Server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; ...)
Active: active (running) since ...
Nginx testen
Öffnen Sie Ihren Browser und gehen Sie zu http://your-server-ip. Sie sollten die Standardseite von Nginx sehen.
🗄️ Schritt 5: MariaDB installieren
MariaDB ist eine MySQL-kompatible, leistungsstarke und Open-Source-Datenbank.
MariaDB installieren
apt install -y mariadb-server mariadb-client
MariaDB starten und aktivieren
# MariaDB starten
systemctl start mariadb# Beim Start aktivieren
systemctl enable mariadb# Status überprüfen
systemctl status mariadb
Installation sichern
mysql_secure_installation
Beantworten Sie die Fragen:
| Frage | Empfohlene Antwort |
|---|---|
| Geben Sie das aktuelle Passwort für root ein | Drücken Sie die Eingabetaste (leer) |
| Wechseln Sie zur unix_socket-Authentifizierung | n |
| Ändern Sie das Root-Passwort | Y und geben Sie ein starkes Passwort ein |
| Entfernen anonymer Benutzer | Y |
| Root-Anmeldung entfernen | Y |
| Testdatenbank entfernen | Y |
| Berechtigungstabellen neu laden | Y |
Datenbank für Laravel erstellen
# Mit MariaDB verbinden
mysql -u root -p
-- Datenbank erstellen
CREATE DATABASE laravel CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- Benutzer erstellen
CREATE USER 'laravel_user'@'localhost' IDENTIFIED BY 'YourSecurePassword123!';
-- Berechtigungen erteilen
GRANT ALL PRIVILEGES ON laravel.* TO 'laravel_user'@'localhost';
-- Änderungen anwenden
FLUSH PRIVILEGES;
-- Verlassen
EXIT;
📝 Hinweis: Behalten Sie diese Informationen für die Konfiguration von Laravel bei:
- Datenbank:
laravel- Benutzer:
laravel_user- Passwort:
YourSecurePassword123!
🚀 Schritt 6: Laravel 12 installieren
Projektverzeichnis erstellen
# Verzeichnis für Websites erstellen
mkdir -p /var/www
# Ins Verzeichnis wechseln
cd /var/www
Laravel über Composer installieren
composer create-project laravel/laravel monsite
💡 Ersetzen Sie
monsitedurch den Namen Ihres Projekts.
Erwartetes Ergebnis:
Creating a "laravel/laravel" project at "./monsite"
Installing laravel/laravel (v12.x.x)
- Downloading laravel/laravel (v12.x.x)
- Installing laravel/laravel (v12.x.x): Extracting archive
...
Application ready! Build something amazing. Projektstruktur von Laravel
📁 /var/www/monsite/
├── 📁 app/ ← Anwendungscode
├── 📁 bootstrap/ ← Startdateien
├── 📁 config/ ← Konfiguration
├── 📁 database/ ← Migrationen und Seeds
├── 📁 public/ ← Web-Einstiegspunkt (index.php)
├── 📁 resources/ ← Ansichten, CSS, JS
├── 📁 routes/ ← Routen der Anwendung
├── 📁 storage/ ← Generierte Dateien, Protokolle, Cache
├── 📁 tests/ ← Unittests
├── 📁 vendor/ ← Composer-Abhängigkeiten
├── 📄 .env ← Umgebungsvariablen
├── 📄 artisan ← CLI Laravel
└── 📄 composer.json ← Projektabhängigkeiten
⚙️ Schritt 7: Laravel konfigurieren
.env-Datei konfigurieren
cd /var/www/monsite
nano .env
Bearbeiten Sie die folgenden Zeilen:
APP_NAME="My Laravel Site"
APP_ENV=production
APP_DEBUG=false
APP_URL=http://your-domain.com
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=laravel_user
DB_PASSWORD=YourSecurePassword123!
⚠️ Wichtig: Setzen Sie in der Produktion
APP_DEBUG=false, um keine sensiblen Informationen preiszugeben.
Anwendungsschlüssel generieren
php artisan key:generate
Erwartetes Ergebnis:
INFO Application key set successfully.
Migrationen ausführen
php artisan migrate
Erwartetes Ergebnis:
INFO Running migrations.
2024_01_01_000000_create_users_table ............... 45ms DONE
2024_01_01_000001_create_password_reset_tokens_table 12ms DONE
2024_01_01_000002_create_sessions_table ............ 18ms DONE
...
📁 Schritt 8: Berechtigungen konfigurieren
Laravel erfordert, dass bestimmte Verzeichnisse beschreibbar sind.
Benutzer festlegen
# Besitzer auf den Webbenutzer ändern
chown -R www-data:www-data /var/www/monsite
Berechtigungen festlegen
# Berechtigungen für Verzeichnisse
find /var/www/monsite -type d -exec chmod 755 {} \;
# Berechtigungen für Dateien
find /var/www/monsite -type f -exec chmod 644 {} \;
# Spezielle Berechtigungen für storage und bootstrap/cache
chmod -R 775 /var/www/monsite/storage
chmod -R 775 /var/www/monsite/bootstrap/cache
🔧 Schritt 9: Nginx für Laravel konfigurieren
Website-Konfiguration erstellen
nano /etc/nginx/sites-available/monsite
Fügen Sie die folgende Konfiguration ein:
server {
listen 80;
listen [::]:80;
# Ersetzen Sie durch Ihre Domain oder IP
server_name your-domain.com www.your-domain.com;
# Website-Stammverzeichnis (Laravel public-Verzeichnis)
root /var/www/monsite/public;
# Indexdateien
index index.php index.html index.htm;
# Codierung
charset utf-8;
# Protokolle
access_log /var/log/nginx/monsite.access.log;
error_log /var/log/nginx/monsite.error.log;
# Anfragenverarbeitung
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# Statische Dateien
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
# Fehler 404 → Laravel
error_page 404 /index.php;
# PHP-Verarbeitung über PHP-FPM
location ~ \.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;
}
# Zugriff auf versteckte Dateien blockieren
location ~ /\.(?!well-known).* {
deny all;
}
}
Website aktivieren
# Symbolischen Link erstellen
ln -s /etc/nginx/sites-available/monsite /etc/nginx/sites-enabled/
# Standardwebsite deaktivieren (optional)
rm /etc/nginx/sites-enabled/default
# Konfiguration testen
nginx -t
Erwartetes Ergebnis:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Nginx neu starten
systemctl restart nginx
✅ Schritt 10: Installation testen
Website aufrufen
Öffnen Sie Ihren Browser und gehen Sie zu:
http://your-server-ip(falls keine Domain vorhanden)http://your-domain.com(falls Domain konfiguriert)
Sie sollten die Startseite von Laravel sehen:
Anwendungsgesundheit überprüfen
Laravel 12 enthält eine Health-Check-Route:
curl http://localhost/up
Erwartetes Ergebnis: HTTP-Code 200 (OK)
🔒 Schritt 11: Mit HTTPS (Let's Encrypt) absichern
Certbot installieren
apt install -y certbot python3-certbot-nginx
SSL-Zertifikat erhalten
certbot --nginx -d your-domain.com -d www.your-domain.com
Befolgen Sie die Anweisungen:
- Geben Sie Ihre E-Mail-Adresse ein
- Akzeptieren Sie die Bedingungen
- Wählen Sie die Umleitung von HTTP zu HTTPS (empfohlen)
Automatische Erneuerung überprüfen
certbot renew --dry-run
Erwartetes Ergebnis:
Congratulations, all simulated renewals succeeded
✅ Ihre Website ist jetzt über
https://your-domain.comerreichbar
🛠️ Nützliche Laravel-Artisan-Befehle
Artisan (CLI Laravel)
# Gehe in das Projektverzeichnis
cd /var/www/meineseite
# Zeige alle verfügbaren Befehle an
php artisan list
# Cache leeren
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
# Für die Produktion optimieren
php artisan optimize
# Controller erstellen
php artisan make:controller NameController
# Modell mit Migration erstellen
php artisan make:model NameModell -m
# Migrationen ausführen
php artisan migrate
# Zurückrollen
php artisan migrate:rollback
# Wartungsmodus
php artisan down
php artisan up
📊 Optimierung für die Produktion
Laravel optimieren
cd /var/www/meineseite
# Konfiguration im Cache speichern
php artisan config:cache
# Routen im Cache speichern
php artisan route:cache
# Ansichten im Cache speichern
php artisan view:cache
# Globale Optimierung
php artisan optimize
OPcache konfigurieren
nano /etc/php/8.3/fpm/conf.d/10-opcache.ini
Füge hinzu oder ändere:
opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.validate_timestamps=0
opcache.save_comments=1
Starte PHP-FPM neu:
systemctl restart php8.3-fpm
🔧 Fehlerbehebung
Fehler 500 - Interner Serverfehler
| ❌ Ursache | ✅ Lösung |
|---|---|
| Falsche Berechtigungen | chown -R www-data:www-data /var/www/meineseite |
| Nicht zugänglicher Speicher | chmod -R 775 /var/www/meineseite/storage |
| Fehlender APP_KEY | php artisan key:generate |
| Falsch konfigurierte .env-Datei | Überprüfe die Datenbankgrundparameter |
# Laravel-Fehler anzeigen
tail -f /var/www/meineseite/storage/logs/laravel.log
Fehler 502 Bad Gateway
| ❌ Ursache | ✅ Lösung |
|---|---|
| PHP-FPM nicht gestartet | systemctl start php8.3-fpm |
| Falscher PHP-Socket | Überprüfe /var/run/php/php8.3-fpm.sock |
| Falsche PHP-Version | update-alternatives --config php |
Datenbankverbindungsfehler
| ❌ Ursache | ✅ Lösung |
|---|---|
| MariaDB nicht gestartet | systemctl start mariadb |
| Falsche Anmeldeinformationen | Überprüfe .env (DB_DATABASE, DB_USERNAME, DB_PASSWORD) |
| Nicht erstellte Datenbank | Erstelle die Datenbank mit mysql -u root -p |
# Verbindung testen
php artisan tinker
>>> DB::connection()->getPdo();
Weiße Seite
# Debugging temporär aktivieren
nano /var/www/meineseite/.env
# Ändere APP_DEBUG=true
# Cache leeren
php artisan cache:clear
php artisan config:clear
# Logs überprüfen
tail -50 /var/www/meineseite/storage/logs/laravel.log
📝 Zusammenfassung der Befehle
# === SYSTEMUPDATE ===
apt update && apt upgrade -y
# === PHP 8.3 INSTALLATION (Debian 13) ===
apt install -y apt-transport-https lsb-release ca-certificates curl gnupg
curl -fsSL https://packages.sury.org/php/apt.gpg | gpg --dearmor -o /usr/share/keyrings/sury-php.gpg
echo "deb [signed-by=/usr/share/keyrings/sury-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/sury-php.list
apt update
apt install -y php8.3 php8.3-fpm php8.3-cli php8.3-common php8.3-mysql php8.3-curl php8.3-gd php8.3-mbstring php8.3-xml php8.3-zip php8.3-bcmath php8.3-intl
# === COMPOSER INSTALLATION ===
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# === NGINX INSTALLATION ===
apt install -y nginx
systemctl enable nginx && systemctl start nginx
# === MARIADB INSTALLATION ===
apt install -y mariadb-server mariadb-client
systemctl enable mariadb && systemctl start mariadb
mysql_secure_installation
# === DATENBANK ERSTELLEN ===
mysql -u root -p -e "CREATE DATABASE laravel; CREATE USER 'laravel_user'@'localhost' IDENTIFIED BY 'Passwort'; GRANT ALL ON laravel.* TO 'laravel_user'@'localhost'; FLUSH PRIVILEGES;"
# === LARAVEL INSTALLATION ===
cd /var/www
composer create-project laravel/laravel meineseite
cd meineseite
php artisan key:generate
php artisan migrate
# === BERECHTIGUNGEN ===
chown -R www-data:www-data /var/www/meineseite
chmod -R 775 /var/www/meineseite/storage /var/www/meineseite/bootstrap/cache
# === HTTPS (Let's Encrypt) ===
apt install -y certbot python3-certbot-nginx
certbot --nginx -d your-domain.com
🎉 Fazit
Herzlichen Glückwunsch! Sie haben erfolgreich installiert:
- ✅ PHP 8.3 mit allen Laravel-Erweiterungen
- ✅ Composer 2.x zur Verwaltung von Abhängigkeiten
- ✅ Nginx für Laravel konfiguriert
- ✅ MariaDB mit einer dedizierten Datenbank
- ✅ Laravel 12 bereit für die Produktion
- ✅ HTTPS mit Let's Encrypt (optional)
Nächste Schritte
- 📖 Konsultieren Sie die Laravel-Dokumentation
- 🎨 Installieren Sie ein Starter-Kit:
php artisan breeze:installoderphp artisan jetstream:install - 📊 Konfigurieren Sie Queues mit Redis oder Supervisor
- 📧 Konfigurieren Sie den E-Mail-Versand (SMTP, Mailgun, etc.)

