Panduan Deploy Laravel di Shared Hosting cPanel

Studi Kasus Nyata: Dari Error 500 Hingga Website Online Stabil

Deploy aplikasi Laravel ke shared hosting berbasis cPanel sering dianggap sederhana. Banyak tutorial hanya menyebutkan langkah global: upload file, set .env, lalu selesai. Kenyataannya, deploy Laravel—terutama versi terbaru—menyimpan banyak jebakan kecil yang dapat memicu Internal Server Error (500) secara beruntun.

Artikel ini mendokumentasikan pengalaman nyata saat mendeploy aplikasi Laravel ke domain jurnal.my.id menggunakan shared hosting cPanel. Seluruh error, solusi, dan keputusan konfigurasi ditulis berdasarkan kejadian sebenarnya, sehingga dapat dijadikan panduan praktis untuk deploy Laravel berikutnya.


Gambaran Awal Lingkungan

Sebelum masuk ke troubleshooting, berikut kondisi awal sistem:

  • Framework: Laravel 12
  • PHP: 8.2
  • Hosting: Shared hosting (cPanel)
  • Database: MySQL
  • Domain: jurnal.my.id
  • Akses shell: tersedia (Terminal cPanel)

Project Laravel sudah lengkap, termasuk folder vendor, sehingga tidak perlu menjalankan composer install di server.


1. Kondisi Awal: Website Hanya Menampilkan Error 500

Setelah seluruh file Laravel di-upload dan domain diakses, yang muncul hanyalah:

Internal Server Error

Tanpa pesan tambahan, tanpa detail.

Pada tahap ini, jangan langsung menyimpulkan hosting bermasalah. Pada Laravel, error 500 sering kali menandakan:

  • kesalahan environment,
  • konfigurasi .env,
  • permission folder atau akses database.

Langkah pertama adalah mendapatkan error aslinya.


2. Kesalahan Awal yang Umum: Artisan Tidak Bisa Dijalankan

Saat mencoba menjalankan perintah:

php artisan key:generate

Muncul pesan:

Could not open input file: artisan

Analisis

Error ini bukan error Laravel, melainkan kesalahan lokasi eksekusi perintah.
Perintah artisan harus dijalankan dari folder project Laravel, bukan dari home directory.

Solusi

Masuk ke folder project terlebih dahulu:

cd atlantis

Pastikan file artisan terlihat:

ls

Setelah itu, perintah artisan dapat dijalankan normal.


3. Error 500 Tetap Ada: Kesalahan Fatal pada APP_URL

Setelah APP_KEY berhasil dibuat, website masih error 500.
Pengecekan file .env menemukan kesalahan berikut:

APP_URL=http:https://jurnal.my.id

Analisis

Ini adalah kesalahan fatal karena saya terburu-buru akhirnya typo. Laravel sangat sensitif terhadap APP_URL, karena digunakan oleh:

  • URL generator
  • session
  • middleware
  • asset resolution

Format http:https:// tidak valid.

Perbaikan

APP_URL=https://jurnal.my.id

Untuk debugging sementara:

APP_DEBUG=true APP_ENV=production

Langkah ini penting agar Laravel menampilkan error sebenarnya, bukan hanya error 500 kosong.


4. Error Database Pertama: SQLSTATE 1044 (Permission)

Setelah debug aktif, muncul error:

SQLSTATE[42000] [1044] Access denied for user

Makna Error 1044

  • User MySQL ada
  • Database ada
  • Tapi user belum diberi hak akses ke database

Ini adalah kesalahan klasik di cPanel.

Solusi

Di cPanel → MySQL Databases:

  • Tambahkan user ke database
  • Berikan ALL PRIVILEGES
  • Simpan perubahan

Tanpa langkah ini, Laravel tidak akan pernah bisa query database, meskipun credential terlihat benar.


5. Error Database Kedua: SQLSTATE 1045 (Autentikasi)

Setelah permission diperbaiki, muncul error lain:

SQLSTATE[28000] [1045] Access denied for user (using password: YES)

Perbedaan 1044 vs 1045

KodeArti
1044User tidak punya hak akses
1045Username / password salah atau cache lama

Penyebab Umum

  • Password MySQL tidak sama dengan .env

  • Laravel masih menggunakan config cache lama

Solusi

  1. Reset password user MySQL di cPanel
  2. Update .env
  3. Hapus cache konfigurasi Laravel:
php artisan config:clear

Atau hapus manual seluruh file di:

bootstrap/cache/

Langkah ini wajib. Tanpa clear cache, Laravel tetap memakai credential lama.


6. Database Masih Kosong: Migrasi Wajib Dilakukan

Setelah koneksi database berhasil, muncul error terkait tabel sessions.

Pemeriksaan menunjukkan:

  • Database masih kosong

  • Tidak ada tabel migrations, users, dan lainnya

Kesimpulan Penting

Laravel tidak bisa berjalan normal tanpa migration, meskipun koneksi database sudah benar.


7. Migrasi Database: Titik Balik Utama

Perintah dijalankan:

php artisan migrate

Output:

Creating migration table DONE create_users_table DONE create_cache_table DONE create_jobs_table DONE

Arti Output Ini

  • Koneksi database sukses
  • Permission MySQL benar
  • Struktur database siap
  • Backend Laravel sudah sehat

Ini adalah titik balik utama dari seluruh proses deploy.


8. Penyesuaian Laravel 12: Session, Cache, dan Queue

Pada Laravel 12:

  • CACHE_DRIVER sudah tidak digunakan

  • Digantikan oleh CACHE_STORE

Konfigurasi awal menggunakan database:

SESSION_DRIVER=database CACHE_STORE=database QUEUE_CONNECTION=database

Namun pada shared hosting:

  • Session database tidak selalu stabil

  • Queue database memerlukan worker (yang tidak tersedia)

Keputusan Konfigurasi Produksi

Dipilih konfigurasi paling aman:

SESSION_DRIVER=file CACHE_STORE=file QUEUE_CONNECTION=sync

Setelah perubahan:

php artisan config:clear

9. Website Online dan Stabil

Setelah seluruh langkah dilakukan secara berurutan:

  • Website tampil normal
  • Tidak ada error 500
  • Database berfungsi
  • Session berjalan stabil

Perintah seperti:

php artisan session:table php artisan migrate

tidak dijalankan, karena:

  • Session sudah berbasis file
  • Tidak diperlukan tabel sessions
  • Menghindari kompleksitas yang tidak perlu

Checklist Deploy Laravel ke Shared Hosting (Ringkasan)

Checklist ini bisa dijadikan acuan deploy berikutnya:

  1. Upload project Laravel lengkap
  2. Pastikan eksekusi artisan di folder yang benar
  3. Periksa format APP_URL
  4. Aktifkan debug sementara
  5. Assign user MySQL ke database
  6. Reset password MySQL jika perlu
  7. Clear config cache Laravel
  8. Jalankan php artisan migrate
  9. Gunakan file-based session & cache
  10. Matikan debug untuk produksi

Penutup

Pengalaman ini menunjukkan bahwa deploy Laravel bukan soal “sekali klik”, melainkan soal urutan, pemahaman, dan kesabaran. Hampir semua error yang muncul bukan karena Laravel bermasalah, melainkan karena detail kecil yang terlewat.

Dengan dokumentasi ini, proses deploy Laravel berikutnya dapat dilakukan:

  • lebih cepat,

  • lebih tenang,

  • dan minim trial-error.

DOKUMENTASI LAMA