# 🎯 PANDUAN LENGKAP DEPLOY DISTRIBUSI TELUR KE RUMAHWEB

**⏱️ Estimasi waktu**: 30-45 menit (termasuk upload & build)

---

## 📋 PRE-REQUISITE: CEK SEBELUM MULAI

Sebelum mulai, **pastikan hosting Rumahweb kamu punya**:

### ✅ Checklist Hosting
- [ ] **SSH Access** tersedia (cek email Rumahweb, biasanya ada info login SSH)
- [ ] **Node.js v18+** terinstall (hubungi support Rumahweb untuk cek)
- [ ] **npm** tersedia (biasanya jalan otomatis kalau Node.js ada)
- [ ] **MySQL** tersedia di cPanel (99% Rumahweb punya)
- [ ] **cPanel** tersedia (untuk manage database & file)
- [ ] Minimal **512 MB RAM** (untuk npm install + build)

### ❓ Cara Cek?

#### Cek via cPanel (Mudah):
1. Login ke `https://domain-kamu.com:2083` (cPanel)
2. Cari bagian **"Databases"** → ada **MySQL Databases** ✅
3. Itu tandanya MySQL ada

#### Cek via SSH (Untuk yakin):
```bash
ssh mana1261@203.175.9.131
# Masukkan password

# Cek Node.js
node --version
# Harusnya: v18.x.x atau lebih tinggi

# Cek npm
npm --version
# Harusnya: 9.x.x atau lebih tinggi

# Cek MySQL
mysql --version
# Harusnya: mysql Ver x.x.x
```

**Jika salah satu tidak ada**, hubungi **support Rumahweb** dan minta:
- "Install Node.js v18 LTS"
- "Enable SSH access"
- Jangan lanjut sampai semuanya ready ✅

---

## 🔧 TAHAP 1: SETUP DATABASE DI CPANEL (15 menit)

### Langkah 1.1: Login cPanel

1. Buka browser → `https://domain-kamu.com:2083`
2. Username: `mana1261`
3. Password: (lihat email Rumahweb waktu sign up)
4. Klik **"Login"**

Atau gunakan link yang ada di welcome email dari Rumahweb.

### Langkah 1.2: Buat Database MySQL

1. Di cPanel dashboard, cari bagian **"Databases"**
2. Klik **"MySQL Databases"**

**Screen akan menampilkan:**
```
┌─────────────────────────────────────────┐
│  Create a New Database                  │
│                                         │
│  Database Name: [input field]           │
│  [Create Database]                      │
└─────────────────────────────────────────┘
```

**Yang kamu masukkan:**
- Di field "Database Name", ketik: **`telur`** (BUKAN `mana1261_telur`)
  - cPanel otomatis akan prefix dengan username: `mana1261_telur`

3. Klik **"Create Database"** ✅

**Verifikasi:**
Di bagian "Current Databases", akan muncul:
```
Database Name: mana1261_telur  [Remove] [Privileges]
```

✅ Jika sudah muncul, lanjut ke step berikutnya.

---

### Langkah 1.3: Buat User Database

Masih di halaman **MySQL Databases**, scroll ke bagian:

```
┌─────────────────────────────────────────┐
│  MySQL Users                            │
│                                         │
│  Username: [input field]                │
│  Password: [input field]                │
│  Password (again): [input field]        │
│                                         │
│  [Create User]                          │
└─────────────────────────────────────────┘
```

**Yang kamu masukkan:**
- Username: **`admintelur`** (cPanel auto-prefix → `mana1261_admintelur`)
- Password: **`admintelur`** (ATAU password kuat yang kamu pilih)
  - 💡 Gunakan password yang sama di .env di ZIP sudah tercantum
  - Jika mau berbeda, catat baik-baik untuk step berikutnya

Klik **"Create User"** ✅

**Verifikasi:**
Di bagian "Current Users", akan muncul:
```
User: mana1261_admintelur  [Change Password] [Remove]
```

---

### Langkah 1.4: Berikan Akses User ke Database

Scroll ke bagian:
```
┌──────────────────────────────────────────┐
│  Add a User to a Database                │
│                                          │
│  User: [dropdown] mana1261_admintelur    │
│  Database: [dropdown] mana1261_telur     │
│                                          │
│  [Add User to Database]                  │
└──────────────────────────────────────────┘
```

1. **User dropdown** → pilih **`mana1261_admintelur`**
2. **Database dropdown** → pilih **`mana1261_telur`**
3. Klik **"Add User to Database"**

---

### Langkah 1.5: Set Privileges (Hak Akses)

Setelah click "Add User to Database", akan muncul halaman **Manage User Privileges**:

```
┌───────────────────────────────────────────┐
│  Manage User Privileges                   │
│                                           │
│  User: mana1261_admintelur                │
│  Database: mana1261_telur                 │
│                                           │
│  Privileges:                              │
│  ☐ SELECT      ☐ INSERT      ☐ UPDATE    │
│  ☐ DELETE      ☐ CREATE      ☐ ALTER     │
│  ☐ DROP        ☐ INDEX       ☐ LOCK      │
│  [All Privileges]                        │
│                                           │
│  [MAKE CHANGES]                           │
└───────────────────────────────────────────┘
```

**PENTING:** Klik **"All Privileges"** (centang semua)
- Ini memberikan akses penuh yang dibutuhkan Prisma untuk create tables, migrate, dll

Klik **"MAKE CHANGES"** ✅

**Verifikasi:**
Kembali ke halaman MySQL Databases, lihat bagian "User Privileges", seharusnya ada:
```
mana1261_admintelur @ mana1261_telur  [Manage] [Remove]
```

✅ Database MySQL siap! Catat informasi ini:
```
Database:  mana1261_telur
User:      mana1261_admintelur
Password:  admintelur (atau password yang kamu buat)
Host:      localhost (standard, JANGAN ubah)
```

---

## 📤 TAHAP 2: UPLOAD FILE KE RUMAHWEB (10 menit)

### Pilihan A: Upload via cPanel File Manager (Mudah & Aman)

#### Langkah 2A.1: Akses File Manager

1. Di cPanel dashboard, cari **"Files"** section
2. Klik **"File Manager"**
3. Akan terbuka window baru dengan file browser

#### Langkah 2A.2: Navigasi ke public_html

Default File Manager membuka `/public_html`. Kalau belum:

1. Di sidebar kiri, klik **"public_html"**
2. Pastikan path di atas menunjukkan: `/home/mana1261/public_html`

#### Langkah 2A.3: Buat Folder untuk Aplikasi

1. Di kosong area dalam `public_html`, **klik kanan** → **"Create Folder"**
2. Nama folder: **`distribusi-telur`** (atau nama lain yang kamu prefer)
3. Tekan **"Create"** ✅

Sekarang path menjadi: `/home/mana1261/public_html/distribusi-telur`

#### Langkah 2A.4: Upload ZIP

1. Buka folder `distribusi-telur` yang baru dibuat (double-click)
2. Klik tombol **"Upload"** (biasanya di top-left)
3. Pilih file **`distribusi-telur-rumahweb.zip`** dari komputer kamu
4. Tunggu sampai 100% ✅

**Status:**
```
File: distribusi-telur-rumahweb.zip
Size: 0.15 MB
Status: Upload complete ✅
```

#### Langkah 2A.5: Extract ZIP

1. **Klik kanan** pada file ZIP → **"Extract"**
2. Di dialog pilih path: `/home/mana1261/public_html/distribusi-telur`
3. Klik **"Extract File(s)"** ✅

Tunggu beberapa detik...

**Verifikasi:**
Seharusnya sudah ada file-file:
- `.env`
- `.env.example`
- `package.json`
- `prisma/` (folder)
- `src/` (folder)
- `SETUP_RUMAHWEB.md`
- `PANDUAN_LENGKAP_DEPLOY.md`
- dll

✅ Upload selesai! Lanjut ke SSH.

---

### Pilihan B: Upload via SFTP (Untuk yang terbiasa)

Jika kamu sudah punya SFTP client (WinSCP, Filezilla):

1. Connect ke: `203.175.9.131` (host cPanel)
2. Username: `mana1261`
3. Password: (password cPanel)
4. Port: `22` (SSH) atau `2222` (alternate)
5. Drag-drop `distribusi-telur-rumahweb.zip` ke `/public_html/distribusi-telur/`
6. Extract di File Manager cPanel seperti Pilihan A

---

## 🖥️ TAHAP 3: SSH & INSTALL DEPENDENCIES (15 menit)

### Langkah 3.1: Buka SSH Terminal

**Windows:**
- Tekan **Windows Key + R**
- Ketik: `powershell` atau buka **Command Prompt / PowerShell**

**Mac/Linux:**
- Buka **Terminal** (Cmd+Space → Terminal)

### Langkah 3.2: Connect SSH ke Server

Ketik command berikut:
```bash
ssh mana1261@203.175.9.131
```

**Output akan menampilkan:**
```
The authenticity of host '203.175.9.131 (203.175.9.131)' can't be established.
RSA key fingerprint is xx:xx:xx:xx:xx
Are you sure you want to continue connecting (yes/no)? 
```

Ketik: **`yes`** lalu tekan **Enter**

**Kemudian diminta password:**
```
mana1261@203.175.9.131's password: 
```

Ketik password cPanel kamu (tidak akan terlihat saat ketik, itu normal) → tekan **Enter**

**Sukses login, harusnya muncul:**
```
mana1261@rumahweb [~]$ 
```

✅ Kamu sekarang di dalam server!

### Langkah 3.3: Navigasi ke Folder Aplikasi

```bash
cd public_html/distribusi-telur
```

Verifikasi:
```bash
pwd
```

Output harusnya:
```
/home/mana1261/public_html/distribusi-telur
```

Dan lihat file yang ada:
```bash
ls -la
```

Output harusnya tampil file-file seperti:
```
.env
.env.example
package.json
prisma/
src/
README.md
SETUP_RUMAHWEB.md
PANDUAN_LENGKAP_DEPLOY.md
```

✅ Jika sudah ada, lanjut ke install.

---

### Langkah 3.4: Cek Node.js & npm

```bash
node --version
```

Output harusnya: `v18.x.x` atau lebih tinggi (misal v20.x.x juga OK)

```bash
npm --version
```

Output harusnya: `9.x.x` atau lebih tinggi

❌ **Jika tidak ada atau versi lama**, hubungi support Rumahweb sebelum lanjut.

---

### Langkah 3.5: Copy .env.example ke .env

File `.env` berisi database credentials. Sudah ada saat extract ZIP, tapi kita pastikan:

```bash
cp .env.example .env
```

Verifikasi:
```bash
cat .env | head -20
```

Output harusnya:
```
# ================================================================
# Konfigurasi environment...
# DATABASE URL sudah berisi:
# DATABASE_URL="mysql://mana1261_admintelur:admintelur@localhost:3306/mana1261_telur"
```

### ⚠️ PENTING: Verifikasi DATABASE_URL di .env

Buka file `.env`:
```bash
nano .env
```

Cari baris:
```
DATABASE_URL="mysql://mana1261_admintelur:admintelur@localhost:3306/mana1261_telur"
```

**Pastikan:**
- Username: `mana1261_admintelur` ← harus sama dengan yang dibuat di cPanel
- Password: `admintelur` ← harus sama dengan password cPanel
- Database: `mana1261_telur` ← harus sama
- Host: `localhost` ← JANGAN ubah

❌ **Jika berbeda** (karena kamu buat password lain atau nama berbeda):

Edit baris DATABASE_URL:
```bash
# Contoh: jika password kamu buat "passwordBaru123"
DATABASE_URL="mysql://mana1261_admintelur:passwordBaru123@localhost:3306/mana1261_telur"
```

**Cara edit di nano:**
1. Buka file: `nano .env`
2. Navigasi ke baris DATABASE_URL (gunakan arrow keys)
3. Edit password atau detail yang berbeda
4. Tekan **Ctrl + X**
5. Tekan **Y** (yes)
6. Tekan **Enter** (save)

✅ .env sudah benar

---

### Langkah 3.6: Install Dependencies (npm install)

Ini command yang paling memakan waktu (3-5 menit):

```bash
npm install
```

**Output akan menampilkan banyak package yang di-download:**
```
npm warn ... (mungkin ada warning, itu normal)
npm WARN deprecated ...
...
added 131 packages, and audited 132 packages in 45s
```

✅ Jika selesai dengan `added XXX packages`, lanjut.

❌ **Jika error "out of memory" atau timeout:**
- Server RAM penuh / internet jelek
- Coba ulangi: `npm install`
- Jika masih error, hubungi support Rumahweb

---

## 🗄️ TAHAP 4: SETUP DATABASE (5 menit)

### Langkah 4.1: Jalankan Migrasi Database

Database sudah dibuat di cPanel, sekarang kita buat schema (struktur tabel):

```bash
npx prisma migrate deploy
```

❌ **Jika muncul error** "migration pending", jalankan:
```bash
npx prisma migrate dev --name init
```

**Output harusnya:**
```
Datasource "db": MySQL database "mana1261_telur" at "localhost:3306"

Applying migration `20260703114413_init`
Applying migration `20260703132015_add_order_archive`
...
Applying migration `20260706154200_app_settings`

All migrations have been successfully applied.
```

✅ Semua tabel sudah dibuat!

**Verifikasi di cPanel:**
1. Buka cPanel → MySQL Databases
2. Klik **"phpMyAdmin"** (tool untuk manage database)
3. Login jika diminta
4. Di sidebar kiri, klik database **`mana1261_telur`**
5. Seharusnya ada banyak tabel: `User`, `Branch`, `Order`, `Stock`, dll ✅

---

### Langkah 4.2: Isi Data Demo (Opsional tapi Recommended)

Ini mengisi data contoh supaya bisa langsung test login:

```bash
npm run db:seed
```

**Output harusnya:**
```
🌱 Seeding database...
  ✓ 5 cabang
  ✓ users (superadmin, owner, 5 admin cabang, 10 kurir — 2 per cabang)
  ✓ 4 produk
  ✓ price lists (global)
  ✓ stok awal + movement 'in'
  ✓ stok gudang pusat + contoh pembelian
  ✓ customers contoh

✅ Seed selesai. Akun demo:
   superadmin@telur.local   (Super Admin) — password: password123
   owner@telur.local        (Owner/Approver) — password: password123
   admin1@telur.local       (Admin Cabang) — password: password123
```

✅ Database siap dengan data demo!

---

## 🏗️ TAHAP 5: BUILD APLIKASI (5-10 menit)

Build ini mengoptimalkan code untuk production:

```bash
npm run build
```

**Output akan panjang, tapi akhirnya harusnya:**
```
  ▲ Next.js 14.2.15
  ✓ Compiled successfully

  Successfully generated /home/mana1261/public_html/distribusi-telur/.next
```

✅ Aplikasi sudah siap running!

---

## ▶️ TAHAP 6: JALANKAN APLIKASI (Choose 1)

### OPSI A: Gunakan PM2 (Production - Recommended)

PM2 adalah process manager yang membuat app jalan terus-menerus & auto-restart:

#### Step 1: Install PM2 globally

```bash
npm install -g pm2
```

#### Step 2: Start aplikasi dengan PM2

```bash
pm2 start npm --name "distribusi-telur" -- start
```

**Output:**
```
[PM2] Starting /usr/bin/npm in fork_mode (1 instance)
[PM2] Done.
┌─────┬──────────────────┬──────┬──────┬────────┬──────────┐
│ id  │ name             │ mode │ ↺    │ status │ cpu  mem │
├─────┼──────────────────┼──────┼──────┼────────┼──────────┤
│ 0   │ distribusi-telur │ fork │ 0    │ online │ 0%   2%  │
└─────┴──────────────────┴──────┴──────┴────────┴──────────┘
```

✅ Aplikasi running!

#### Step 3: Setup PM2 auto-start di reboot

```bash
pm2 startup
```

Ikuti instruksi yang muncul (biasanya copy-paste 1 command)

```bash
pm2 save
```

✅ Aplikasi akan auto-start setiap server reboot.

#### Command Berguna PM2:

```bash
# Lihat status
pm2 status

# Lihat logs (real-time)
pm2 logs distribusi-telur

# Restart aplikasi
pm2 restart distribusi-telur

# Stop aplikasi
pm2 stop distribusi-telur

# Delete dari PM2
pm2 delete distribusi-telur
```

---

### OPSI B: Jalankan Langsung (Development - Hanya untuk test)

```bash
npm start
```

**Output:**
```
> distribusi-telur@0.1.0 start
> next start

  ▲ Next.js 14.2.15
    Local:        http://localhost:3000
```

⚠️ **PENTING**: 
- Aplikasi hanya jalan saat terminal tetap terbuka
- Jika close/disconnect SSH, aplikasi stop
- Hanya untuk test singkat, JANGAN untuk production

---

## 🌐 TAHAP 7: AKSES APLIKASI (2 menit)

### Langkah 7.1: Cek Port 3000 Terbuka

Aplikasi berjalan di port 3000. Cek apakah terbuka:

```bash
curl -I http://localhost:3000
```

Output harusnya:
```
HTTP/1.1 307 Temporary Redirect
location: /login?next=%2F
```

✅ Port 3000 bisa diakses locally.

---

### Langkah 7.2: Akses via Browser

**Local Testing (dari server sendiri):**
```
http://localhost:3000
```

**Via Domain (dari komputer kamu):**

Tergantung setup Rumahweb. Biasanya:

```
http://domain-kamu.com:3000
```

atau (jika ada reverse proxy):

```
https://domain-kamu.com
```

Hubungi support Rumahweb untuk tau cara akses yang benar.

---

### Langkah 7.3: Login dengan Akun Demo

Setelah seeder dijalankan (step 4.2), gunakan:

**Email**: `superadmin@telur.local`  
**Password**: `password123`

Atau:

**Email**: `admin1@telur.local`  
**Password**: `password123`

Klik **"Login"** ✅

---

## 🔐 TAHAP 8: SECURITY (Penting!)

### Step 1: Ubah JWT_SECRET

JWT_SECRET digunakan untuk encrypt session tokens. Jangan pakai default!

```bash
nano .env
```

Cari baris:
```
JWT_SECRET="ganti-dengan-rahasia-acak-panjang-di-produksi"
```

Generate secret baru:
```bash
# Dari terminal baru
openssl rand -base64 48
```

Copy hasil (string panjang acak) dan replace di `.env`:
```
JWT_SECRET="xxxxxxxxxxxxxxxxxxxxxxxxxxxx..." (hasil random)
```

Save dan restart aplikasi:
```bash
pm2 restart distribusi-telur
```

✅ Session sekarang aman.

---

### Step 2: Ubah Password Akun Demo

Login ke aplikasi dengan akun superadmin → Settings → Ubah password

✅ Akun sekarang aman.

---

### Step 3: Enable HTTPS (SSL)

**Di cPanel:**
1. Cari **"Security"** → **"SSL/TLS"**
2. Pilih domain
3. Issue certificate (gratis Let's Encrypt)
4. Auto-renew harus enabled

---

## ⚠️ COMMON MISTAKES & TROUBLESHOOTING

### ❌ Error 1: "Can't reach database server at `localhost:3306`"

**Penyebab**: MySQL tidak running atau credentials salah

**Solusi**:
1. Cek DATABASE_URL di `.env`:
   ```bash
   cat .env | grep DATABASE_URL
   ```
2. Pastikan user & password sama persis dengan cPanel
3. Hubungi support Rumahweb: "MySQL tidak berjalan"

---

### ❌ Error 2: "npm: command not found"

**Penyebab**: Node.js/npm tidak terinstall

**Solusi**:
```bash
node --version
npm --version
```

Jika error, Node.js belum installed. **Hubungi support Rumahweb** minta install Node.js v18 LTS.

---

### ❌ Error 3: "Out of memory" saat npm install

**Penyebab**: Server RAM tidak cukup atau ada proses lain

**Solusi**:
```bash
# Clear npm cache
npm cache clean --force

# Coba lagi
npm install

# Atau dengan memory limit
NODE_OPTIONS="--max_old_space_size=512" npm install
```

---

### ❌ Error 4: "Port 3000 already in use"

**Penyebab**: Ada aplikasi lain atau PM2 instance lama yang masih running

**Solusi**:
```bash
# Cek siapa yang pakai port 3000
lsof -i :3000

# Atau pakai port lain
PORT=3001 npm start
```

---

### ❌ Error 5: ".env file not found"

**Penyebab**: Lupa copy `.env.example` ke `.env`

**Solusi**:
```bash
cp .env.example .env
```

---

### ✅ Mau Test Database Langsung?

```bash
# Akses MySQL
mysql -u mana1261_admintelur -p mana1261_telur

# Masukkan password (tidak terlihat saat ketik)

# Di MySQL prompt, lihat tabel:
SHOW TABLES;

# Lihat user demo:
SELECT email, role FROM User LIMIT 5;

# Exit MySQL
exit
```

---

## 📞 SUPPORT & BANTUAN

### Jika Ada Error:

1. **Simpan error message lengkap:**
   ```bash
   npm install 2>&1 | tee error.log
   cat error.log
   ```

2. **Share informasi ini:**
   - Lengkap error message
   - Output dari: `node --version`, `npm --version`, `mysql --version`
   - Output dari: `ls -la` di folder aplikasi
   - Step mana yang error

3. **Hubungi support Rumahweb jika:**
   - MySQL tidak connect
   - Node.js tidak terinstall
   - Port 3000 tidak accessible
   - Storage penuh

---

## ✅ CHECKLIST AKHIR

Sebelum produksi, pastikan:

- [ ] Database dibuat di cPanel
- [ ] File sudah di-upload & extract
- [ ] `npm install` selesai tanpa error
- [ ] `npx prisma migrate deploy` selesai
- [ ] `npm run db:seed` selesai (ada data demo)
- [ ] `npm run build` selesai dengan "Compiled successfully"
- [ ] `pm2 start` atau `npm start` jalan
- [ ] Bisa akses http://localhost:3000
- [ ] Login dengan email `superadmin@telur.local` sukses
- [ ] JWT_SECRET sudah diganti dari default
- [ ] Password akun demo sudah diganti
- [ ] HTTPS sudah enabled di cPanel

✅ **Semua OK? Selamat, aplikasi Distribusi Telur siap production!** 🚀

---

## 🎓 NEXT STEPS AFTER DEPLOYMENT

1. **Setup monitoring:** Baca logs secara berkala `pm2 logs`
2. **Backup database:** Setup automated backup di cPanel
3. **Setup domain:** Point DNS ke Rumahweb IP
4. **Monitor CPU/RAM:** Jika lambat, upgrade plan hosting
5. **Update regularly:** Check GitHub untuk update kode

---

**Butuh bantuan? Hubungi tim support dengan informasi error message lengkap.** 💬

