# 🏠 Panduan Deploy ke Rumahweb

[Rumahweb](https://www.rumahweb.com/) menyediakan beberapa layanan. Untuk aplikasi
Next.js + Prisma ini, pilih salah satu:

| Layanan Rumahweb | Cocok? | Catatan |
|---|---|---|
| **VPS / Cloud VPS (KVM)** | ✅ **Paling disarankan** | Akses root penuh (SSH). Bisa Docker atau PM2. Database SQLite atau PostgreSQL. |
| **Cloud Hosting / Hosting dengan Node.js (cPanel)** | ⚠️ Bisa, dgn batasan | Pakai fitur "Setup Node.js App" (Passenger). Cocok untuk trafik kecil. Perlu langkah manual. |
| **Shared Hosting biasa (hanya PHP)** | ❌ Tidak | Tidak menjalankan Node.js. |

> Sebelum mulai (semua opsi): siapkan **JWT_SECRET** acak
> (`openssl rand -base64 48`) dan tentukan database (SQLite bawaan sudah cukup).

---

## OPSI 1 — VPS Rumahweb (disarankan)

Anda dapat akses **root via SSH**. Dua cara: **Docker** (paling praktis) atau
**PM2** (manual).

### Cara A — Docker (paling praktis)
1. Login SSH ke VPS: `ssh root@IP-VPS-ANDA`
2. Pasang Docker:
   ```bash
   curl -fsSL https://get.docker.com | sh
   ```
3. Ambil kode & jalankan:
   ```bash
   git clone https://github.com/FalahALL/distribusi-telur
   cd distribusi-telur
   nano docker-compose.yml     # ganti JWT_SECRET dengan string acak panjang
   docker compose up -d --build
   ```
4. Isi data awal (sekali saja):
   ```bash
   docker compose exec app npx prisma db seed
   ```
5. Aplikasi jalan di `http://IP-VPS:3000`. Database & foto tersimpan aman di
   volume Docker (`telur-db`, `telur-uploads`) walau container di-restart.

Update kode nanti:
```bash
cd distribusi-telur && git pull && docker compose up -d --build
```

### Cara B — PM2 (tanpa Docker)
Ikuti **[02-PANDUAN-HOSTING.md](02-PANDUAN-HOSTING.md) → JALUR B (VPS)**. Ringkas:
```bash
# pasang Node.js 20
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - && sudo apt-get install -y nodejs git
git clone https://github.com/FalahALL/distribusi-telur && cd distribusi-telur
npm install && cp .env.example .env && nano .env   # ganti JWT_SECRET, NODE_ENV=production
npm run setup && npm run build
sudo npm install -g pm2
pm2 start "npm run start" --name telur && pm2 save && pm2 startup
```

### Domain + HTTPS
Arahkan domain Anda (di panel Rumahweb → DNS) ke **IP VPS**, lalu pasang Nginx +
Certbot seperti di doc 02. Contoh Nginx & perintah Certbot ada di sana.

---

## OPSI 2 — Cloud Hosting cPanel + "Setup Node.js App"

Untuk paket hosting Rumahweb yang mendukung Node.js (berbasis cPanel + Passenger).
Cocok untuk trafik kecil/menengah. Database pakai **SQLite** (file, persisten di
hosting) atau **PostgreSQL** eksternal (Neon/Supabase).

> Sudah disediakan berkas **`server.js`** di repo khusus untuk mode ini.

### Langkah-langkah
1. **Upload kode.** Via cPanel → *Git Version Control* (clone repo) **atau**
   *File Manager* (upload ZIP lalu extract). Misalnya ke folder `distribusi-telur`.

2. **Buat Node App.** cPanel → **Setup Node.js App** → **Create Application**:
   - **Node.js version:** pilih 18 atau 20.
   - **Application mode:** `Production`
   - **Application root:** `distribusi-telur` (folder kode tadi)
   - **Application URL:** domain/subdomain Anda
   - **Application startup file:** `server.js`
   - Klik **Create**.

3. **Tambah Environment Variables** (di halaman aplikasi yang sama):
   | Nama | Isi |
   |---|---|
   | `NODE_ENV` | `production` |
   | `JWT_SECRET` | string acak panjang |
   | `DATABASE_URL` | `file:./prisma/dev.db` (SQLite) — atau URL PostgreSQL |

4. **Pasang dependency & build.** Klik **Run NPM Install**. Lalu buka **Terminal**
   cPanel, masuk ke virtualenv aplikasi (perintahnya ditampilkan cPanel di atas,
   mis. `source /home/USER/nodevenv/distribusi-telur/20/bin/activate`), lalu:
   ```bash
   cd ~/distribusi-telur
   npx prisma generate
   npx prisma migrate deploy      # buat tabel database
   npm run build                  # build Next.js
   node -e "require('child_process').execSync('npx prisma db seed',{stdio:'inherit'})"  # isi data awal (sekali)
   ```
   > Jika `npm run build` gagal karena **kehabisan memori** (umum di shared
   > hosting), naikkan paket, atau build di komputer lokal lalu upload folder
   > `.next` hasil build.

5. **Restart aplikasi** dari halaman Setup Node.js App (tombol **Restart**).
   Buka domain Anda — aplikasi siap.

### Keterbatasan yang perlu diketahui (cPanel/shared)
- **Build berat.** `next build` butuh memori; paket kecil kadang gagal → build
  lokal lalu upload `.next`, atau naik paket/VPS.
- **Foto bukti kurir** tersimpan di `public/uploads` (persisten di cPanel — OK),
  tapi untuk skala besar tetap disarankan S3 (lihat doc 02).
- **Proses background & websocket** terbatas dibanding VPS. Untuk pertumbuhan,
  pindah ke VPS (Opsi 1).

---

## Mana yang saya pilih?

- **Ingin paling stabil & fleksibel** → **VPS Rumahweb + Docker** (Opsi 1A).
- **Sudah punya paket cPanel & trafik kecil** → **Setup Node.js App** (Opsi 2).
- **Ingin gratis untuk mulai / tanpa urus server** → **Vercel + Neon** (lihat
  [02-PANDUAN-HOSTING.md](02-PANDUAN-HOSTING.md) Jalur A).

## Berkas konfigurasi siap pakai di repo ini
| Berkas | Untuk |
|---|---|
| `vercel.json` | Deploy ke Vercel (region Singapura, auto-migrate saat build) |
| `Dockerfile` + `docker-entrypoint.sh` | Membuat image produksi (auto migrate saat start) |
| `docker-compose.yml` | Menjalankan cepat di VPS (app + volume DB/upload; opsi Postgres) |
| `.dockerignore` | Mempercepat & mengamankan build Docker |
| `server.js` | Startup file untuk cPanel Passenger (Rumahweb Node.js App) |
