# Panduan Deployment cPanel & Optimasi Server

Karena Anda menggunakan **Shared Hosting (cPanel)**, kita harus beradaptasi dengan lingkungan cPanel yang memiliki batasan ketat pada "Number Of Processes" (batas Anda: 40 proses). Di sisi lain, cPanel memberikan kemudahan karena Anda tidak perlu melakukan *setup* Gateway/Nginx secara manual.

---

## 1. Mendaftarkan Aplikasi Subdomain
Anda memiliki folder aplikasi: `Portal-WaliKelas`, `mediaajar`, dan `umkm`.
Ikuti langkah ini untuk masing-masing aplikasi agar berjalan di cPanel:

1. Masuk ke cPanel Anda.
2. Cari dan klik menu **Setup Node.js App**.
3. Klik tombol **CREATE APPLICATION**.
4. Isi data berikut:
   - **Node.js version**: Pilih versi LTS (misal 18.x atau 20.x).
   - **Application mode**: `Production`
   - **Application root**: Isi dengan path foldernya. Misal: `Portal-WaliKelas`
   - **Application URL**: Pilih subdomainnya. Misal: `walas.gurusae.id`
   - **Application startup file**: 
     - Untuk Walas: `server_light.mjs` (jika tidak bisa ES Module, gunakan `.cjs`).
     - Untuk UMKM: `app.cjs`
5. Klik **CREATE**.
6. (Opsional) Jika aplikasi butuh *environment variables*, tambahkan di menu yang sama di bawah tombol *Run NPM Install*.

*Catatan: Phusion Passenger (mesin di balik Setup Node.js App) akan secara otomatis merutekan trafik dari subdomain `walas.gurusae.id` ke folder `Portal-WaliKelas` tanpa butuh Nginx manual atau PM2.*

---

## 2. PENTING: Solusi "Number of Processes" Penuh (97.5%)
Di cPanel *Shared Hosting*, Anda tidak boleh menggunakan `PM2` untuk menjaga aplikasi tetap menyala di *background*, karena PM2 memakan kuota *Number of Processes*.
Jika saat ini Anda menggunakan PM2 di terminal cPanel, Anda **WAJIB mematikannya**, karena *Passenger* sudah otomatis menjaga aplikasi Anda.

1. Buka **Terminal** di cPanel.
2. Ketik perintah: `pm2 kill` (untuk mematikan semua proses PM2 yang jalan di memori).
3. Ketik perintah: `pkill node` (jika ada *zombie process* yang menyangkut).

Setelah Anda mematikan proses manual di terminal, Anda akan melihat grafik *Number of Processes* di kanan cPanel Anda turun drastis dan kembali hijau.
Biarkan fitur **Setup Node.js App** (Passenger) yang menjalankan aplikasinya ketika ada pengunjung. Jika 5 menit tidak ada pengunjung, Passenger akan "menidurkan" aplikasi tersebut untuk menghemat batas 40 proses Anda, dan akan membangunkannya lagi otomatis dalam waktu nol sekian detik ketika ada yang mengakses.

---

## 3. PENTING: Optimasi `.htaccess` agar Proses Selalu Stabil (di Bawah 30/40)

Jika Anda memiliki 1 domain utama dan 10 subdomain (total 11 aplikasi), secara default cPanel (Passenger) bisa melahirkan (spawn) 2-3 proses untuk setiap aplikasi saat ada trafik, yang mana 11 x 3 = 33 proses! Ini sangat riskan mendekati limit 40/40.

**Rahasia menstabilkannya adalah membatasi "nafsu" server melalui `.htaccess`.**
Karena Node.js bersifat *asynchronous*, 1 proses saja sudah sangat kuat menangani ratusan pengguna bersamaan. Jadi, kita harus memaksa setiap aplikasi hanya boleh menggunakan maksimal 1 proses.

Pastikan Anda **MENAMBAHKAN** (bukan menimpa/menghapus isi aslinya) baris kode berikut ke file `.htaccess` **di setiap folder subdomain dan domain Anda**. Anda bisa menaruhnya di baris paling atas atau paling bawah:

```apache
# ===================================================
# OPTIMASI JUMLAH PROSES (PENTING UNTUK LIMIT 40/40)
# ===================================================
<IfModule mod_passenger.c>
    # 1. Batasi maksimal 1 proses per aplikasi
    PassengerMaxInstances 1
    # 2. Jangan ada proses yang "standby" saat sepi
    PassengerMinInstances 0
    # 3. "Tidurkan" aplikasi jika tidak ada pengunjung selama 60 detik
    PassengerPoolIdleTime 60
</IfModule>
```

*(Catatan Sangat Penting: Jangan hapus blok kode bawaan cPanel yang berisi `PassengerAppRoot` dan `PassengerNodejs` di dalam `.htaccess`, karena itu adalah nyawa dari aplikasi Node.js Anda).*

**Dengan kode di atas, matematika servernya menjadi:**
- Maksimal proses per aplikasi: **1 proses**
- Total aplikasi: **11 aplikasi** (1 domain + 10 subdomain)
- Maksimal proses berjalan secara bersamaan meskipun *traffic* sedang sangat padat: **Hanya 11 Proses!** (Sangat stabil dan aman di bawah 40/40).
- Jika ada subdomain yang sedang tidak diakses selama 60 detik, jumlah prosesnya akan turun otomatis menjadi 0, sehingga rata-rata proses Anda sehari-hari mungkin hanya akan di angka **3/40 atau 5/40**.

---

## 4. Strategi "Server Tambahan" (Load Balancing) dengan Laptop M5
Karena di cPanel Anda tidak bisa mengedit konfigurasi Nginx *Upstream*, jika suatu saat *hosting* Anda kelebihan beban dan Anda ingin menyalakan Laptop untuk membantu menangani lalu lintas, kita akan menggunakan teknik **DNS Round Robin / Failover**.

**Skenario:**
Website Anda `kbm.gurusae.id` sedang diakses ratusan siswa, dan cPanel Anda mulai memberikan *Error 508 (Resource Limit)*.

**Cara Membantu via Laptop:**
1. Anda menyalakan aplikasi KBM di Laptop Anda.
2. Anda menghubungkan Laptop Anda ke internet publik menggunakan alat gratis seperti **Cloudflare Tunnels (cloudflared)**. Alat ini akan memberi Laptop Anda koneksi stabil tanpa perlu *Setting* Router/IP Publik.
3. Anda masuk ke menu **Zone Editor** di cPanel atau Cloudflare.
4. Anda tambahkan (A Record / CNAME) baru untuk `kbm.gurusae.id` yang diarahkan ke alamat IP Laptop (atau alamat *Tunnel* Cloudflare Anda), sehingga kini `kbm.gurusae.id` memiliki 2 tujuan:
   - IP Server cPanel
   - IP Tunnel Laptop Anda
5. Trafik pengunjung akan secara acak terbagi 50:50 antara cPanel dan Laptop Anda.
6. Saat beban sudah kembali normal dan Anda ingin mematikan Laptop, cukup hapus (atau jeda) konfigurasi *Tunnel* DNS tersebut.

Dengan begitu, Anda tetap bisa memanfaatkan limitasi *Shared Hosting*, namun memiliki daya darurat tak terbatas ketika laptop Anda dinyalakan!
