Pola nama DB u292051053_coco menandakan Hostinger shared hosting.
Jika memakai VPS atau hosting lain, alur intinya sama; yang berbeda hanya cara mengarahkan document root (lihat Langkah 4).
Persiapan di Lokal (sebelum upload)
Jalankan di folder proyek:
# dependency PHP versi produksi (tanpa dev, autoload dioptimalkan) composer install --no-dev --optimize-autoloader # build aset frontend (CSS/JS) → menghasilkan public/build npm install npm run build
public/build/manifest.json ada. Logo public/logoinv.png & public/eli.png ikut terupload bersama folder public.
Siapkan Database di Hosting (hPanel)
- a hPanel → Databases → MySQL Databases
-
b
Buat database + user (Hostinger memberi prefix, mis.
u292051053_cocodan useru292051053_xxx), beri All Privileges. -
c
Catat: nama DB, username, password, host (biasanya
localhost).
Upload File Proyek
Cara paling rapi: zip seluruh proyek lalu upload & extract.
❌ Jangan ikutkan
node_modules/.git/
Besar & tidak diperlukan di server
✓ vendor/ boleh diikutkan
Jika hosting tak punya Composer. Kalau ada SSH + Composer, lebih baik install di server.
Struktur disarankan di shared hosting:
/home/uXXXX/ ├── esa168/ ← seluruh project Laravel │ └── public/ ← isi folder ini dipindah ke public_html └── public_html/ ← isi dari esa168/public/ ├── index.php ├── build/ ├── logoinv.png └── eli.png
~/esa168, lalu pindahkan isi esa168/public/ ke public_html/.
Upload via File Manager (hPanel) atau FTP.
Arahkan public_html ke Laravel
Edit public_html/index.php, ubah dua baris path agar menunjuk ke folder project:
// Ubah dua baris ini: require __DIR__.'/../esa168/vendor/autoload.php'; $app = require_once __DIR__.'/../esa168/bootstrap/app.php';
💡 Alternatif lebih bersih
Bila paket hosting mengizinkan ubah Document Root, arahkan domain langsung ke ~/esa168/public dan lewati pemindahan di Langkah 3–4.
Konfigurasi .env Produksi
Buat ~/esa168/.env (salin dari .env.example) dengan nilai:
# Aplikasi APP_NAME="Esa Liuba Indonesia" APP_ENV=production APP_KEY=# kosong dulu, diisi php artisan key:generate APP_DEBUG=false APP_URL=https://domainanda.com # Database DB_CONNECTION=mysql DB_HOST=localhost DB_PORT=3306 DB_DATABASE=u292051053_coco DB_USERNAME=u292051053_user DB_PASSWORD=passworddb # Driver SESSION_DRIVER=database QUEUE_CONNECTION=database CACHE_STORE=database
sessions, cache, jobs sudah ada di migration, jadi aman setelah migrate.
Generate Key, Isi DB, Optimasi
Seeder proyek ini menghitung stok lewat service, jadi migrate:fresh --seed menghasilkan data + stok yang benar.
cd ~/esa168
php artisan key:generate
php artisan migrate:fresh --seed --force
php artisan storage:link # symlink untuk logo terupload
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan key:generate --show) lalu tempel ke .env server.
php artisan migrate:fresh --seed, lalu export (phpMyAdmin / mysqldump), dan import ke DB hosting via phpMyAdmin. Ini membawa seluruh data + stok hasil seeder.
storage/app/public ke public_html/storage.
Izin & Finalisasi
Pastikan storage/ dan bootstrap/cache/ writable (chmod 775 / sesuai hosting).
Buka domain & cek:
- ✓ Login (user dari UserSeeder)
- ✓ Cetak PO (logo & watermark muncul)
- ✓ Input penjualan/pembelian (harga default & stok jalan)
Kalau ada perubahan kode nanti:
php artisan config:clear && php artisan config:cache
atau hapus file cache di bootstrap/cache/
Catatan Khusus Proyek Ini
-
◆
DomPDF butuh GD + WebP (untuk logo). Di Hostinger umumnya aktif; logo PO sekarang pakai PNG statis (
logoinv.png/eli.png) jadi lebih aman. - ◆ PHP 8.3+ wajib (Laravel 13). Set versi PHP di hPanel → PHP Configuration ke 8.3.
-
◆
Setelah live, pastikan
APP_DEBUG=falseagar error tidak bocor ke publik.
Ringkasan Perintah Cepat (SSH)
Di Lokal
composer install --no-dev --optimize-autoloader
npm install && npm run build
# upload project ke ~/esa168
# pindahkan isi public/ ke public_html/
# edit public_html/index.php (lihat Langkah 4)
Di Server
cd ~/esa168
cp .env.example .env # lalu edit nilai produksi (Langkah 5)
php artisan key:generate
php artisan migrate:fresh --seed --force
php artisan storage:link
php artisan config:cache && php artisan route:cache && php artisan view:cache