Laravel Storage Folder – Berechtigungen richtig setzen

Wer schon einmal mit Laravel gearbeitet hat, kennt das Problem: plötzlich hagelt es Fehler wie
Error: EACCES: permission denied, mkdir '/var/www/laravel/storage/app/uploads' oder
The stream or file "/var/www/laravel/storage/logs/laravel.log" could not be opened.

Die Ursache ist fast immer dieselbe – die Ordner storage/ und bootstrap/cache/ haben falsche Berechtigungen. Ohne Zugriff kann Laravel keine Logs schreiben, keine Caches erzeugen und keine Uploads speichern. In diesem Artikel schauen wir uns an, wie man die Berechtigungen richtig setzt und damit die typischen Probleme endgültig löst.

Warum genau diese Ordner wichtig sind

  • storage/: hier landen Logs, Sessions, Caches und Uploads.
  • bootstrap/cache/: Laravel speichert hier optimierte Autoloader und Konfigurationsdateien.

Beide Ordner müssen schreibbar sein – nicht nur für deinen Benutzer, sondern auch für den Webserver (meistens www-data).

Schritt 1: Besitzer richtig setzen

Meist läuft der Webserver unter dem Benutzer www-data. Damit Laravel dort schreiben darf, sollte man den Ordner-Besitz anpassen:

sudo chown -R www-data:www-data storage bootstrap/cache

Wenn du selbst als Entwickler gleichzeitig Zugriff brauchst, lohnt es sich, dich in die Gruppe www-data aufzunehmen:

sudo usermod -aG www-data $USER

Danach einmal neu einloggen oder das Terminal neu starten.

Schritt 2: Berechtigungen korrekt setzen

Damit keine unnötigen Sicherheitslücken entstehen, sollten die Rechte möglichst restriktiv sein:

sudo chmod -R 775 storage bootstrap/cache
  • 7 → Lesen, Schreiben, Ausführen (für Besitzer)
  • 7 → Lesen, Schreiben, Ausführen (für Gruppe)
  • 5 → Lesen, Ausführen (für andere)

Damit können dein Benutzer und www-data alles, andere dürfen nur lesen.

Schritt 3: Testen

Einfach einen Test-Logeintrag schreiben:

Log::info('Storage permissions check OK!');

Wenn der Eintrag in storage/logs/laravel.log landet, passt alles.

Typische Fehlerquellen

  • Cache leeren vergessen: nach Änderungen am Setup immer einmal:
    • php artisan config:clear
    • php artisan cache:clear
  • Docker oder WSL: hier gilt das gleiche Prinzip – wichtig ist, dass der Container-User Zugriff auf die Ordner hat.
  • Uploads scheitern weiterhin: prüfe, ob das Zielverzeichnis existiert und ob du es in config/filesystems.php korrekt hinterlegt hast.

Fazit

Mit den richtigen Berechtigungen für storage/ und bootstrap/cache/ sparst du dir viele nervige Fehlermeldungen in Laravel. Einmal sauber gesetzt, läuft dein Projekt stabil und du kannst dich wieder auf die Entwicklung konzentrieren – statt auf Permission Errors.

Falls du Fragen zur Arbeit mit Laravel hast oder Unterstützung bei der Umsetzung deines Projekts brauchst, schau gerne auf unserer Website vorbei oder nimm direkt Kontakt mit uns auf – wir helfen dir, das Beste aus deinem Laravel-Setup herauszuholen. Vielleicht findest du auch in unseren anderen Blogartikeln genau das Thema, das du gerade suchst.