Dedicated Servers & VPS15. Dezember 2025 52 Aufrufe

Laravel auf einem Linux-VPS installieren (Debian 13 / Ubuntu 24.04)

Laravel auf einem Linux-VPS installieren (Debian 13 / Ubuntu 24.04)

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 monsite durch 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:

  1. Geben Sie Ihre E-Mail-Adresse ein
  2. Akzeptieren Sie die Bedingungen
  3. 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.com erreichbar


🛠️ 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:install oder php artisan jetstream:install
  • 📊 Konfigurieren Sie Queues mit Redis oder Supervisor
  • 📧 Konfigurieren Sie den E-Mail-Versand (SMTP, Mailgun, etc.)