Artikel ini merangkum pengalaman saya upload aplikasi Laravel ke shared hosting untuk keperluan demo. Tujuannya bukan production-ready, tapi cepat online dulu. Semoga membantu siapa saja yang punya kebutuhan serupa.
Struktur Folder di Hosting
Karena tujuannya demo dan mau cepat, saya pakai Opsi Taruh Semua di public_html — semua file Laravel termasuk folder public/ di-upload ke dalam domain/subdomain folder di hosting.
Struktur akhirnya jadi seperti ini:
/home/username/demo.domain.web.id/
├── app/
├── bootstrap/
├── config/
├── database/
├── resources/
├── routes/
├── storage/
├── vendor/
├── .env
└── public/ ← ini yang jadi web root
├── index.php
├── .htaccess
└── storage_link.php (sementara)
Lalu di panel hosting (cPanel/DirectAdmin), set web root domain/subdomain-nya ke folder public/ tersebut.
Tambahkan juga .htaccess di root folder (sejajar dengan public/) kalau diperlukan, atau pastikan .htaccess di dalam public/ sudah ada bawaan Laravel.
Checklist Sebelum Upload
- File
.env— wajib ada dan sudah dikonfigurasi. Minimal setAPP_KEY,APP_ENV=production,APP_DEBUG=false, dan koneksi database. - Folder
vendor/— harus ikut di-upload. Jalankancomposer installdi lokal dulu, lalu upload hasilnya. - APP_KEY — kalau belum ada, generate dulu di lokal:
php artisan key:generate, lalu copy nilainya ke.envdi server. - PHP Version — pastikan versi PHP di hosting kompatibel dengan versi Laravel yang dipakai.
- Permission — folder
storage/danbootstrap/cache/harus writable (chmod 775).
Masalah Symlink Storage
Kalau aplikasi punya fitur upload file atau menampilkan file dari storage/, Laravel butuh symlink dari public/storage ke storage/app/public. Normalnya ini dijalankan lewat perintah:
php artisan storage:link
Tapi di shared hosting tanpa SSH, perintah itu tidak bisa dijalankan langsung.
Jangan Upload Symlink dari Lokal
Satu hal yang perlu diperhatikan: jangan ikut upload symlink yang ada di folder public/storage dari komputer lokal. Symlink lokal berisi path yang mengarah ke komputer kamu sendiri (misal /Users/nama/project/storage/app/public), sehingga tidak akan valid di server. FTP client kadang mengupload symlink sebagai folder kosong atau broken link.
Solusinya: hapus dulu folder/symlink storage yang ada di dalam public/ di server, lalu buat ulang symlink yang valid menggunakan script PHP berikut.
Script storage_link.php
Buat file storage_link.php, taruh di dalam folder public/, lalu akses sekali via browser:
<?php
// Sesuaikan path $target dengan struktur folder hosting kamu
// Cek dulu dengan check.php di bawah kalau tidak yakin
$target = __DIR__ . '/../storage/app/public';
$link = __DIR__ . '/storage';
if (symlink($target, $link)) {
echo 'Storage linked successfully!';
} else {
echo 'Failed. Coba cek permission atau path.';
}
Cara Cek Path Kalau Masih Gagal
Kalau muncul error No such file or directory, berarti path $target tidak tepat. Buat file check.php sementara untuk melihat isi folder di atas public/:
<?php $parent = __DIR__ . '/..'; print_r(scandir($parent));
Akses via browser, pastikan ada folder storage di hasilnya. Kalau ada, berarti path /../storage/app/public sudah benar. Kalau tidak ada, cari tahu di mana folder storage Laravel kamu berada dan sesuaikan pathnya.
Hapus Folder storage Lama Sebelum Bikin Symlink
Kalau di public/storage sudah ada folder (misalnya sisa upload dari lokal), symlink tidak akan bisa dibuat — PHP tidak akan menimpa folder yang sudah ada. Hapus dulu lewat File Manager hosting, atau pakai script ini:
<?php
// delete_storage.php — akses sekali, lalu hapus!
function deleteDir($dir) {
if (!is_dir($dir)) return;
$items = array_diff(scandir($dir), ['.', '..']);
foreach ($items as $item) {
$path = "$dir/$item";
is_dir($path) ? deleteDir($path) : unlink($path);
}
rmdir($dir);
}
$target = __DIR__ . '/storage';
deleteDir($target);
echo 'Deleted.';
Setelah folder terhapus, jalankan lagi storage_link.php.
Ringkasan Langkah-Langkah
- Jalankan
composer installdi lokal (pastikan foldervendor/ada). - Set
.env— isiAPP_KEY, database, dan konfigurasi lainnya. - Upload semua file Laravel ke folder domain/subdomain di hosting.
- Set web root domain ke subfolder
public/lewat panel hosting. - Set permission folder
storage/danbootstrap/cache/ke 775. - Kalau ada fitur upload file: hapus folder
storagelama dipublic/, lalu jalankanstorage_link.phpvia browser. - Hapus semua script PHP sementara (
storage_link.php,check.php,delete_storage.php) setelah selesai digunakan.

Posting Komentar