# Deploy ke Biznet Shared Hosting (cPanel)

Panduan ini khusus untuk **shared hosting cPanel** (bukan VPS). Aplikasi digabung jadi
**satu aplikasi Node** (backend menyajikan frontend + API sekaligus), karena shared hosting
biasanya cuma menyediakan satu slot "Setup Node.js App".

## 0. Syarat wajib — cek dulu sebelum upload

Login cPanel Anda, cari menu **"Setup Node.js App"** (kadang namanya "Application Manager").
- **Ada** → lanjutkan panduan ini.
- **Tidak ada** → paket hosting Anda tidak mendukung Node.js. Anda hanya bisa upload
  hasil build frontend (file statis) ke `public_html`, sedangkan backend/API harus
  dijalankan di tempat lain (VPS terpisah, atau upgrade paket Biznet ke yang mendukung Node.js
  / Cloud VPS). Silakan cek dulu paket hosting Anda di kontrol panel Biznet atau hubungi CS mereka.

Cek juga **versi Node.js** yang tersedia (biasanya bisa dipilih di "Setup Node.js App", contoh 18.x/20.x).
Semakin baru semakin baik untuk kompatibilitas `better-sqlite3`.

## 1. Build di komputer Anda dulu (lebih aman daripada build langsung di server)

```bash
cd fixup-inventory/backend
npm install
npm run build:frontend   # otomatis: install + build frontend, lalu salin ke backend/public
```

Setelah ini folder `backend/public/` berisi hasil build React (index.html, assets/...).
Backend (`server.js`) sudah saya ubah supaya otomatis menyajikan folder ini sebagai frontend,
selama ada file `backend/public/index.html`.

> Kenapa dibuild di komputer sendiri dulu? Supaya kalau ada error saat `npm install`
> (misalnya `better-sqlite3` gagal compile), Anda bisa lihat & atasi errornya lebih cepat
> daripada mencari error di log cPanel.

## 2. Upload ke server

Upload **seluruh folder `backend/`** (termasuk `public/` hasil build, `node_modules` TIDAK perlu
diupload — akan diinstall ulang di server) ke lokasi **di luar `public_html`**, misalnya:

```
/home/USERNAME_CPANEL/fixup-inventory-app/
```

Jangan taruh di dalam `public_html` — supaya file `db/schema.sql` dan database SQLite
tidak bisa diakses/diunduh langsung lewat browser.

Cara upload: File Manager cPanel (zip lalu extract), atau FTP/SFTP.

## 3. Setup Node.js App di cPanel

1. Buka **Setup Node.js App** → **Create Application**.
2. **Node.js version**: pilih yang tersedia (disarankan 18 LTS ke atas).
3. **Application mode**: Production.
4. **Application root**: path folder yang Anda upload, contoh `fixup-inventory-app`.
5. **Application URL**: domain atau subdomain Anda, misalnya `inventory.namadomainAnda.com`.
6. **Application startup file**: `server.js`.
7. Klik **Create**.

## 4. Install dependency & jalankan

Masih di halaman Setup Node.js App:

1. Klik **Run NPM Install** (cPanel akan menjalankan `npm install` pakai Node versi yang dipilih).
   - **Jika muncul error terkait `better-sqlite3` / `node-gyp` / "compiler not found"** →
     server Anda tidak punya build tools untuk compile native module. Solusinya, beri tahu saya
     dan saya akan gantikan `better-sqlite3` dengan driver database yang tidak perlu compile
     (misalnya MySQL — Biznet cPanel biasanya sudah include MySQL gratis di paket hosting, dan ini
     malah lebih umum dipakai untuk shared hosting daripada file SQLite).
2. Setelah install sukses, klik **Restart** (tombol di halaman yang sama) untuk menjalankan `server.js`.
3. Buka `Application URL` Anda di browser → dashboard FIX.UP Inventory harus muncul, lengkap
   dengan data contoh (seed data otomatis dibuat saat pertama kali server jalan).

## 5. Setelah live — hal yang perlu diperhatikan

- **Backup database**: file database ada di `fixup-inventory-app/backend/db/fixup.sqlite`.
  Download berkala lewat File Manager/FTP sebagai backup manual (shared hosting biasanya tidak
  auto-backup file custom seperti ini).
- **Update aplikasi**: kalau ada perubahan kode, upload ulang, jalankan `npm run build:frontend`
  di lokal, upload ulang folder `public/` yang baru, lalu klik **Restart** di Setup Node.js App.
- **Data seed contoh**: setelah aplikasi berjalan dengan data asli, Anda bisa hapus seed contoh
  langsung lewat halaman (arsipkan produk contoh) — tidak perlu hapus database.
- **HTTPS**: aktifkan SSL gratis (AutoSSL) di cPanel untuk domain/subdomain yang dipakai, seperti biasa.

## Ringkasan perubahan kode dari versi development

| Sebelumnya (development di laptop) | Sekarang (untuk hosting shared cPanel) |
|---|---|
| Backend & frontend 2 server terpisah (port 4000 & 5173) | Digabung 1 aplikasi Node — backend menyajikan frontend hasil build |
| Frontend akses API lewat proxy Vite (`/api`) | Frontend & API satu origin — `/api` langsung ditangani Express, tanpa proxy/CORS tambahan |
| `npm run dev` di 2 folder | `npm run build:frontend` sekali di backend, lalu `npm start` (dijalankan otomatis oleh cPanel via Passenger) |
