# Deploy Motoriz Backend ke cPanel Node.js Applications

Dokumen ini untuk deploy backend TypeScript + Prisma ke cPanel.

## Perubahan yang sudah disiapkan
- Startup file untuk cPanel: `app.js`
- `npm start` sekarang menjalankan `node app.js`
- `app.js` memuat server hasil build di `dist/src/server.js`
- `postinstall` menjalankan `prisma generate`
- Script helper deploy: `npm run cpanel:prepare`

## 1) Buat Node.js App di cPanel
- Buka menu Node.js Applications.
- Buat aplikasi baru.
- Pilih Node.js versi 18+ (disarankan 20 jika tersedia).
- Application mode: Production.
- Application root: folder backend ini.
- Application URL: domain/subdomain API.
- Application startup file: `app.js`

## 2) Upload source code
- Upload seluruh isi backend ke application root.
- Pastikan file berikut ada: `package.json`, `tsconfig.json`, `src/`, `prisma/`, `app.js`.

## 3) Set Environment Variables
Set variable di halaman Node.js App (jangan hanya di file `.env`):
- `NODE_ENV=production`
- `DATABASE_URL=...`
- `JWT_SECRET=...`
- `JWT_REFRESH_SECRET=...`
- `ADMIN_URL=...`
- `FRONTEND_URL=...`

Opsional:
- `ADMIN_URL_DEV`, `FRONTEND_URL_DEV`, `ADMIN_LOCAL_URL`, `FRONTEND_LOCAL_URL`

Referensi format ada di `.env.example`.

## 4) Install dependency dan build
Di Terminal cPanel (atau menu Run NPM Install):
1. `npm install`
2. `npm run cpanel:prepare`

Perintah `cpanel:prepare` akan:
- generate Prisma Client
- compile TypeScript ke folder `dist/`

## 5) Jalankan aplikasi
- Klik Restart App di cPanel Node.js Applications.
- Tes endpoint:
  - `/health`
  - `/`

## 6) Database migration (opsional, jika schema berubah)
Jalankan salah satu sesuai proses Anda:
- `npx prisma migrate deploy` (recommended production)
- atau `npx prisma db push` (jika memang pakai db push)

## 7) Troubleshooting cepat
- Error `Cannot find module dist/src/server.js`:
  - Jalankan ulang `npm run cpanel:prepare`.
- Error Prisma connect:
  - Cek format `DATABASE_URL`, user/password, host, port, dan whitelist IP.
- CORS blocked:
  - Pastikan domain frontend/admin benar di ENV (`ADMIN_URL`, `FRONTEND_URL`).
- Upload gambar gagal:
  - Pastikan folder `uploads/` bisa ditulis oleh aplikasi Node.js di cPanel.
- Setelah ubah ENV:
  - Restart App.
