Blog AI

Cara Mengatasi Error Permission Laravel di Hosting dan VPS

16 May 2026· Wahyu Rifki Taufik
error permission LaravelLaravel permission deniedchmod Laravelchown LaravelLaravel storage permissionbootstrap cache permissionLaravel log could not be openedchmod 775 Laraveljangan chmod 777 Laravel
Cara Mengatasi Error Permission Laravel di Hosting dan VPS
Error permission adalah salah satu masalah yang cukup sering muncul saat aplikasi Laravel dipindahkan dari lokal ke hosting atau VPS. Di lokal, aplikasi biasanya berjalan normal. Namun setelah di-upload ke server, tiba-tiba muncul error seperti Permission denied, halaman 500, cache tidak bisa dibuat, gambar tidak bisa di-upload, atau file log gagal ditulis.

Masalah seperti ini biasanya bukan karena kode aplikasinya rusak, tetapi karena server tidak punya hak akses yang benar untuk membaca atau menulis file tertentu.

Laravel membutuhkan beberapa folder yang bisa ditulis oleh sistem. Jika permission folder tersebut salah, aplikasi tidak bisa berjalan dengan baik.

Penyebab Error Permission pada Laravel

Laravel menggunakan beberapa folder untuk menyimpan file sementara, cache, session, log, dan file hasil upload. Folder tersebut tidak cukup hanya ada, tetapi juga harus bisa ditulis oleh user yang menjalankan aplikasi.

Di server, aplikasi Laravel biasanya dijalankan oleh web server seperti Apache atau Nginx. Web server ini bisa memakai user seperti www-data, nginx, atau user lain sesuai konfigurasi server.

Jika folder Laravel dimiliki oleh user yang berbeda dan web server tidak punya akses tulis, maka error permission akan muncul.

Contoh error yang sering terlihat:
Code
The stream or file "storage/logs/laravel.log" could not be opened

atau:

Code
file_put_contents(...): Failed to open stream: Permission denied
Error ini menunjukkan bahwa Laravel mencoba menulis file, tetapi sistem operasi menolaknya.

Folder Laravel yang Wajib Bisa Ditulis

Tidak semua folder Laravel perlu diberi akses tulis. Folder yang paling penting adalah:

- storage
- bootstrap/cache

folder storage digunakan untuk menyimpan log, session, cache, file upload, dan file lain yang dihasilkan aplikasi.

Sementara itu, folder bootstrap/cache digunakan Laravel untuk menyimpan file cache konfigurasi, route, service, dan package.

Jika dua folder ini tidak memiliki permission yang benar, aplikasi bisa gagal berjalan, terutama saat menjalankan perintah seperti:
Code
php artisan config:cache
php artisan route:cache
php artisan view:cache

Jadi, fokus utama saat memperbaiki permission Laravel adalah memastikan folder storage dan bootstrap/cache bisa ditulis oleh user yang tepat.

Permission yang Aman untuk Laravel

Kesalahan yang sering dilakukan adalah langsung menjalankan:
Code
chmod -R 777 storage bootstrap/cache
Perintah ini memang sering membuat error hilang, tetapi bukan solusi yang aman. Permission 777 berarti semua user di server bisa membaca, menulis, dan mengeksekusi file tersebut.

Di server production, ini terlalu longgar dan berisiko. Solusi yang lebih aman adalah mengatur ownership dan permission dengan benar.

Umumnya, permission yang cukup adalah:
Code
chmod -R 775 storage bootstrap/cache
Dengan permission ini, owner dan group bisa membaca, menulis, dan mengeksekusi. User lain hanya bisa membaca dan mengeksekusi.

Namun permission saja belum cukup. Ownership juga harus benar.

Cara Mengatur Ownership Project Laravel

Misalnya user deploy Anda adalah psbhost, dan web server memakai group www-data. Maka ownership yang lebih rapi adalah:
Code
sudo chown -R psbhost:www-data /var/www/nama-project
Perintah ini membuat user psbhost sebagai pemilik project, sementara group-nya adalah www-data.

Dengan pola ini, user deploy tetap bisa mengelola file project, dan web server tetap bisa mengakses folder yang dibutuhkan.

Setelah itu, atur permission folder dan file:
Code
sudo find /var/www/nama-project -type d -exec chmod 775 {} \;
sudo find /var/www/nama-project -type f -exec chmod 664 {} \;
Perintah tersebut membuat folder memiliki permission 775, sedangkan file memiliki permission 664.

Ini lebih aman dibanding memberi akses penuh ke semua user.

Mengatur Permission untuk Storage dan Bootstrap Cache

Setelah ownership project diperbaiki, pastikan folder penting Laravel tetap writable:
Code
sudo chown -R psbhost:www-data /var/www/nama-project/storage /var/www/nama-project/bootstrap/cache
sudo chmod -R 775 /var/www/nama-project/storage /var/www/nama-project/bootstrap/cache
Jika aplikasi masih gagal menulis log atau cache, cek user web server yang digunakan.

Untuk Apache di Ubuntu/Debian, biasanya user-nya adalah:

www-data

Untuk Nginx, juga sering menggunakan:

www-data

Namun di beberapa server, terutama panel hosting atau konfigurasi custom, user-nya bisa berbeda.

Anda bisa mengeceknya dengan:
Code
ps aux | grep nginx
atau:
Code
ps aux | grep apache
Jika ternyata web server memakai user atau group lain, sesuaikan ownership dengan konfigurasi server tersebut.

Jangan Menjalankan Composer dan NPM dengan Sudo

Masalah permission Laravel sering bertambah parah karena perintah deploy dijalankan dengan sudo.

Contohnya:
Code
sudo composer install
sudo npm install
sudo npm run build
Ini bukan praktik yang baik untuk deploy aplikasi Laravel.

Jika perintah tersebut dijalankan dengan sudo, file hasil install bisa menjadi milik root. Akibatnya, user deploy biasa tidak bisa mengubah atau menghapus file tersebut pada proses deploy berikutnya.

Jalankan Composer dan NPM menggunakan user deploy, bukan root.

Contoh yang lebih benar:
Code
composer install --no-dev --optimize-autoloader
npm ci
npm run build
Jika muncul error permission saat menjalankan perintah di atas, jangan langsung menambahkan sudo. Perbaiki ownership folder project terlebih dahulu.

Error Permission pada File Upload

Jika aplikasi memiliki fitur upload gambar atau dokumen, error permission juga bisa muncul saat menyimpan file ke storage.

Contoh kode upload Laravel:
Code
$path = $request->file('photo')->store('photos', 'public');

Kode tersebut akan menyimpan file ke:

Code
storage/app/public/photos

Agar file bisa tersimpan, folder storage/app/public harus bisa ditulis oleh aplikasi.


Jika file perlu diakses dari browser, pastikan storage link sudah dibuat:
Code
php artisan storage:link
Setelah itu, file bisa diakses melalui:
Code
/public/storage
atau URL seperti:
Code
https://domain.com/storage/photos/nama-file.jpg
Jika file berhasil di-upload tetapi tidak tampil di browser, masalahnya bisa berasal dari storage link, permission folder, atau konfigurasi web server.

Membersihkan Cache Setelah Perbaikan Permission

Setelah memperbaiki permission, sebaiknya bersihkan cache Laravel agar konfigurasi lama tidak ikut terbawa.

Jalankan:
Code
php artisan optimize:clear
Kemudian buat ulang cache untuk production:
Code
php artisan config:cache
php artisan route:cache
php artisan view:cache
Jika salah satu perintah gagal karena permission, berarti masih ada folder yang belum bisa ditulis dengan benar.

Praktik Terbaik Permission Laravel di Production

Untuk production, jangan memberi permission terlalu bebas. Gunakan ownership yang jelas antara user deploy dan web server.

Beberapa aturan sederhana yang sebaiknya dipakai:

  1. - Project dikelola oleh user deploy, bukan root.
  2. - Web server hanya diberi akses tulis ke folder yang memang diperlukan.
  3. - Hindari chmod 777.
  4. - Jangan menjalankan Composer atau NPM dengan sudo.
  5. - Pastikan storage dan bootstrap/cache selalu writable.
  6. - Bersihkan dan buat ulang cache setelah perubahan konfigurasi.

Dengan aturan ini, aplikasi lebih stabil dan lebih mudah dirawat.

Kesimpulan

Error permission pada Laravel biasanya terjadi karena folder storage atau bootstrap/cache tidak bisa ditulis oleh aplikasi. Solusinya bukan memberi permission 777, tetapi mengatur ownership dan permission dengan benar.

Gunakan user deploy untuk mengelola project, berikan akses group kepada web server, lalu pastikan folder penting Laravel memiliki permission yang aman.

Dengan konfigurasi yang rapi, proses deploy menjadi lebih lancar, fitur upload berjalan normal, log bisa ditulis, dan cache Laravel dapat dibuat tanpa error.

Stack Pendukung

Layanan & infrastruktur yang digunakan.

Dipilih sesuai kebutuhan proyek, alur kerja, dan target rilis.

IDCloudHostCloud dan hosting
HostingerHosting dan domain
MicrosoftProduktivitas dan cloud
CloudflareDNS, CDN, R2 dan keamanan
MidtransPayment gateway