Permission Folder Storage Laravel di Linux

Permission folder storage Laravel di Linux harus membuat PHP-FPM bisa menulis log, cache, session, upload, dan compiled view. Jawaban cepatnya: pastikan owner folder sesuai user web server, beri akses tulis ke storage dan bootstrap/cache, hindari chmod 777, lalu cek log Laravel jika error masih muncul.

Masalah permission biasanya muncul setelah deploy ke VPS. Di lokal semua normal, tetapi di server muncul error seperti Permission denied, halaman 500, file upload gagal, session tidak tersimpan, atau Laravel tidak bisa menulis log.

Kenapa Laravel Butuh Permission Khusus?

Sebagian folder Laravel hanya dibaca, tetapi beberapa folder harus bisa ditulis saat aplikasi berjalan:

FolderFungsi
storage/logsmenyimpan log aplikasi
storage/framework/cachemenyimpan cache framework
storage/framework/sessionsmenyimpan session jika memakai file session
storage/framework/viewsmenyimpan compiled Blade view
storage/app/publicmenyimpan file publik seperti upload gambar
bootstrap/cachemenyimpan cache config, route, dan service

Jika PHP-FPM tidak punya akses tulis ke folder tersebut, Laravel bisa gagal sebelum controller kamu dijalankan.

Gejala Permission Salah

Gejala yang sering terlihat:

  • halaman berubah menjadi 500 setelah deploy
  • The stream or file ... could not be opened in append mode
  • Permission denied di storage/logs/laravel.log
  • upload file berhasil di form tetapi file tidak muncul
  • login sering keluar sendiri karena session gagal ditulis
  • Please provide a valid cache path
  • file_put_contents(...): Failed to open stream

Mulai diagnosis dari log. Jika log Laravel sendiri tidak bisa ditulis, cek log Nginx atau PHP-FPM:

sudo tail -f /var/log/nginx/error.log
sudo journalctl -u php8.3-fpm -f

Sesuaikan versi PHP dengan server kamu.

Cari User Web Server

Jangan menebak owner folder. Cari user yang menjalankan PHP-FPM:

ps aux | grep php-fpm

Di Ubuntu/Debian dengan Nginx, user yang umum adalah www-data. Di beberapa server bisa nginx, apache, atau user deploy khusus.

Kamu juga bisa cek konfigurasi pool PHP-FPM:

grep -R -E "^(user|group)" /etc/php/*/fpm/pool.d/www.conf

Contoh output:

user = www-data
group = www-data

Jika PHP-FPM berjalan sebagai www-data, folder yang perlu ditulis harus bisa diakses oleh www-data.

Perintah Permission yang Aman

Masuk ke folder project:

cd /var/www/toko-laravel

Atur owner untuk folder yang perlu ditulis:

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

Beri permission tulis untuk owner dan group:

sudo chmod -R ug+rw storage bootstrap/cache

Jika folder masih belum bisa dimasuki oleh group, tambahkan permission execute untuk direktori:

sudo find storage bootstrap/cache -type d -exec chmod ug+rwx {} \;
sudo find storage bootstrap/cache -type f -exec chmod ug+rw {} \;

Jangan langsung menjalankan chmod -R 777 storage. Itu membuat semua user di server bisa menulis ke folder aplikasi.

Jika Memakai User Deploy Terpisah

Pada server yang lebih rapi, kamu mungkin deploy memakai user deploy, sementara PHP-FPM berjalan sebagai www-data. Pola yang umum:

sudo chown -R deploy:www-data /var/www/toko-laravel
sudo find /var/www/toko-laravel -type f -exec chmod 640 {} \;
sudo find /var/www/toko-laravel -type d -exec chmod 750 {} \;
sudo chmod -R ug+rw storage bootstrap/cache
sudo find storage bootstrap/cache -type d -exec chmod ug+rwx {} \;

Artinya:

  • user deploy tetap bisa update kode,
  • group www-data bisa membaca project,
  • folder storage dan bootstrap/cache bisa ditulis aplikasi.

Sesuaikan dengan setup server. Untuk pemula, jangan pakai perintah ini secara buta jika belum paham user dan group di server.

Permission untuk Upload File

Jika fitur upload memakai disk public, Laravel menulis file ke:

storage/app/public

Pastikan folder itu bisa ditulis PHP-FPM:

sudo chown -R www-data:www-data storage/app/public
sudo chmod -R ug+rw storage/app/public

Lalu pastikan symlink publik sudah ada:

php artisan storage:link

Jika URL upload tetap 404, baca Storage Link Laravel Tidak Jalan di Server. Permission dan symlink adalah dua masalah berbeda yang sering muncul bersamaan.

Setelah Mengubah Permission

Bersihkan cache yang mungkin dibuat dengan owner salah:

php artisan optimize:clear
php artisan config:cache
php artisan route:cache
php artisan view:cache

Jika perintah artisan gagal karena permission, jalankan ulang pengecekan owner:

ls -la storage
ls -la storage/framework
ls -la bootstrap/cache

Cek juga log:

tail -f storage/logs/laravel.log

Kesalahan yang Sering Terjadi

Menggunakan chmod 777

chmod 777 sering terlihat menyelesaikan error karena semua user bisa menulis. Masalahnya, permission itu terlalu longgar untuk server publik.

Gunakan owner dan group yang benar, lalu beri akses hanya ke folder yang memang perlu ditulis.

Mengubah Permission Seluruh Project

Tidak semua folder Laravel harus writable. Folder seperti app, routes, config, dan resources cukup dibaca oleh aplikasi. Fokuskan permission tulis ke storage dan bootstrap/cache.

Owner Berubah Setelah Deploy

Jika deploy dijalankan sebagai root, file baru bisa dimiliki root. PHP-FPM lalu gagal menulis cache atau log. Gunakan user deploy khusus dan ulangi chown pada folder writable setelah deploy.

PHP-FPM User Berbeda dari Dugaan

Di tutorial sering tertulis www-data, tetapi server kamu bisa memakai user lain. Selalu cek proses PHP-FPM sebelum menjalankan chown.

Lupa Permission untuk bootstrap/cache

Laravel juga menulis cache ke bootstrap/cache. Jika folder ini tidak writable, config:cache, route:cache, atau bootstrap aplikasi bisa gagal.

Pencegahan

  1. Catat user PHP-FPM yang dipakai server.
  2. Jangan deploy sebagai root jika tidak perlu.
  3. Jadikan perintah permission sebagai bagian checklist deploy.
  4. Hindari chmod 777 untuk solusi permanen.
  5. Cek storage/logs/laravel.log setelah deploy.
  6. Uji login, upload, dan halaman yang memakai cache setelah perubahan server.

Bacaan Terkait

FAQ

Folder apa saja yang harus writable di Laravel?

Minimal storage dan bootstrap/cache. Folder lain biasanya cukup dibaca oleh aplikasi.

Apakah chmod 775 selalu benar?

Tidak selalu. Permission harus dilihat bersama owner dan group. 775 bisa aman jika group-nya benar, tetapi tetap salah jika group tidak sesuai user PHP-FPM.

Kenapa error permission muncul setelah deploy?

Biasanya karena file baru dibuat oleh user deploy atau root, sementara aplikasi berjalan sebagai user PHP-FPM seperti www-data.

Apakah perlu restart Nginx setelah ubah permission?

Biasanya tidak. Permission berlaku di filesystem. Namun jika kamu juga mengubah konfigurasi PHP-FPM, reload service terkait.

Bagaimana cara mengecek permission sudah benar?

Coba jalankan fitur yang menulis file, seperti login, upload, dan cache. Lalu cek storage/logs/laravel.log serta ls -la storage bootstrap/cache.