# 🚀 Panduan Deployment ke Hosting cPanel

Ikuti langkah berikut secara berurutan.

---

## 1. Siapkan Database di cPanel

1. Login **cPanel** → menu **MySQL® Databases**.
2. Buat database baru, misal: `usercpanel_mbgdb`.
3. Buat **user database** baru (misal: `usercpanel_mbguser`) dengan password kuat.
4. **Add User To Database** → pilih user & database tadi → centang **ALL PRIVILEGES**.
5. Buka **phpMyAdmin** → pilih database `usercpanel_mbgdb` → tab **Import** → unggah file `database/mbg_system.sql` → **Go**.

---

## 2. Upload File Proyek

**Cara A (disarankan — zip lalu extract):**
1. Di lokal, zip seluruh isi folder proyek **KECUALI** folder: `.git`, `writable/cache`, `writable/logs`, `writable/session`, `writable/debugbar`.
2. Di cPanel **File Manager**, buat folder di LUAR `public_html`, misal: `/home/usercpanel/mbg-erp/`.
3. Upload zip ke folder tersebut → klik kanan → **Extract**.

**Cara B (FTP/FileZilla):** upload semua file ke `/home/usercpanel/mbg-erp/`.

---

## 3. Atur Document Root (pilih salah satu)

### Opsi A — Subdomain khusus (PALING AMAN, direkomendasikan)
1. cPanel → **Domains / Subdomains** → buat subdomain, misal: `dapur.domainanda.com`.
2. Set **Document Root** ke: `/home/usercpanel/mbg-erp/public`
3. Selesai — tidak perlu ubah `index.php`.

### Opsi B — Salin isi `public/` ke `public_html`
1. Salin **seluruh isi** folder `public/` (index.php, .htaccess, robots.txt, favicon.ico, uploads/) ke `public_html/`.
2. Edit `public_html/index.php`, cari baris `$pathsConfig`:
   ```php
   // Ubah path agar menunjuk ke folder proyek Anda:
   $pathsConfig = FCPATH . '../mbg-erp/app/Config/Paths.php';
   // Sesuaikan jika folder proyek di luar public_html:
   // contoh: /home/usercpanel/mbg-erp/app/Config/Paths.php
   ```

---

## 4. Konfigurasi `.env` di Server

Edit file `.env` di folder proyek (bukan di public_html):

```ini
CI_ENVIRONMENT = production

app.baseURL = 'https://dapur.domainanda.com/'
app.forceGlobalSecureRequests = true

database.default.hostname = localhost
database.default.database = usercpanel_mbgdb
database.default.username = usercpanel_mbguser
database.default.password = PASSWORD_DB_KUAT
database.default.DBDriver = MySQLi
database.default.port = 3306
database.default.charset = utf8mb4
database.default.DBCollat = utf8mb4_general_ci

# Salin nilai dari .env lokal (sudah digenerate saat setup)
encryption.key = hex2bin:a6af3656599eaf2174a64a55fbb529274947a423fdc32d7136ef83abeb839ddb

mbg.paguHppPerPorsi = 15000
```

> ⚠️ **PENTING:** Ganti `app.baseURL` dengan domain/subdomain asli Anda (pakai `https://`).
> Salin nilai `encryption.key` yang SAMA dari `.env` lokal Anda.

---

## 5. Set Permission Folder

Di File Manager / FTP, set permission **755** (atau **775** jika 755 tidak bisa menulis):

- `writable/` → **755/775** (rekursif ke semua subfolder: cache, logs, session, uploads, debugbar)
- `public/uploads/` → **755/775** (termasuk `public/uploads/nota` & `public/uploads/bast`)

---

## 6. Keamanan Ekstra

1. **Pastikan `.env` tidak bisa diakses web.** Karena `.env` ada di luar `public/` (Opsi A) atau di luar document root, secara default sudah aman. File `.htaccess` di root proyek & `app/` juga melindungi.
2. **Ganti password semua akun demo** setelah login pertama kali.
3. **Jangan upload** folder `.git`, `ci4-temp`, atau file `composer-setup.php`.
4. Aktifkan **SSL (AutoSSL / Let's Encrypt)** di cPanel agar `https://` berjalan.

---

## 7. Uji Produksi

1. Buka `https://dapur.domainanda.com/`
2. Login dengan akun demo:
   - Owner: `owner@mbg.id` / `password123`
   - Finance: `finance@mbg.id` / `password123`
3. Uji tiap modul:
   - ✅ Dashboard termuat & grafik HPP tampil
   - ✅ Catat Pengeluaran (`/pengeluaran/create`) + upload foto nota
   - ✅ Approval nota (login sebagai finance)
   - ✅ Catat Distribusi (`/distribusi/create`) + upload BAST
   - ✅ Top-up kas (`/dapur`)

---

## 8. Troubleshooting

| Masalah | Solusi |
| :--- | :--- |
| **Halaman putih / Error 500** | Buka `writable/logs/` di server, lihat file log terbaru. Pastikan `CI_ENVIRONMENT = production` agar error tidak tampil ke publik. |
| **404 di semua halaman selain home** | File `.htaccess` di `public/` tidak ter-upload, atau `mod_rewrite` Apache mati. Hubungi hosting aktifkan `mod_rewrite`. |
| **Error koneksi database** | Cek kembali `database.default.*` di `.env`. Pastikan user DB sudah di-add ke database dengan ALL PRIVILEGES. |
| **Upload foto gagal** | Permission `public/uploads/` belum 755/775. |
| **CSS/JS tidak load** | `app.baseURL` di `.env` salah (harus pakai https dan trailing slash `/`). |
| **"Whoops! We seem to have hit a snag"** | Ini halaman error production. Cek `writable/logs/` untuk detail error sebenarnya. |

---

## 9. Checklist Upload (jangan disertakan)

Hapus / jangan upload:
- ❌ `ci4-temp/`
- ❌ `.git/`
- ❌ `composer-setup.php`
- ❌ File zip hasil extract
- ❌ Isi `writable/cache`, `writable/logs`, `writable/session` (kosongkan saja, foldernya tetap dibuat)

Wajib disertakan:
- ✅ `app/`, `public/`, `vendor/`, `writable/`, `database/`
- ✅ `spark`, `composer.json`, `composer.lock`, `.env`, `preload.php`
