# PANDUAN LENGKAP DEPLOY BPI SMARTSCHOOL KE DOMAINESIA
### Subdomain: `https://sims.smasbpi1bdg.sch.id`
### Server: cPanel DomaiNesia (CloudLinux Setup Node.js App + SQLite)

---

## 📋 Ringkasan Singkat

Aplikasi **BPI SmartSchool** adalah aplikasi Next.js (Node.js) yang berjalan **100% lokal** dengan database SQLite mandiri (`smartschool.db`). Semua data siswa, guru, presensi, kurikulum, dan nilai tersimpan di server Anda tanpa ketergantungan pihak ketiga.

File arsip zip siap upload telah disiapkan di folder lokal Anda:
- **Nama File**: `bpi-smartschool-domainesia.zip` (atau `deployment.zip`)
- **Lokasi**: Folder utama project ini

---

## 🛠️ LANGKAH-LANGKAH DEPLOYMENT LENGKAP

### TAHAP 1: Membuat Subdomain di cPanel DomaiNesia

1. Login ke **cPanel DomaiNesia** Anda (biasanya `https://smasbpi1bdg.sch.id:2083` atau melalui dashboard DomaiNesia).
2. Cari dan klik menu **"Domains"** atau **"Subdomains"**.
3. Klik tombol **"Create A New Domain"** (atau form pembuatan subdomain):
   - **Domain / Subdomain**: Masukkan `sims.smasbpi1bdg.sch.id`
   - **Document Root**: Hilangkan centang "Share document root" jika ada, lalu isi path direktori aplikasi:
     ```text
     sims.smasbpi1bdg.sch.id
     ```
     *(cPanel akan membuat folder khusus bernama `sims.smasbpi1bdg.sch.id` di root home akun Anda).*
4. Klik tombol **"Submit"** / **"Create"**.
5. **Aktifkan SSL (HTTPS)**:
   - Di cPanel, buka menu **"SSL/TLS Status"**.
   - Cari domain `sims.smasbpi1bdg.sch.id`, lalu centang dan klik tombol **"Run AutoSSL"**. Tunggu sampai muncul gembok hijau agar website langsung berstatus HTTPS resmi dan aman.

---

### TAHAP 2: Upload dan Ekstrak Berkas Project

1. Kembali ke halaman utama cPanel, buka menu **"File Manager"**.
2. Di pojok kanan atas File Manager, klik tombol **Settings**:
   - Beri tanda centang pada opsi **"Show Hidden Files (dotfiles)"** agar file seperti `.next`, `.env`, dan `.htaccess` terlihat.
   - Klik **Save**.
3. Di panel sebelah kiri, klik dua kali pada folder subdomain Anda:
   ```text
   sims.smasbpi1bdg.sch.id
   ```
   *(Jika di dalam folder tersebut ada file bawaan default seperti `cgi-bin` atau `index.html` kosong bawaan cPanel, silakan hapus saja).*
4. Klik tombol **"Upload"** di bilah menu atas File Manager.
5. Pilih atau drag-and-drop file **`bpi-smartschool-domainesia.zip`** dari komputer Anda.
6. Tunggu hingga bar progress upload mencapai **100% dan berubah menjadi warna hijau**.
7. Kembali ke tab File Manager, klik tombol **"Reload"**.
8. Klik kanan pada file `bpi-smartschool-domainesia.zip`, lalu pilih **"Extract"** (pilih extract ke folder saat ini: `/sims.smasbpi1bdg.sch.id`).
9. Setelah ekstraksi selesai, klik Reload. Pastikan struktur berkas langsung berada di dalam folder tersebut:
   ```text
   sims.smasbpi1bdg.sch.id/
   ├── .next/
   ├── public/
   ├── src/
   ├── scripts/
   ├── smartschool.db       <-- File Database SQLite
   ├── server.js            <-- Entry Point Aplikasi
   ├── package.json
   ├── package-lock.json
   ├── next.config.mjs
   ├── .htaccess
   ├── .env
   └── ...
   ```
10. *(Opsional)* Anda dapat menghapus file `bpi-smartschool-domainesia.zip` dari File Manager setelah diekstrak untuk menghemat kuota hosting.

---

### TAHAP 3: Konfigurasi "Setup Node.js App" di cPanel

1. Di halaman utama cPanel, scroll ke bagian **Software**, lalu klik menu **"Setup Node.js App"**.
2. Klik tombol warna biru **"Create Application"** di kanan atas.
3. Isi parameter konfigurasi dengan rincian berikut:
   - **Node.js version**: Pilih versi `20.x` (atau minimal `18.x`).
   - **Application mode**: Pilih **`Production`**.
   - **Application root**: Masukkan nama folder tempat file diletakkan:
     ```text
     sims.smasbpi1bdg.sch.id
     ```
   - **Application URL**: Pilih subdomain Anda dari dropdown:
     ```text
     sims.smasbpi1bdg.sch.id
     ```
   - **Application startup file**: Masukkan:
     ```text
     server.js
     ```
4. Di bagian **Environment variables** (opsional / sudah ada di file `.env`):
   - Jika ingin menambahkan manual, Anda bisa klik *Add Variable*:
     - Name: `NODE_ENV`, Value: `production`
     - Name: `PORT`, Value: `3000` (atau port yang diatur cPanel)
5. Klik tombol **"Create"** di kanan atas. Tunggu beberapa saat sampai aplikasi berhasil terdaftar.

---

### TAHAP 4: Instalasi Dependencies di Server (Run NPM Install)

Setelah aplikasi dibuat:
1. Klik tombol **Edit** (ikon pensil) pada aplikasi `sims.smasbpi1bdg.sch.id` di menu **Setup Node.js App**.
2. Scroll ke bawah ke bagian **Detected configuration files**, Anda akan melihat `package.json`.
3. Klik tombol **"Run NPM Install"**.
4. Proses instalasi module akan berjalan di background. Tunggu sekitar 1–3 menit sampai muncul notifikasi hijau *"NPM install completed successfully"*.

> **TIPS ALTERNATIF (Bila tombol Run NPM Install lama / timeout):**
> Anda bisa menginstal via Terminal cPanel:
> 1. Buka menu **Terminal** di cPanel.
> 2. Salin perintah *Command for entering the virtual environment* yang ada di bagian atas halaman Node.js App (misal: `source /home/username/nodevenv/sims.smasbpi1bdg.sch.id/20/bin/activate && cd /home/username/sims.smasbpi1bdg.sch.id`).
> 3. Tempel di terminal dan tekan Enter.
> 4. Jalankan perintah:
>    ```bash
>    npm install --omit=dev
>    ```

---

### TAHAP 5: Menjalankan & Menguji Aplikasi

1. Kembali ke halaman **Setup Node.js App**.
2. Klik tombol **"Restart"** (ikon panah melingkar) di bagian atas menu aplikasi.
3. Buka tab baru di browser Anda dan akses:
   ```text
   https://sims.smasbpi1bdg.sch.id
   ```
4. Halaman login BPI SmartSchool akan muncul. Coba login dan verifikasi fitur-fitur utama:
   - Dashboard & Profil Sekolah
   - Buku Induk Siswa & Guru
   - Presensi & Jadwal KBM
   - Nilai & Rapor Bulanan/Semesteran
   - Modul Kesiswaan, BK, Humas, Sarpras, dan Tata Usaha

---

### TAHAP 6: Backup Rutin Database SQLite

Seluruh data sekolah (siswa, guru, nilai, akun) tersimpan dalam satu berkas:
```text
sims.smasbpi1bdg.sch.id/smartschool.db
```

**Cara Backup Rutin (Sangat Mudah):**
1. Buka **File Manager** cPanel.
2. Masuk ke folder `sims.smasbpi1bdg.sch.id`.
3. Klik kanan pada file **`smartschool.db`** lalu pilih **Download**.
4. Simpan file tersebut di komputer atau Google Drive sekolah sebagai arsip cadangan berkala (misal: seminggu atau sebulan sekali).

---

## ❓ PANDUAN TROUBLESHOOTING & SOLUSI KENDALA 503 SERVICE UNAVAILABLE

Jika saat membuka `sims.smasbpi1bdg.sch.id` muncul error:
> **"503 Service Unavailable - The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Additionally, a 503 Service Unavailable error was encountered while trying to use an ErrorDocument to handle the request."**

Berikut 3 penyebab utama dan cara mengatasinya dalam 1–2 menit:

### 1. Masalah Utama: File `.htaccess` Memuat Aturan Proxy yang Salah
- **Penyebab**: File `.htaccess` tertimpa aturan `RewriteRule ^(.*)$ http://127.0.0.1:3000/$1 [P,L]`. Padahal CloudLinux Passenger menggunakan internal socket/pipe, bukan port 3000 biasa. Apache mencoba me-forward ke port 3000 dan gagal, lalu menghasilkan 503.
- **Solusi Cepat**:
  1. Buka **File Manager** cPanel > folder `sims.smasbpi1bdg.sch.id`.
  2. Pastikan opsi *Show Hidden Files* di centang di pojok kanan atas menu *Settings*.
  3. Klik kanan file **`.htaccess`** lalu pilih **Edit**.
  4. Hapus seluruh blok baris proxy ini jika ada:
     ```apache
     <IfModule mod_rewrite.c>
       RewriteEngine On
       RewriteRule ^(.*)$ http://127.0.0.1:3000/$1 [P,L]
     </IfModule>
     ```
  5. Pastikan isinya HANYA baris konfigurasi Passenger otomatis cPanel:
     ```apache
     # DO NOT REMOVE. CLOUDLINUX PASSENGER CONFIGURATION BEGIN
     PassengerAppRoot "/home/USERNAME_ANDA/sims.smasbpi1bdg.sch.id"
     PassengerBaseURI "/"
     PassengerNodejs "/home/USERNAME_ANDA/nodevenv/sims.smasbpi1bdg.sch.id/20/bin/node"
     PassengerAppType node
     PassengerStartupFile server.js
     # DO NOT REMOVE. CLOUDLINUX PASSENGER CONFIGURATION END
     ```
  6. *(Atau cara paling mudah)*: **Hapus file `.htaccess` tersebut**, lalu buka menu **Setup Node.js App** di cPanel, klik tombol **Save** dan **Restart** pada aplikasi Anda. cPanel akan secara otomatis membuatkan file `.htaccess` yang bersih dan benar!

### 2. Update File `server.js` Terbaru
- **Penyebab**: Di CloudLinux Passenger, nilai `process.env.PORT` adalah UNIX socket path (bukan angka port biasa). Kode server lama menggunakan `parseInt(process.env.PORT)` yang menghasilkan `NaN` dan menyebabkan crash saat start.
- **Solusi**:
  1. File `server.js` lokal Anda sudah diperbaiki.
  2. Unggah file [server.js](file:///c:/Users/Reni%20Susanti/Downloads/SIMS%20BPI%201/server.js) terbaru ke folder `sims.smasbpi1bdg.sch.id` di cPanel File Manager (menimpa file lama).
  3. Buka menu **Setup Node.js App** di cPanel dan klik **Restart**.

### 3. Dependencies `node_modules` Belum Terinstall
- Pastikan Anda sudah mengklik tombol **"Run NPM Install"** di menu Setup Node.js App.
- Atau buka menu **Terminal** di cPanel, masuk ke virtual environment dan jalankan:
  ```bash
  npm install --omit=dev
  ```

### 4. Cara Melihat Pesan Error Asli via Terminal cPanel
Jika masih muncul 503 dan Anda ingin melihat penyebab spesifiknya:
1. Buka menu **Terminal** di cPanel.
2. Salin perintah virtual environment dari menu Setup Node.js App (contoh):
   ```bash
   source /home/username/nodevenv/sims.smasbpi1bdg.sch.id/20/bin/activate && cd /home/username/sims.smasbpi1bdg.sch.id
   ```
3. Jalankan perintah:
   ```bash
   node server.js
   ```
4. Terminal akan langsung menampilkan output proses startup Node.js dan menunjukkan jika ada error yang belum terselesaikan.

---

## 🔄 CARA UPDATE DI KEMUDIAN HARI (JIKA ADA PERUBAHAN KODE)

Jika di masa mendatang Anda melakukan perubahan coding di komputer lokal:
1. Jalankan perintah build di terminal lokal:
   ```bash
   npm run build
   ```
2. Jalankan perintah packing zip otomatis:
   ```bash
   npm run pack:deploy
   ```
3. Upload file `bpi-smartschool-domainesia.zip` yang baru ke cPanel, ekstrak (overwrite file lama), lalu klik tombol **Restart** di menu Setup Node.js App cPanel. Selesai!
