Cara Deploy Laravel ke cPanel Shared Hosting Tanpa VPS

Deploy Laravel ke cPanel shared hosting sebenarnya bisa dilakukan, walaupun tidak senyaman deploy ke VPS. Masalah yang sering muncul biasanya bukan karena Laravel tidak support shared hosting, tetapi karena struktur folder, versi PHP, permission, composer, atau konfigurasi .env belum sesuai.

Saya cukup sering menemukan kasus Laravel sudah berhasil di-upload ke hosting, tetapi saat domain dibuka hanya muncul error 500, halaman kosong, asset CSS tidak tampil, atau route Laravel menghasilkan 404. Setelah dicek, penyebabnya sering sederhana: domain belum diarahkan ke folder public, file .env belum benar, APP_KEY belum dibuat, atau folder storage tidak bisa ditulis.

Artikel ini membahas langkah deploy Laravel ke cPanel shared hosting dari awal sampai pengecekan error setelah deploy. Fokusnya bukan teori Laravel, tetapi alur praktis yang bisa langsung dicoba di hosting biasa, terutama untuk pengguna yang belum memakai VPS.

Persiapan Sebelum Deploy Laravel ke cPanel

Sebelum upload project Laravel ke cPanel, pastikan dulu environment hosting mendukung project yang akan dijalankan. Ini penting karena shared hosting biasanya punya batasan resource, akses SSH yang terbatas, dan versi PHP yang kadang berbeda dengan komputer lokal.

Beberapa hal yang perlu dicek:

  • Versi PHP di cPanel
  • Ekstensi PHP yang dibutuhkan Laravel
  • Akses SSH
  • Composer
  • Database MySQL atau PostgreSQL
  • File .env
  • Domain atau subdomain yang akan dipakai
  • Document root domain
  • Kebutuhan build asset jika project menggunakan Vite

Untuk Laravel 10, 11, atau 12, biasanya dibutuhkan PHP versi modern seperti PHP 8.2, 8.3, atau 8.4. Cek di menu Select PHP Version, MultiPHP Manager, atau menu serupa di cPanel.

Ekstensi PHP yang umum dibutuhkan Laravel antara lain:

  • openssl
  • pdo
  • pdo_mysql atau pdo_pgsql
  • mbstring
  • tokenizer
  • xml
  • ctype
  • json
  • fileinfo
  • curl
  • zip
  • bcmath

Jika salah satu ekstensi penting belum aktif, Laravel bisa menghasilkan error 500 atau error dependency saat menjalankan Composer.

Kalau hosting menyediakan SSH, proses deploy akan lebih mudah karena kita bisa menjalankan command seperti:

composer install --no-dev --optimize-autoloader
php artisan key:generate
php artisan migrate --force
php artisan optimize

Jika tidak ada akses SSH, deploy tetap bisa dilakukan, tetapi beberapa proses seperti composer install, npm run build, dan generate file tertentu sebaiknya dilakukan di komputer lokal terlebih dahulu.

Struktur Folder Laravel yang Aman di cPanel

Struktur folder adalah bagian paling penting saat deploy Laravel ke shared hosting. Laravel memiliki folder public yang memang dirancang sebagai document root. Artinya, domain sebaiknya diarahkan ke folder public, bukan ke root project Laravel.

Struktur yang lebih aman biasanya seperti ini:

/home/username/
├── laravel-project/
│   ├── app/
│   ├── bootstrap/
│   ├── config/
│   ├── database/
│   ├── public/
│   ├── resources/
│   ├── routes/
│   ├── storage/
│   ├── vendor/
│   ├── .env
│   └── artisan
└── public_html/

Jika cPanel mengizinkan perubahan document root, arahkan domain atau subdomain ke:

/home/username/laravel-project/public

Dengan cara ini, file penting seperti .env, composer.json, folder app, storage, dan vendor tidak bisa diakses langsung dari browser.

Struktur yang direkomendasikan untuk domain utama atau subdomain:

/home/username/
├── apps/
│   └── nama-project-laravel/
│       ├── app/
│       ├── bootstrap/
│       ├── config/
│       ├── database/
│       ├── public/
│       ├── resources/
│       ├── routes/
│       ├── storage/
│       ├── vendor/
│       ├── .env
│       └── artisan
└── public_html/

Lalu document root domain diarahkan ke:

/home/username/apps/nama-project-laravel/public

Risiko jika semua file Laravel diletakkan langsung di public_html adalah file sensitif berpotensi terbuka, terutama jika konfigurasi server salah. File seperti .env tidak boleh berada di folder yang bisa diakses publik.

Jika hosting tidak bisa mengubah document root, alternatifnya adalah memindahkan isi folder public ke public_html, lalu menyesuaikan path di file index.php. Cara ini bisa digunakan, tetapi lebih rawan salah konfigurasi dibandingkan mengarahkan domain langsung ke folder public.

Contoh perubahan di public_html/index.php jika project Laravel berada di luar public_html:

require __DIR__.'/../apps/nama-project-laravel/vendor/autoload.php';

$app = require_once __DIR__.'/../apps/nama-project-laravel/bootstrap/app.php';

Pastikan path tersebut sesuai dengan lokasi project di hosting.

Cara Deploy Laravel ke cPanel Shared Hosting

Berikut alur deploy Laravel ke cPanel shared hosting yang paling umum saya gunakan. Sesuaikan dengan fitur yang tersedia di hosting masing-masing.

1. Upload Project Laravel ke Hosting

Ada beberapa cara upload project Laravel ke cPanel:

  • Upload file ZIP melalui File Manager cPanel
  • Upload via FTP/SFTP
  • Clone repository Git jika cPanel menyediakan Git Version Control
  • Push dari lokal ke repository yang terhubung ke cPanel
  • Upload manual dari komputer lokal

Untuk shared hosting, cara paling sederhana adalah membuat file ZIP dari project Laravel, lalu upload melalui File Manager.

Sebelum membuat ZIP, pastikan file yang tidak perlu tidak ikut terupload, misalnya:

node_modules/
.git/
.env lokal yang berisi kredensial development
storage/logs/*.log

Jika hosting mendukung Composer dan SSH, folder vendor tidak wajib ikut diupload karena bisa dibuat ulang dengan command composer install.

Jika hosting tidak punya SSH atau Composer, folder vendor perlu disiapkan dari lokal lalu ikut diupload.

2. Extract Project di Folder yang Tepat

Setelah file ZIP diupload, extract project di folder yang aman, misalnya:

/home/username/apps/nama-project-laravel

Hindari extract semua file Laravel langsung ke:

/home/username/public_html

kecuali memang tidak ada pilihan lain dan Anda sudah memahami risiko serta perubahan path yang perlu dilakukan.

Contoh struktur setelah extract:

/home/username/apps/nama-project-laravel/
├── app/
├── bootstrap/
├── config/
├── database/
├── public/
├── resources/
├── routes/
├── storage/
├── composer.json
├── composer.lock
└── artisan

Pastikan file artisan, composer.json, dan folder public berada di root project Laravel.

3. Arahkan Domain ke Folder public Laravel

Laravel harus diakses dari folder public. Jika memakai addon domain atau subdomain, biasanya document root bisa diatur dari cPanel.

Contoh document root yang benar:

/home/username/apps/nama-project-laravel/public

Jika domain masih diarahkan ke public_html, kemungkinan Laravel tidak akan berjalan dengan benar. Gejalanya bisa berupa:

  • Route menghasilkan 404
  • File .env berisiko terbuka
  • Asset tidak ditemukan
  • Error 500
  • Halaman hanya menampilkan daftar file

Jika cPanel tidak mengizinkan document root di luar public_html, gunakan alternatif berikut:

  1. Pindahkan isi folder public Laravel ke public_html
  2. Edit path di public_html/index.php
  3. Pastikan file .htaccess dari folder public ikut dipindahkan
  4. Pastikan folder utama Laravel tetap berada di luar public_html

Contoh isi penting file index.php yang perlu disesuaikan:

require __DIR__.'/../apps/nama-project-laravel/vendor/autoload.php';

$app = require_once __DIR__.'/../apps/nama-project-laravel/bootstrap/app.php';

Jangan asal copy tanpa mengecek path, karena beda hosting bisa beda struktur folder.

4. Buat Database di cPanel

Jika aplikasi Laravel menggunakan database, buat database dari menu cPanel seperti MySQL Databases, PostgreSQL Databases, atau menu sejenis.

Untuk MySQL, biasanya langkahnya seperti ini:

  1. Buat database baru
  2. Buat user database
  3. Buat password yang kuat
  4. Assign user ke database
  5. Berikan privilege yang dibutuhkan
  6. Catat nama database, username, password, host, dan port

Di cPanel, nama database dan username sering memiliki prefix akun hosting.

Contoh:

Database: username_namadatabase
Username: username_userdatabase
Host: localhost
Port: 3306

Jika memakai PostgreSQL, port default biasanya 5432, tetapi tetap cek informasi dari hosting karena beberapa provider memakai konfigurasi berbeda.

5. Buat dan Edit File .env

Laravel membutuhkan file .env untuk membaca konfigurasi aplikasi. Jika di project hanya ada .env.example, buat salinannya menjadi .env.

Jika punya SSH, jalankan:

cp .env.example .env

Jika tidak ada SSH, buat file .env manual melalui File Manager cPanel.

Contoh konfigurasi dasar:

APP_NAME="Nama Website"
APP_ENV=production
APP_KEY=
APP_DEBUG=false
APP_URL=https://domainanda.com

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=username_namadatabase
DB_USERNAME=username_userdatabase
DB_PASSWORD=password_database

Beberapa catatan penting:

  • APP_ENV gunakan production
  • APP_DEBUG wajib false untuk website live
  • APP_URL isi dengan domain asli
  • DB_DATABASE, DB_USERNAME, dan DB_PASSWORD harus sesuai data dari cPanel
  • Jangan memakai konfigurasi database lokal seperti root tanpa password

Jika menggunakan PostgreSQL, sesuaikan bagian database:

DB_CONNECTION=pgsql
DB_HOST=localhost
DB_PORT=5432
DB_DATABASE=username_namadatabase
DB_USERNAME=username_userdatabase
DB_PASSWORD=password_database

Pada beberapa hosting, DB_HOST=localhost bisa saja tidak sesuai. Jika muncul error database connection, cek kembali host database dari cPanel atau tanyakan ke provider hosting.

6. Jalankan Composer Install

Jika hosting menyediakan SSH dan Composer, masuk ke folder project Laravel:

cd /home/username/apps/nama-project-laravel

Lalu jalankan:

composer install --no-dev --optimize-autoloader

Command ini akan menginstall dependency Laravel untuk production tanpa package development.

Jika muncul error Composer, cek beberapa hal:

  • Apakah Composer tersedia di hosting
  • Apakah versi PHP CLI sesuai
  • Apakah memory limit cukup
  • Apakah ekstensi PHP yang dibutuhkan sudah aktif
  • Apakah file composer.lock ikut terupload

Pada beberapa shared hosting, command php di terminal bisa menggunakan versi berbeda dari versi PHP domain. Cek dengan:

php -v

Jika hosting memakai path PHP khusus, command bisa jadi seperti ini:

/opt/alt/php83/usr/bin/php composer.phar install --no-dev --optimize-autoloader

Path PHP bisa berbeda di setiap hosting, jadi sesuaikan dengan dokumentasi provider.

7. Generate APP_KEY

Laravel membutuhkan APP_KEY. Jika belum dibuat, aplikasi bisa error atau fitur enkripsi/session tidak berjalan dengan benar.

Jalankan:

php artisan key:generate

Setelah berhasil, file .env akan terisi seperti ini:

APP_KEY=base64:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Jika tidak ada SSH, Anda bisa generate APP_KEY di lokal dengan project yang sama, lalu copy nilainya ke file .env di hosting.

Contoh di lokal:

php artisan key:generate --show

Lalu salin hasilnya ke .env hosting:

APP_KEY=base64:hasil_key_dari_lokal

Jangan mengganti APP_KEY sembarangan setelah aplikasi berjalan, terutama jika aplikasi sudah memakai data terenkripsi, session, atau fitur remember token.

8. Jalankan Storage Link

Jika aplikasi memakai upload gambar, file publik, avatar, atau dokumen yang disimpan di storage/app/public, jalankan:

php artisan storage:link

Command ini membuat symbolic link dari:

public/storage

ke:

storage/app/public

Jika storage:link gagal di shared hosting, beberapa kemungkinan penyebabnya:

  • Hosting tidak mengizinkan symlink
  • Permission folder tidak cukup
  • Folder public/storage sudah ada
  • Path document root tidak sesuai

Jika folder public/storage sudah ada dan salah, hapus dulu dengan hati-hati lalu jalankan ulang command.

rm -rf public/storage
php artisan storage:link

Pastikan tidak menghapus folder yang berisi file penting.

9. Jalankan Migration Jika Dibutuhkan

Jika database masih kosong dan project menggunakan migration Laravel, jalankan:

php artisan migrate --force

Opsi --force dibutuhkan karena environment production biasanya meminta konfirmasi sebelum migration dijalankan.

Sebelum menjalankan migration di production, pastikan:

  • Database sudah dibackup jika sebelumnya sudah berisi data
  • Konfigurasi .env benar
  • Migration sudah dites di lokal atau staging
  • Tidak ada migration yang berisiko menghapus data
  • User database punya privilege yang cukup

Jika migration gagal, cek pesan errornya. Beberapa error umum:

SQLSTATE[HY000] [1045] Access denied for user

Artinya username atau password database salah.

SQLSTATE[HY000] [2002] Connection refused

Artinya host atau port database salah, atau database server tidak bisa diakses.

could not find driver

Artinya ekstensi PHP database seperti pdo_mysql atau pdo_pgsql belum aktif.

10. Optimasi Laravel untuk Production

Setelah deploy selesai, jalankan cache dan optimasi Laravel:

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

Command ini membantu Laravel membaca konfigurasi dan route lebih cepat di production.

Namun, ada catatan penting. Jika setelah mengubah .env website masih membaca konfigurasi lama, jalankan:

php artisan optimize:clear

Lalu cache ulang:

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

Jangan lupa, setiap perubahan .env biasanya perlu diikuti dengan clear cache config.

Contoh Command Deploy Laravel di cPanel

Jika hosting menyediakan SSH, contoh alur command deploy sederhana bisa seperti ini:

cd /home/username/apps/nama-project-laravel

composer install --no-dev --optimize-autoloader

cp .env.example .env

php artisan key:generate

php artisan storage:link

php artisan migrate --force

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

Jika file .env sudah dibuat manual, command cp .env.example .env tidak perlu dijalankan lagi.

Untuk update setelah deploy pertama, biasanya alurnya seperti ini:

cd /home/username/apps/nama-project-laravel

composer install --no-dev --optimize-autoloader

php artisan optimize:clear

php artisan migrate --force

php artisan storage:link

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

Jika project menggunakan queue, tambahkan:

php artisan queue:restart

Jika project menggunakan Vite dan asset sudah dibuild di lokal, pastikan folder hasil build ikut terupload, biasanya:

public/build

Contoh Konfigurasi .env Laravel di cPanel

Berikut contoh konfigurasi .env untuk Laravel di cPanel menggunakan MySQL:

APP_NAME="Nama Website"
APP_ENV=production
APP_KEY=
APP_DEBUG=false
APP_URL=https://domainanda.com

LOG_CHANNEL=stack
LOG_LEVEL=error

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=username_namadatabase
DB_USERNAME=username_userdatabase
DB_PASSWORD=password_database

SESSION_DRIVER=file
CACHE_STORE=file
QUEUE_CONNECTION=sync

Setelah APP_KEY dibuat, bagian APP_KEY akan terisi:

APP_KEY=base64:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Untuk PostgreSQL, bagian database bisa disesuaikan seperti ini:

DB_CONNECTION=pgsql
DB_HOST=localhost
DB_PORT=5432
DB_DATABASE=username_namadatabase
DB_USERNAME=username_userdatabase
DB_PASSWORD=password_database

Jika memakai Redis, queue, mail server, S3, atau service lain, sesuaikan juga konfigurasi terkait. Jangan biarkan konfigurasi lokal ikut terbawa ke production, misalnya APP_URL=http://localhost.

Setelah mengubah .env, jalankan:

php artisan optimize:clear
php artisan config:cache

Jika tidak ada SSH, Anda perlu memastikan file .env sudah benar sebelum upload atau edit langsung melalui File Manager cPanel.

Cara Deploy Laravel Jika Tidak Ada Akses SSH

Tidak semua shared hosting menyediakan SSH. Jika hosting Anda tidak punya SSH, deploy Laravel masih bisa dilakukan, tetapi prosesnya harus lebih banyak disiapkan dari komputer lokal.

Alur yang bisa digunakan:

  1. Jalankan Composer di lokal
  2. Generate APP_KEY di lokal
  3. Build asset Vite di lokal
  4. Upload project beserta folder vendor
  5. Upload folder hasil build asset
  6. Buat file .env manual di hosting
  7. Arahkan domain ke folder public
  8. Import database manual jika diperlukan

Di komputer lokal, jalankan:

composer install --no-dev --optimize-autoloader
php artisan key:generate --show
npm install
npm run build

Jika project sudah pernah install dependency, Anda bisa menyesuaikan command sesuai kebutuhan.

Pastikan folder berikut ikut terupload:

vendor/
public/build/
bootstrap/cache/

Namun untuk bootstrap/cache, jika isinya bermasalah, Anda bisa kosongkan dulu file cache lama sebelum upload.

Jika tidak ada SSH, migration tidak bisa dijalankan langsung dengan php artisan migrate. Alternatifnya:

  • Jalankan migration di lokal pada database sementara, lalu export SQL
  • Import file SQL ke database hosting melalui phpMyAdmin
  • Gunakan fitur terminal jika cPanel menyediakan terminal terbatas
  • Minta bantuan provider hosting jika command artisan tidak tersedia

Hindari menjalankan command berat seperti npm run build langsung di shared hosting kecil, terutama jika memory limit rendah. Build Vite cukup sering gagal di shared hosting karena proses Node.js membutuhkan memory lebih besar dibanding proses PHP biasa.

Cara Mengatasi Error Umum Setelah Deploy

Setelah deploy, error paling sering muncul karena konfigurasi hosting berbeda dengan lokal. Berikut beberapa error yang umum terjadi dan cara mengeceknya.

Error 500 Setelah Deploy

Error 500 adalah gejala umum. Penyebabnya bisa banyak, jadi jangan langsung menebak. Langkah pertama adalah cek log Laravel:

storage/logs/laravel.log

Jika ada SSH, bisa cek dengan:

tail -n 100 storage/logs/laravel.log

Penyebab umum error 500:

  • File .env belum ada
  • APP_KEY kosong
  • Permission folder storage bermasalah
  • Permission folder bootstrap/cache bermasalah
  • Versi PHP tidak cocok
  • Ekstensi PHP belum aktif
  • Composer dependency belum terinstall
  • Database tidak terkoneksi
  • Cache config masih membaca setting lama

Solusi cepat yang biasanya saya coba:

php artisan optimize:clear
composer install --no-dev --optimize-autoloader
php artisan config:cache
php artisan optimize

Cek juga permission folder:

chmod -R 775 storage bootstrap/cache

Di shared hosting tertentu, permission 775 bisa saja tidak cocok. Jika error tetap muncul, cek rekomendasi permission dari provider hosting.

APP_KEY Belum Dibuat

Jika APP_KEY belum dibuat, Laravel bisa menampilkan error seperti:

No application encryption key has been specified.

Solusinya:

php artisan key:generate

Jika tidak ada SSH, generate dari lokal:

php artisan key:generate --show

Lalu copy hasilnya ke file .env hosting:

APP_KEY=base64:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Setelah itu clear cache config jika memungkinkan:

php artisan optimize:clear
php artisan config:cache

Database Connection Error

Error database biasanya muncul karena konfigurasi .env tidak sesuai dengan database di cPanel.

Contoh error:

SQLSTATE[HY000] [1045] Access denied for user

Artinya username atau password database salah.

Contoh lain:

SQLSTATE[HY000] [2002] Connection refused

Artinya host atau port database salah.

Cek kembali bagian ini:

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=username_namadatabase
DB_USERNAME=username_userdatabase
DB_PASSWORD=password_database

Pastikan user database sudah di-assign ke database dan punya privilege yang cukup.

Jika memakai PostgreSQL:

DB_CONNECTION=pgsql
DB_HOST=localhost
DB_PORT=5432
DB_DATABASE=username_namadatabase
DB_USERNAME=username_userdatabase
DB_PASSWORD=password_database

Jika muncul error:

could not find driver

aktifkan ekstensi pdo_mysql atau pdo_pgsql dari menu PHP Extensions di cPanel.

Setelah mengubah .env, jalankan:

php artisan optimize:clear
php artisan config:cache

Route Laravel 404

Jika route Laravel menghasilkan 404, penyebab yang paling sering adalah document root salah atau file .htaccess tidak ikut terupload.

Pastikan domain diarahkan ke:

/home/username/apps/nama-project-laravel/public

Bukan ke root project Laravel.

Cek juga apakah file berikut ada:

public/.htaccess

Isi .htaccess Laravel biasanya menangani rewrite request ke index.php. Jika file ini hilang, route seperti /login, /dashboard, atau /produk/123 bisa menghasilkan 404.

Solusi:

  1. Upload ulang file public/.htaccess
  2. Pastikan Apache rewrite aktif
  3. Pastikan document root mengarah ke folder public
  4. Clear route cache jika route berubah
php artisan route:clear
php artisan route:cache

Jika memakai route closure, hati-hati dengan route:cache karena pada beberapa versi Laravel atau struktur tertentu bisa bermasalah. Jika setelah route:cache route error, jalankan:

php artisan route:clear

CSS atau JavaScript Tidak Muncul

Jika halaman Laravel tampil tanpa CSS atau JavaScript, biasanya masalah ada di asset.

Penyebab umum:

  • APP_URL salah
  • Folder public/build tidak terupload
  • Belum menjalankan npm run build
  • Path asset berbeda karena domain/subfolder
  • Mixed content HTTP/HTTPS
  • File permission asset bermasalah

Jika project menggunakan Vite, jalankan build di lokal atau server:

npm install
npm run build

Pastikan folder ini ada di hosting:

public/build

Cek juga konfigurasi:

APP_URL=https://domainanda.com

Jika website memakai HTTPS, jangan isi APP_URL dengan HTTP.

Setelah upload asset, hard refresh browser atau clear cache Cloudflare/browser jika digunakan.

Permission Storage dan Bootstrap Cache Bermasalah

Laravel perlu menulis file ke folder storage dan bootstrap/cache. Jika permission salah, biasanya muncul error 500 atau error seperti:

The stream or file could not be opened in append mode

Coba set permission:

chmod -R 775 storage bootstrap/cache

Jika masih gagal, cek owner file. Pada shared hosting, file yang diupload via FTP/File Manager kadang punya owner berbeda dari proses PHP.

Anda juga bisa menghapus file cache lama:

php artisan optimize:clear

Folder yang harus bisa ditulis Laravel:

storage/
bootstrap/cache/

Jangan memberi permission 777 kecuali benar-benar terpaksa dan memahami risikonya. Pada beberapa hosting, permission terlalu terbuka justru bisa ditolak oleh server.

Composer Tidak Tersedia di Hosting

Jika Composer tidak tersedia di hosting, ada beberapa pilihan:

  1. Jalankan composer install di komputer lokal
  2. Upload folder vendor ke hosting
  3. Gunakan composer.phar jika hosting mengizinkan
  4. Minta provider hosting mengaktifkan Composer
  5. Gunakan GitHub Actions untuk build lalu deploy hasilnya

Cara paling sederhana tanpa SSH:

composer install --no-dev --optimize-autoloader

Jalankan command tersebut di lokal, lalu upload folder:

vendor/

Pastikan composer.lock juga ikut terupload agar dependency konsisten.

Jika folder vendor tidak ada, Laravel biasanya akan error seperti:

Failed opening required vendor/autoload.php

Artinya dependency belum tersedia.

Cara Memastikan Deploy Laravel Sudah Berhasil

Gunakan checklist berikut setelah deploy:

  • [ ] Website bisa diakses
  • [ ] Tidak muncul error 500
  • [ ] File .env terbaca
  • [ ] Database terkoneksi
  • [ ] Route Laravel berjalan
  • [ ] Asset CSS dan JavaScript tampil
  • [ ] Storage link berjalan
  • [ ] Log Laravel tidak menunjukkan error baru
  • [ ] APP_DEBUG sudah false di production
  • [ ] Domain mengarah ke folder public
  • [ ] File .env tidak bisa diakses dari browser
  • [ ] Folder vendor tersedia
  • [ ] Folder storage dan bootstrap/cache bisa ditulis
  • [ ] Migration sudah berjalan jika diperlukan
  • [ ] Form login, upload, dan fitur utama sudah dites
  • [ ] HTTPS aktif dan tidak ada mixed content

Untuk mengecek log setelah testing:

tail -n 100 storage/logs/laravel.log

Jika tidak ada SSH, buka file log melalui File Manager cPanel:

storage/logs/laravel.log

Jika ada error baru setelah halaman diakses, baca pesan error paling bawah karena biasanya itu error terbaru.

Kesalahan yang Perlu Dihindari

Beberapa kesalahan ini sering membuat deploy Laravel ke cPanel bermasalah:

  1. Menaruh file .env di folder publik

File .env berisi data sensitif seperti password database, key aplikasi, konfigurasi mail, dan token service. Jangan letakkan file ini di folder yang bisa diakses langsung dari browser.

  1. Mengaktifkan APP_DEBUG=true di production

Di website live, gunakan:

APP_DEBUG=false

Jika APP_DEBUG=true, detail error bisa terlihat oleh pengunjung, termasuk path server dan konfigurasi sensitif.

  1. Menjalankan migration tanpa backup

Command ini bisa mengubah struktur database:

php artisan migrate --force

Sebelum menjalankan migration di production, backup database terlebih dahulu.

  1. Upload project tanpa mengecek versi PHP

Laravel versi baru membutuhkan PHP versi modern. Jika hosting masih memakai PHP lama, aplikasi bisa langsung error.

Cek versi PHP CLI:

php -v

Dan cek versi PHP domain dari cPanel.

  1. Menjalankan npm run build langsung di shared hosting kecil

Build asset dengan Vite bisa memakan memory cukup besar. Jika hosting kecil, lebih aman build di lokal lalu upload folder public/build.

  1. Menghapus file penting tanpa backup

Saat memperbaiki error, jangan langsung menghapus folder seperti storage, vendor, atau file .env tanpa backup. Salah hapus bisa membuat website semakin rusak.

  1. Mengarahkan domain ke folder yang salah

Domain harus mengarah ke folder public Laravel. Jika diarahkan ke root project, route bisa error dan file sensitif lebih berisiko terbuka.

  1. Lupa clear cache setelah mengubah .env

Jika Laravel sudah menjalankan config cache, perubahan .env tidak langsung terbaca sampai cache dibersihkan.

Gunakan:

php artisan optimize:clear
php artisan config:cache
  1. Upload folder node_modules

Folder node_modules biasanya besar dan tidak dibutuhkan di production jika asset sudah dibuild. Upload folder ini hanya membuat proses deploy lambat dan memakan storage hosting.

  1. Tidak mengecek log Laravel

Error 500 tanpa membaca log hanya akan membuat troubleshooting lama. Selalu cek:

storage/logs/laravel.log

FAQ

Apakah Laravel bisa berjalan di shared hosting?

Bisa, selama hosting mendukung versi PHP dan ekstensi yang dibutuhkan Laravel. Yang paling penting adalah domain diarahkan ke folder public, file .env benar, dependency Composer tersedia, dan folder storage serta bootstrap/cache bisa ditulis.

Namun, shared hosting tetap punya batasan. Untuk aplikasi dengan queue berat, WebSocket, scheduler kompleks, atau traffic besar, VPS biasanya lebih fleksibel.

Apakah deploy Laravel ke cPanel wajib menggunakan SSH?

Tidak wajib, tetapi sangat disarankan. Dengan SSH, Anda bisa menjalankan command seperti:

composer install
php artisan migrate --force
php artisan optimize

Jika tidak ada SSH, proses seperti Composer install, build asset, dan generate APP_KEY bisa dilakukan di lokal, lalu hasilnya diupload ke hosting.

Apakah folder vendor perlu diupload ke hosting?

Jika hosting menyediakan Composer dan SSH, folder vendor tidak wajib diupload karena bisa dibuat dengan:

composer install --no-dev --optimize-autoloader

Jika hosting tidak menyediakan Composer atau SSH, folder vendor perlu diupload dari lokal. Tanpa folder vendor, Laravel tidak bisa berjalan karena file vendor/autoload.php tidak ditemukan.

Bagaimana jika cPanel tidak bisa mengubah document root?

Jika document root tidak bisa diarahkan ke folder public, alternatifnya adalah memindahkan isi folder public Laravel ke public_html, lalu menyesuaikan path di file index.php.

Contoh:

require __DIR__.'/../apps/nama-project-laravel/vendor/autoload.php';

$app = require_once __DIR__.'/../apps/nama-project-laravel/bootstrap/app.php';

Pastikan folder utama Laravel tetap berada di luar public_html agar file seperti .env, app, config, dan vendor tidak terbuka ke publik.

Apakah aman menjalankan php artisan migrate di production?

Aman jika sudah dicek dan dibackup. Jangan menjalankan migration di production tanpa memahami perubahan yang akan dilakukan.

Sebelum menjalankan:

php artisan migrate --force

pastikan:

  • Database sudah dibackup
  • Migration sudah dites di lokal atau staging
  • Tidak ada migration yang menghapus data penting
  • Konfigurasi database di .env sudah benar
  • Aplikasi siap jika struktur database berubah

Untuk website yang sudah memiliki banyak data, migration sebaiknya dilakukan saat traffic rendah.

Kesimpulan

Deploy Laravel ke cPanel shared hosting bisa dilakukan dengan aman asal struktur folder dan konfigurasi dasarnya benar. Kunci utamanya adalah meletakkan project Laravel di luar folder publik jika memungkinkan, mengarahkan domain ke folder public, mengatur .env dengan benar, menjalankan Composer, membuat APP_KEY, memastikan permission folder, dan mengecek log jika muncul error.

Jika hosting punya SSH, proses deploy jauh lebih mudah karena command Laravel bisa dijalankan langsung di server. Jika tidak ada SSH, siapkan dependency dan asset dari lokal, lalu upload hasilnya ke hosting.

Untuk troubleshooting, jangan hanya melihat tampilan error di browser. Cek storage/logs/laravel.log, pastikan versi PHP sesuai, database terkoneksi, dan cache Laravel sudah dibersihkan setelah perubahan konfigurasi.

Dengan alur yang rapi, Laravel tetap bisa berjalan di shared hosting tanpa harus langsung pindah ke VPS.

Mungkin Anda juga menyukai

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *