Laravel’in log, session, compiled view ve cache dosyaları yazabilmesi için web sunucusu sürecinin storage ile bootstrap/cache dizinlerinde yazma yetkisi olmalıdır. Çözüm 777 vermek değil, doğru kullanıcı ve grup modelini kurmaktır.
UnexpectedValueException
The stream or file storage/logs/laravel.log could not be opened
Permission denied
Laravel resmi dağıtım belgesi storage ve bootstrap/cache dizinlerinin web sunucusu süreci tarafından yazılabilir olmasını ister. cPanel, Plesk, Nginx, Apache ve PHP-FPM düzenlerinde çalışan kullanıcı değişebilir; bu nedenle tek bir chown komutu her sunucu için doğru değildir.
Kullanıcı ve grup adını kendi sunucunuza göre değiştirin.
chmod -R 777 storage bootstrap/cachechown -R deploy:www-data storage bootstrap/cache
chmod -R ug+rwX storage bootstrap/cacheWeb süreci root sahipliğindeki dosyaya yazamayabilir.
root:root storage/logsdeploy:www-data storage/logsAlmaLinux/Rocky sistemlerinde context ayrıca kontrol edilmelidir.
chmod doğru ama Permission deniedrestorecon -Rv storage bootstrap/cachechown hedefini tahmin etmek yerine gerçek süreci doğrular.
ps -eo user,group,comm,args | grep -E 'php-fpm|apache2|httpd|lsphp' | grep -v grep
grep -R '^user\|^group' /etc/php/*/fpm/pool.d /etc/php-fpm.d 2>/dev/null
Üst dizinlerde eksik execute iznini de yakalar.
namei -l storage/logs/laravel.log 2>/dev/null || true
find storage bootstrap/cache -maxdepth 2 -printf "%M %u:%g %p\n" | head -n 100
deploy ve www-data değerlerini gerçek kullanıcı/grubunuzla değiştirin.
chown -R deploy:www-data storage bootstrap/cache
find storage bootstrap/cache -type d -exec chmod 2775 {} \;
find storage bootstrap/cache -type f -exec chmod 664 {} \;
CLI ve web kullanıcısı farklıysa web isteğiyle ayrıca doğrulayın.
php artisan optimize:clear
php artisan view:cache
php artisan tinker --execute="logger()->info('izin testi');"
Proje ve veritabanı yedeğini alın; mevcut izinleri kaydedin.
PHP-FPM/Apache/LSAPI sürecinin gerçek kullanıcı ve grubunu belirleyin.
storage ve bootstrap/cache sahipliğini dağıtım modelinize göre düzenleyin.
Dizinlere grup yazma ve execute, dosyalara grup yazma izni verin.
SELinux veya ACL kullanılıyorsa ek politikaları doğrulayın.
Laravel log, session, view ve cache yazma işlemlerini test edin.
Çalışan kullanıcı dizine yazamıyor veya üst dizine giremiyor.
storage/logs veya mevcut log dosyası farklı kullanıcıya ait.
storage/framework alt dizinleri eksik veya yazılamıyor.
Dosya sistemi immutable flag, ACL, mount veya SELinux kısıtı içeriyor.
Aramanızla eşleşen hata bulunamadı.
Tüm kullanıcıların yazabilmesi, aynı sunucudaki başka süreçlerin uygulama dosyalarını değiştirebilmesine yol açabilir. Doğru sahiplik ve grup modeli daha güvenlidir.
Genellikle ilgili cPanel hesabının kendi kullanıcısı ve PHP handler modeli esas alınır. www-data komutlarını doğrudan kopyalamadan önce process çıktısını kontrol edin.
Deployment root veya farklı kullanıcıyla dosya oluşturuyorsa sahiplik yeniden değişir. Deploy komutlarını uygulama kullanıcısıyla çalıştırın ve izin adımını pipeline içine ekleyin.
Laravel, PHP-FPM, Nginx, Apache, MySQL, cPanel ve Plesk katmanlarını loglarla birlikte inceleyerek kalıcı çözüm uyguluyoruz.