# 🚀 Quick Deploy Guide — Tunnel SaaS v2

**Target waktu deploy**: 20-30 menit (sekali setup)

---

## 📋 Pre-Flight Checklist

Sebelum mulai, pastikan punya:

- ✅ Hosting cPanel aktif
- ✅ Domain utama (mis. `mydomain.com`)
- ✅ Akses SSH atau File Manager cPanel
- ✅ Folder `tunnel-saas/` di komputer lokal

---

## 🎯 Struktur Target di Hosting

```
public_html/
├── api/              ← SERVER  (subdomain api.mydomain.com)
│   ├── render.php
│   ├── saas_config.php
│   ├── index.php (engine)
│   ├── amp/
│   └── cache/        (auto-create, 755)
│
└── manage/           ← ADMIN  (subdomain manage.mydomain.com)
    ├── index.php
    ├── .htaccess
    └── data/         (sensitive, di-deny)
        ├── keys.json
        ├── blacklist.txt
        └── clients/
```

---

## ⚡ 7-Step Express Deploy

### Step 1: Subdomain & PHP Setup (5 menit)

cPanel actions:
```
1. Domains > Subdomains > Buat "api" -> public_html/api
2. Domains > Subdomains > Buat "manage" -> public_html/manage
3. Select PHP Version > PHP 8.x
   Centang: gd, curl, mbstring, json, zip
4. Select PHP Options:
   - allow_url_fopen = On
   - max_execution_time = 600
   - memory_limit = 256M
```

### Step 2: ZIP Files di Lokal (1 menit)

Di Windows/Mac/Linux:
```
1. Klik kanan tunnel-saas/server/ > Compress
   Output: server.zip
2. Klik kanan tunnel-saas/admin/ > Compress
   Output: admin.zip
```

### Step 3: Upload Server (5 menit)

cPanel > File Manager > `public_html/api/`:
```
1. Upload server.zip
2. Extract
3. Pastikan render.php LANGSUNG di api/, bukan nested
4. Hapus server.zip
5. CHMOD api/cache/ ke 755 (writable)
```

### Step 4: Upload Admin (3 menit)

cPanel > File Manager > `public_html/manage/`:
```
1. Upload admin.zip
2. Extract
3. CHMOD manage/data/ ke 755 (writable)
4. EDIT manage/index.php baris 13:
   $ADMIN_PASSWORD = 'GANTI_PASSWORD_KUAT_DI_SINI';
5. Hapus admin.zip
```

### Step 5: Verifikasi (2 menit)

Test di browser:
```
URL 1: https://api.mydomain.com/render.php
       Expected: "Invalid API key"  ← endpoint hidup ✓

URL 2: https://manage.mydomain.com/
       Expected: Login screen ungu  ← admin hidup ✓

URL 3: Login admin > 🩺 System Check
       Expected: ✓ Siap (semua check hijau)
```

### Step 6: Tambah Client Pertama (3 menit)

Di admin panel:
```
1. 🔑 API Keys & Client > Tambah Client
   - Nama: Test Client
   - Host: client-test.com
   - [x] Clone master template
   - Klik "Generate Key + Buat Folder"

2. 📦 Download Client Files
   - Server URL: https://api.mydomain.com/render.php
   - Pilih "Test Client"
   - Klik "📥 Download ZIP Lengkap"
```

### Step 7: Owner Client Install (5 menit)

Kirim ZIP ke owner client. Mereka:
```
1. Login cPanel hosting mereka
2. File Manager > public_html/
3. Upload tunnel-client-XXX.zip
4. Extract
5. Pindah isi main-domain/ ke public_html/
   (index.php + .htaccess)
6. Pastikan cURL aktif di PHP Options
7. Test https://client-test.com/

KALAU AMP DI DOMAIN TERPISAH:
8. Buat subdomain amp.client-test.com
9. Upload isi amp-domain/ ke folder subdomain
```

---

## 🛡️ Security Hardening (5 menit)

Setelah deploy berhasil:

```
[1] Ganti password admin (minimal 20 char random)
[2] Edit saas_config.php:
    'allow_any' => false
    Hapus 'testkey123' => '*'
[3] HTTPS-only redirect di .htaccess:
    RewriteCond %{HTTPS} off
    RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
[4] (Opsional) HTTP Auth di /manage/
    cPanel > Directory Privacy > manage/
[5] (Opsional) IP Whitelist admin
    .htaccess: Require ip YOUR_IP
```

---

## 📊 Verifikasi Akhir

System Check di admin panel harus tampilkan:

```
┌─────────────────────────┐
│  ✓ Siap                 │
│  20/20 pass             │
└─────────────────────────┘
```

Plus detail check semua hijau:

```
✓ PHP Version           : 8.1.10
✓ Ekstensi PHP: gd      : loaded
✓ Ekstensi PHP: curl    : loaded
✓ Ekstensi PHP: mbstring: loaded
✓ Ekstensi PHP: json    : loaded
✓ allow_url_fopen       : On
✓ max_execution_time    : 600s
✓ mod_rewrite Apache    : aktif
✓ Folder writable: cache img server
✓ Folder writable: cache geo server
✓ Folder writable: data folder
✓ Folder writable: clients folder
✓ File: render.php
✓ File: saas_config.php
✓ File: index.php (engine)
✓ File: amp/index.php
✓ File: list.txt
✓ File: config.php
✓ File: client_data.php
✓ Server endpoint test  : OK (403 Invalid API key)
```

---

## 🔄 Update Template Tanpa Downtime

Setelah live, untuk update template (CSS, struktur HTML):

```
1. Edit file di public_html/api/ via cPanel File Manager
2. Save
3. Semua client otomatis dapat update
4. Tidak perlu touch file di client domain mana pun
```

JANGAN edit saat update:
- `saas_config.php` (kalau cuma update template)
- `list.txt` (kecuali memang mau ubah master)
- File di folder `cache/` (auto-managed)

---

## 📚 Referensi

- **Panduan teknis lengkap**: [`DEPLOY-CPANEL.txt`](DEPLOY-CPANEL.txt)
- **Panduan visual ramah pemula**: [`panduan-saas.html`](panduan-saas.html)
- **Arsitektur**: [`README.txt`](README.txt)
- **Detail client**: [`client/README-CLIENT.txt`](client/README-CLIENT.txt)
- **Detail server**: [`server/README-SERVER.txt`](server/README-SERVER.txt)

---

## 🆘 Stuck? Common Issues

| Problem | Solusi |
|---|---|
| `Invalid API key` saat akses endpoint | ✅ Itu BENAR, artinya endpoint hidup |
| 500 Error | Cek `error_log` di cPanel |
| Admin login muter | Cek `session.save_path`, CHMOD folder |
| Banner image broken | Aktifkan GD di PHP extension |
| `allow_url_fopen` Off | Aktifkan di PHP Options |
| Path detection salah | Edit `admin_data_path` di `saas_config.php` |

---

**Total waktu deploy**: ~25 menit
**Tingkat kesulitan**: ⭐⭐☆☆☆ (Mudah, terstruktur)

Kalau semua langkah dijalankan urut, pasti sukses. Selamat deploy! 🚀
