# Panduan deploy ke cPanel

Website ini adalah aplikasi **Next.js** yang berjalan sebagai **Node.js App** di cPanel, dengan database **MySQL**.

## Syarat hosting

- cPanel memiliki menu **Setup Node.js App** (CloudLinux / Passenger) dengan Node.js **18.18 atau lebih baru** (disarankan 20 / 22).
- Menu **MySQL® Databases** dan **phpMyAdmin**.
- Kalau menu Setup Node.js App tidak ada, minta penyedia hosting mengaktifkannya, atau pakai paket hosting/VPS yang mendukung Node.js.

## 1. Siapkan paket (di komputer kamu)

```bash
npm install
npm run package:cpanel
```

Hasilnya `dist/jastip-cpanel.zip`. Build dilakukan di komputer, bukan di server, karena build Next.js butuh RAM besar yang biasanya dibatasi di shared hosting.

> Build di Windows/Mac juga boleh: paket ini tidak berisi modul native (gambar tidak dioptimasi, `sharp` dibuang).

## 2. Buat database

1. cPanel → **MySQL® Databases**: buat database (mis. `user_jastip`) dan user (mis. `user_jastip`), lalu **Add User To Database** dengan **ALL PRIVILEGES**.
2. cPanel → **phpMyAdmin** → pilih database tadi → tab **Import** → pilih file `sql/schema.sql` → **Go**.

## 3. Buat aplikasi Node.js

> Contoh di panduan ini memakai subdomain **jastip.veotap.com**. Subdomain ini tidak perlu dibuat terpisah lewat menu Domains: cukup pilih di kolom Application URL di bawah (kalau belum muncul di pilihan, buat dulu subdomain `jastip` di cPanel → Domains). Karena website berjalan di root subdomain, kode tidak perlu diubah.

1. cPanel → **Setup Node.js App** → **Create Application**:
   - **Node.js version**: 20.x atau 22.x
   - **Application mode**: Production
   - **Application root**: `jastip` (folder di home, *bukan* di dalam `public_html`)
   - **Application URL**: `jastip.veotap.com` (kosongkan kolom path di sebelahnya)
   - **Application startup file**: `server.js`
2. Klik **Create**, lalu **Stop App** dulu.
3. cPanel → **File Manager** → buka folder `jastip` → hapus isi bawaan (mis. `app.js`) → **Upload** `jastip-cpanel.zip` → klik kanan → **Extract**. Pastikan `server.js` langsung berada di `jastip/`, bukan di `jastip/jastip-cpanel/`.
   - Aktifkan **Show Hidden Files** (Settings, kanan atas) agar folder `.next` terlihat & ikut ter-extract.
4. Kembali ke **Setup Node.js App** → edit aplikasi → bagian **Environment variables**, tambahkan:

| Nama | Isi |
| --- | --- |
| `DB_HOST` | `localhost` |
| `DB_PORT` | `3306` |
| `DB_USER` | user database dari langkah 2 |
| `DB_PASSWORD` | password user database |
| `DB_NAME` | nama database |
| `APP_SECRET` | string acak minimal 32 karakter (lihat bawah) |
| `APP_URL` | `https://jastip.veotap.com` |
| `UPLOAD_DIR` | `./storage/uploads` |
| `NODE_ENV` | `production` |

   Cara membuat `APP_SECRET`: buka https://www.random.org/strings atau jalankan
   `node -e "console.log(require('crypto').randomBytes(48).toString('hex'))"`.
   Sebagai alternatif, salin `.env.example` menjadi `.env` di folder `jastip/` dan isi di sana.
5. **Jangan** klik "Run NPM Install" — semua modul sudah ada di paket.
6. Klik **Save** lalu **Start App** / **Restart**.

## 4. Setup pertama

1. Pastikan SSL aktif: cPanel → **SSL/TLS Status** → centang `jastip.veotap.com` → **Run AutoSSL** (agar https jalan; login admin memakai cookie aman di https).
2. Buka `https://jastip.veotap.com/admin` → otomatis diarahkan ke halaman **buat admin pertama**.
3. Setelah login, buka **Pengaturan**: isi nama toko, WhatsApp admin, nomor rekening **BCA / Mandiri / BSI** + atas nama, dan unggah gambar **QRIS statis**.
4. Tambahkan produk open PO di menu **Produk**.

## Update versi baru

1. Di komputer: `npm run package:cpanel`.
2. cPanel: **Stop App** → hapus folder `.next`, `node_modules`, `server.js` di `jastip/` (**jangan hapus `storage/`** karena berisi bukti transfer & foto produk, dan jangan hapus `.env` jika kamu memakainya) → upload & extract zip baru → **Start App**.
3. Jika ada file migrasi baru di `sql/`, impor lewat phpMyAdmin sesuai catatan rilis.

## Backup

- Database: phpMyAdmin → Export, atau cPanel → Backup.
- File: folder `jastip/storage/uploads`.

## Troubleshooting

- **503 / aplikasi tidak jalan**: buka file log (Setup Node.js App menampilkan path `stderr.log`), biasanya env `DB_*` atau `APP_SECRET` belum diisi.
- **Tampilan tanpa CSS**: folder `.next/static` tidak ikut ter-extract (aktifkan Show Hidden Files dan extract ulang).
- **Upload gagal**: pastikan folder `storage/uploads` bisa ditulis (permission 755).
