# Deploy 9Router di cPanel

Paket ini menambahkan `app.js` sebagai startup file Passenger untuk cPanel. Aplikasi tetap memakai dashboard dan API 9Router resmi; setelah dipasang, alamatnya memakai domain atau subdomain kamu, misalnya `https://router.domainkamu.com`.

## Syarat hosting

- Fitur **Setup Node.js App** atau **Application Manager** aktif di cPanel.
- Node.js **22** tersedia. 9Router saat ini membutuhkan Node.js 20.9 atau lebih baru.
- Hosting mengizinkan build Next.js dan koneksi keluar HTTPS ke penyedia AI. Build bisa memerlukan memori cukup besar; beberapa paket shared hosting membatasi proses build.
- Buat subdomain, arahkan DNS-nya ke hosting, dan aktifkan SSL sebelum login.

## 1. Upload dan ekstrak

1. Buat subdomain, misalnya `router.domainkamu.com`.
2. Upload ZIP ini ke folder di luar `public_html`, misalnya `~/ninerouter`, lalu ekstrak. Pastikan `package.json` langsung berada di `~/ninerouter/package.json`.
3. Buat folder data di luar document root, misalnya `~/ninerouter-data`.

## 2. Buat Node.js App di cPanel

Di **Setup Node.js App** / **Application Manager**, buat aplikasi dengan pengaturan berikut:

- Node.js version: **22.x**
- Application mode: **Production**
- Application root: `ninerouter`
- Application URL: subdomain yang dibuat tadi, tanpa path tambahan
- Application startup file: `app.js`

Simpan aplikasinya. Jika fitur terminal tersedia, aktifkan lingkungan Node yang ditampilkan cPanel, lalu jalankan dari folder aplikasi:

```bash
npm install
npm run build
```

Kalau cPanel menyediakan tombol **Run NPM Install**, gunakan tombol tersebut untuk memasang dependensi, lalu jalankan `npm run build` dari Terminal cPanel. Jangan jalankan `next dev` di server produksi.

## 3. Isi environment variables

Tambahkan variabel berikut di pengaturan Node.js App. Ganti domain, username cPanel, dan rahasia contoh dengan milikmu:

```text
NODE_ENV=production
DATA_DIR=/home/USERNAME/ninerouter-data
BASE_URL=https://router.domainkamu.com
NEXT_PUBLIC_BASE_URL=https://router.domainkamu.com
AUTH_COOKIE_SECURE=true
REQUIRE_API_KEY=true
ENABLE_REQUEST_LOGS=false
INITIAL_PASSWORD=GANTI_DENGAN_PASSWORD_UNIK_YANG_PANJANG
JWT_SECRET=GANTI_DENGAN_RANDOM_SECRET_MINIMAL_32_BYTE
API_KEY_SECRET=GANTI_DENGAN_RANDOM_SECRET_LAIN
MACHINE_ID_SALT=GANTI_DENGAN_RANDOM_SECRET_LAIN_LAGI
```

Buat tiga nilai rahasia yang berbeda. Dari Terminal cPanel, kamu bisa membuat masing-masing dengan:

```bash
openssl rand -hex 32
```

Pastikan hanya satu nilai hasil acak dipakai untuk setiap variable rahasia. Jangan menaruh `.env` atau database di `public_html`, dan jangan membagikan nilai rahasia/API key.

## 4. Jalankan dan login

Tekan **Restart** di Node.js App cPanel, lalu buka `https://router.domainkamu.com`. Login dengan `INITIAL_PASSWORD` yang kamu isi dan segera ganti password dari dashboard. Tambahkan provider di menu Providers dan buat API key untuk aplikasi/alat yang akan memakai router.

Untuk endpoint API, gunakan:

```text
https://router.domainkamu.com/v1
```

Aktifnya `REQUIRE_API_KEY=true` membuat permintaan ke endpoint `/v1/*` harus mengirim API key. Lindungi API key dan batasi pemakainya.

## Jika gagal start

- Periksa log aplikasi di cPanel. Pastikan startup file `app.js`, application root benar, dan `npm run build` selesai tanpa error.
- Pastikan `DATA_DIR` berada di folder yang dapat ditulis oleh akun cPanel.
- Jika build berhenti dengan `Killed`, `137`, atau kehabisan memori, paket hosting tidak memberi memori build yang cukup. Minta host menaikkan batas memori/build atau gunakan VPS.
- Jika menu Node.js App tidak ada, minta provider hosting mengaktifkan Node.js/Passenger.
- Untuk update source, jalankan ulang `npm install` dan `npm run build`, lalu tekan **Restart**. Data tetap tersimpan di `DATA_DIR`.

Catatan: 9Router melayani dashboard sekaligus request AI yang dapat berlangsung lama. Batas proses, memori, waktu request, dan koneksi keluar dari provider hosting dapat membatasi pemakaian pada shared hosting.
