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:
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 modePermission denieddistorage/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 pathfile_put_contents(...): Failed to open stream
Mulai diagnosis dari log. Jika log Laravel sendiri tidak bisa ditulis, cek log Nginx atau PHP-FPM:
Sesuaikan versi PHP dengan server kamu.
Cari User Web Server
Jangan menebak owner folder. Cari user yang menjalankan 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:
Contoh output:
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:
Atur owner untuk folder yang perlu ditulis:
Beri permission tulis untuk owner dan group:
Jika folder masih belum bisa dimasuki oleh group, tambahkan permission execute untuk direktori:
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:
Artinya:
- user
deploytetap bisa update kode, - group
www-databisa membaca project, - folder
storagedanbootstrap/cachebisa 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:
Pastikan folder itu bisa ditulis PHP-FPM:
Lalu pastikan symlink publik sudah ada:
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:
Jika perintah artisan gagal karena permission, jalankan ulang pengecekan owner:
Cek juga 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
- Catat user PHP-FPM yang dipakai server.
- Jangan deploy sebagai
rootjika tidak perlu. - Jadikan perintah permission sebagai bagian checklist deploy.
- Hindari
chmod 777untuk solusi permanen. - Cek
storage/logs/laravel.logsetelah deploy. - Uji login, upload, dan halaman yang memakai cache setelah perubahan server.
Bacaan Terkait
- Cara Deploy Laravel ke VPS
- Setup Nginx + PHP-FPM untuk Laravel
- Storage Link Laravel Tidak Jalan di Server
- Laravel
.envProduction: Checklist Aman - Cara Menjalankan Scheduler Laravel di Production
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.