Hosting di Dewaweb Banyak Untungnya!

Deploy Laravel to cPanel

Panduan ini menjelaskan langkah-langkah resmi dan direkomendasikan untuk menjalankan aplikasi Laravel di hosting cPanel secara aman. Dalam penerapan yang benar, hanya isi dari folder public yang ditempatkan di dalam public_html, sementara seluruh struktur inti Laravel — termasuk app, config, vendor, dan .env — harus tetap berada di luar direktori publik. Pendekatan ini mencegah file sensitif diakses secara langsung dari internet dan menjaga keamanan aplikasi.
Dengan konfigurasi ini, aplikasi Laravel dapat berjalan online dengan stabil, tetap aman dari risiko keamanan umum, dan seluruh fitur seperti upload file, cache, serta log berfungsi normal. Penyesuaian pada file index.php dan pengaturan ulang AppServiceProvider juga memastikan perintah seperti php artisan storage:link bekerja dengan benar meskipun struktur folder telah diubah.
Laravel to cPanel

1️⃣ Gambaran Umum

Struktur standar Laravel biasanya seperti ini:

index.php
.htaccess
error_log
robots.txt

Sementara cPanel hanya memperbolehkan file web yang bisa diakses publik berada di dalam folder:
/home/username/public_html
Jadi, ketika kamu melakukan deploy Laravel di cPanel, kita harus menjaga agar seluruh file sensitif (seperti app/, .env, vendor/) tidak berada di dalam public_html, karena semua file di sana bisa diakses lewat browser.

2️⃣ Alasan Kenapa Hanya Folder /public yang Boleh di public_html

Laravel dirancang agar:
  • Semua file publik (CSS, JS, images, index.php) hanya ada di /public.
  • Semua logika aplikasi, konfigurasi, kredensial, dan data sensitif berada di luar direktori web root.
Jika kamu meletakkan seluruh proyek Laravel ke dalam public_html, maka:
  • .env bisa diakses publik (misal https://domain.com/.env),
  • composer.json, artisan, dan routes/web.php juga bisa diunduh,
  • sehingga keamanan aplikasi sepenuhnya kompromi.
Oleh karena itu, hanya isi folder /public yang boleh berada di public_html.

3️⃣ Struktur Folder Aman untuk cPanel

Struktur yang direkomendasikan:

index.php
U
.htaccess
U
error_log
robots.txt

app
U
.env
U
bootstrap
config
database
resources
routes
storage
vendor
composer.json
artisan
package.json
Jadi:
  • File index.php di public_html akan memanggil Laravel yang ada di /home/username/example-app.
  • Semua file aplikasi aman karena tidak bisa diakses langsung oleh publik.
  • Dan ini adalah file public_html/.htaccess yg bisa di gunakan dengan standar keamanan cPanel
public_html/.htaccess

4️⃣ Modifikasi File index.php

Edit file:

/home/username/public_html/index.php

Cari baris ini:
require __DIR__.'/../vendor/autoload.php';
$app = require_once __DIR__.'/../bootstrap/app.php';
Ubah menjadi:
require __DIR__.'/../example-app/vendor/autoload.php';
$app = require_once __DIR__.'/../example-app/bootstrap/app.php';
Ini memastikan bahwa Laravel dijalankan dari folder example-app di luar public_html.

5️⃣ Menangani php artisan storage:link

Secara default, Laravel membuat symlink seperti ini:
public/storage → storage/app/public
Jika kamu mengubah struktur folder (misalnya public_html terpisah dari example-app), maka perintah biasa:
php artisan storage:link
akan gagal, karena Laravel masih menganggap folder publik berada di example-app/public.

✅ Solusi Resmi

Tambahkan kode berikut ke file:
app/Providers/AppServiceProvider.php
di dalam method boot():
app/Providers/AppServiceProvider.php
Kode ini memberi tahu Laravel bahwa folder publik sekarang bukan example-app/public, tapi ../public_html.

6️⃣ Jalankan Ulang Perintah

Setelah menambahkan kode di atas, bersihkan cache konfigurasi agar binding baru terbaca:
php artisan config:clear
php artisan cache:clear
php artisan optimize:clear
Lalu jalankan ulang:
php artisan storage:link
📦 Hasilnya:
/home/username/public_html/storage → /home/username/example-app/storage/app/public

7️⃣ Alternatif Manual Jika Artisan Masih Gagal

Jika perintah storage:link gagal di shared hosting (kadang symlink dibatasi), kamu bisa membuatnya manual:
ln -s /home/username/example-app/storage/app/public /home/username/public_html/storage
Pastikan permission:
chmod -R 755 /home/username/example-app/storage

8️⃣ Ringkasan Alur Deploy

Note
Pilih Document Root Domain pada cPanel yang menunjuk langsung ke folder /public, contoh:
  1. public_html/nama-folder-anda/public
  2. subdomain-anda/public Jika Document Root Domain tidak pada /public gunakan:
  3. folder terpisah dari public_html sehingga isi public_html adalah /public laravel anda. Link: Deploy Laravel to cPanel.
  4. buat folder baru di luar nama-subdomain-anda yg isinya data-data laravel anda kecuali /public, dan isi /public ini yg di pindahkan ke dalam folder nama-subdomain-anda
Ini adalah cara yang paling aman, paling efisien, dan paling sesuai dengan arsitektur keamanan Laravel.
Dengan menyelesaikan seluruh langkah di atas, proses deploy Laravel pada cPanel telah berjalan sesuai best practice yang direkomendasikan. Struktur aplikasi kini aman, efisien, dan sepenuhnya siap berjalan secara online. Semua komponen sensitif terlindungi di luar direktori publik, sementara file publik dapat diakses dengan benar melalui public_html.
Konfigurasi ini memastikan aplikasi Laravel memiliki tingkat keamanan tinggi, kinerja optimal, serta kompatibilitas penuh dengan lingkungan shared hosting cPanel, sehingga kamu dapat melanjutkan ke tahap pengujian atau produksi dengan percaya diri. ✅

Hosting di Dewaweb Banyak Untungnya!