Laravel .env und Storage für Produktion einrichten

Eine korrekt konfigurierte .env-Datei und funktionierender Storage sind essenziell für jede Laravel-Anwendung. In diesem Leitfaden lernen Sie, wie Sie diese für eine Produktionsumgebung korrekt einrichten.

Die .env-Datei verstehen

Die .env-Datei enthält umgebungsspezifische Konfigurationen, die nicht in die Versionskontrolle gehören.

Warum .env verwenden

  • Trennt Konfiguration von Code
  • Verhindert sensible Daten in Git
  • Erleichtert die Bereitstellung in verschiedenen Umgebungen
  • Jede Umgebung (Dev, Staging, Produktion) hat ihre eigene .env

.env erstellen

Wenn Sie Laravel klonen, erstellen Sie eine .env:

cd ~/domains/ihredomain.de/projekt
# Kopieren Sie die Beispieldatei
cp .env.example .env
# Generieren Sie den App-Schlüssel
php artisan key:generate

Essenzielle .env-Einstellungen

Konfigurieren Sie diese Einstellungen für die Produktion.

Anwendungseinstellungen

APP_NAME="Meine Laravel App"
APP_ENV=production
APP_KEY=base64:generierter-schlüssel-hier
APP_DEBUG=false
APP_TIMEZONE=Europe/Berlin
APP_URL=https://ihredomain.de

Wichtig:

  • APP_ENV=production aktiviert Produktionsoptimierungen
  • APP_DEBUG=false verhindert, dass Fehlermeldungen sichtbar sind
  • APP_URL muss Ihre vollständige URL mit https enthalten

Datenbankkonfiguration

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=ihre_datenbank
DB_USERNAME=ihr_benutzer
DB_PASSWORD=ihr_passwort
DB_CHARSET=utf8mb4
DB_COLLATION=utf8mb4_unicode_ci

Logging-Konfiguration

LOG_CHANNEL=daily
LOG_DEPRECATIONS_CHANNEL=null
LOG_LEVEL=error

Für die Produktion:

  • daily erstellt pro Tag eine neue Logdatei
  • LOG_LEVEL=error protokolliert nur Fehler, keine Warnungen

Cache und Session

CACHE_STORE=file
SESSION_DRIVER=file
SESSION_LIFETIME=120
SESSION_ENCRYPT=true
SESSION_PATH=/
SESSION_DOMAIN=.ihredomain.de

Für bessere Leistung auf Shared Hosting ist file die beste Wahl.

Queue-Konfiguration

QUEUE_CONNECTION=database

Oder für Shared Hosting ohne Worker:

QUEUE_CONNECTION=sync

Mail-Konfiguration

MAIL_MAILER=smtp
MAIL_HOST=mail.ihredomain.de
MAIL_PORT=587
MAIL_USERNAME=info@ihredomain.de
MAIL_PASSWORD=ihr-mail-passwort
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=info@ihredomain.de
MAIL_FROM_NAME="${APP_NAME}"

Storage konfigurieren

Laravel verwendet den Storage-Ordner für Logs, Cache und Uploads.

Storage-Struktur

storage/
├── app/
│   ├── public/      # Öffentlich zugängliche Uploads
│   └── private/     # Private Dateien
├── framework/
│   ├── cache/       # Dateicache
│   ├── sessions/    # Sitzungsdateien
│   └── views/       # Kompilierte Ansichten
└── logs/            # Logdateien

Der öffentliche Storage muss über das Web zugänglich sein:

# Erstellen Sie den Symlink
php artisan storage:link

Dies erstellt: public/storage -> storage/app/public Überprüfen Sie, ob der Link funktioniert:

ls -la public/
# Sie sehen: storage -> /path/to/storage/app/public

Wenn der Artisan-Befehl nicht funktioniert:

cd public
ln -s ../storage/app/public storage

Storage-Berechtigungen einstellen

Stellen Sie sicher, dass Laravel schreiben kann:

# Rekursiv beschreibbar machen
chmod -R 775 storage
chmod -R 775 bootstrap/cache
# Besitzer einstellen (falls nötig)
chown -R www-data:www-data storage
chown -R www-data:www-data bootstrap/cache

Auf Shared Hosting ist normalerweise nur chmod erforderlich.

Produktionssicherheit

Sichern Sie Ihre .env und Storage.

.env sichern

Die .env-Datei darf niemals öffentlich zugänglich sein:

  1. Laravel's public-Ordner ist das Dokumenten-Root
  2. .env befindet sich eine Ebene höher
  3. .htaccess blockiert den Zugriff Überprüfen Sie mit:
curl https://ihredomain.de/.env
# Sollte 403 oder 404 geben, NIEMALS den Inhalt!

.env in .gitignore

Stellen Sie sicher, dass .env niemals in Git kommt:

.env
.env.backup
.env.production

Storage schützen

Private Uploads schützen:

// In routes/web.php
Route::get('/download/{file}', function ($file) {
    // Autorisierungsprüfung
    if (!auth()->check()) {
        abort(403);
    }
    return Storage::download('private/' . $file);
});

Cache-Konfiguration

Optimieren Sie das Caching für die Produktion.

Config-Cache

php artisan config:cache

Dies kombiniert alle Konfigurationsdateien in einer zwischengespeicherten Datei. Achtung: Nach config:cache wird .env nicht mehr direkt gelesen. Änderungen in .env erfordern:

php artisan config:clear
php artisan config:cache

Route-Cache

php artisan route:cache

Beschleunigt die Routenauflösung erheblich.

View-Cache

php artisan view:cache

Pre-kompiliert alle Blade-Templates.

Alles zusammen

php artisan optimize

Oder bei der Bereitstellung:

php artisan optimize:clear
php artisan optimize

Häufige Probleme

Storage-Berechtigung verweigert

# Berechtigungen zurücksetzen
chmod -R 775 storage bootstrap/cache
# SELinux-Kontext (CentOS/RHEL)
chcon -R -t httpd_sys_rw_content_t storage

Auf einigen Servern sind Symlinks deaktiviert:

# Kopieren Sie anstelle des Symlinks
cp -r storage/app/public/* public/storage/

Oder passen Sie den FileController an, um Dateien zu servieren.

.env-Änderungen funktionieren nicht

# Config-Cache leeren
php artisan config:clear
# Oder wenn Sie kein SSH haben
# Löschen Sie: bootstrap/cache/config.php

APP_KEY-Probleme

Wenn Ihr APP_KEY fehlt oder falsch ist:

php artisan key:generate

Dies regeneriert den Schlüssel. Achtung: Bestehende verschlüsselte Daten werden unlesbar.

Environment-Erkennung

Überprüfen Sie die aktuelle Umgebung im Code:

// Im Code
if (app()->environment('production')) {
    // Produktionsspezifischer Code
}
// In Blade
@production
    <!-- Nur in Produktion -->
@endproduction

Best Practices

.env-Management

  • Verwenden Sie niemals dieselbe .env in Dev und Produktion
  • Bewahren Sie die Produktions-.env sicher auf (Passwort-Manager)
  • Verwenden Sie starke, einzigartige Passwörter
  • Drehen Sie regelmäßig Anmeldeinformationen

Storage-Management

  • Konfigurieren Sie ein Backup für storage/app
  • Erwägen Sie Cloud-Storage für Skalierung
  • Räumen Sie alte Logs regelmäßig auf

Verwandte Artikel

Brauchen Sie Hilfe?

Wir sind für Sie da! Stoßen Sie auf Probleme oder haben Sie Fragen? Unser Support-Team hilft Ihnen gerne persönlich weiter. Senden Sie uns eine Nachricht über das Ticketsystem - wir antworten in der Regel innerhalb weniger Stunden und denken gerne mit Ihnen mit.