# Panduan Persiapan Deployment ke Production (Production Readiness Checklist)

Dokumen ini berisi panduan dan checklist penting sebelum mengunggah aplikasi BTM Koperasi ke server *production*. Pastikan semua poin di bawah ini telah diselesaikan untuk memastikan keamanan dan stabilitas aplikasi.

## 🚨 1. Keamanan & Konfigurasi Proxy (WAJIB DIBERSIHKAN)

Saat masa *development* dengan Ngrok, kita menambahkan *Trust All Proxies* agar aplikasi bisa diakses via HTTPS Ngrok dengan benar tanpa error Mixed Content. Ini harus diatur ulang saat naik ke *production*.

- [ ] **Buka file `bootstrap/app.php`**
- [ ] Cari baris: `$middleware->trustProxies(at: '*');`
- [ ] **GANTI / HAPUS** baris tersebut:
  - Jika server *production* Anda **TIDAK DI BELAKANG** Reverse Proxy / Load Balancer (misal: VPS cPanel biasa, direct access), **HAPUS** baris tersebut.
  - Jika menggunakan Load Balancer AWS / Nginx Proxy / Cloudflare, ganti `*` dengan IP Proxy yang spesifik. Contoh untuk AWS ALB:
    ```php
    $middleware->trustProxies(headers: \Illuminate\Http\Request::HEADER_X_FORWARDED_AWS_ELB);
    ```

## 🔐 2. Konfigurasi Environment (`.env`)

Pastikan kredensial di `.env` telah disesuaikan dengan infrastruktur *production*.

- [ ] Ubah `APP_ENV=production`
- [ ] Ubah `APP_DEBUG=false` (Sangat penting! Jika `true`, error akan menampilkan konfigurasi sensitif server).
- [ ] Ubah `APP_URL` ke domain asli Anda (contoh: `https://app.btmkoperasi.com`).
- [ ] Pastikan `DB_PASSWORD` dan `DB_USERNAME` benar dan bukan akun *root* utama jika memungkinkan.
- [ ] Gunakan `QUEUE_CONNECTION=redis` atau `database` jika ada fitur yang membutuhkan antrean (seperti kirim email blast), jangan gunakan `sync`.

## 📦 3. Optimasi Laravel (Caching)

Untuk mendapatkan performa maksimal, Laravel harus me- *cache* file konfigurasinya saat di *production*. Jalankan perintah berikut di terminal server:

- [ ] `php artisan config:cache` (Cache konfigurasi `.env` dan `config/`)
- [ ] `php artisan route:cache` (Cache *routing*)
- [ ] `php artisan view:cache`  (Cache *blade templates*)
- [ ] `php artisan event:cache` (Cache *events/listeners*)

> *Catatan: Setiap kali Anda mengubah `.env` di production, Anda WAJIB menjalankan `php artisan config:clear` lalu `php artisan config:cache` ulang.*

## 🚀 4. Build Frontend Aset (Vite)

Karena aplikasi menggunakan React + Inertia, pastikan me- *build* versi *production* dari aplikasi sebelum atau saat *deployment*.

- [ ] Jalankan `npm ci` atau `npm install`
- [ ] Jalankan `npm run build`
- [ ] Pastikan folder `public/build` ter- *generate* tanpa error. Folder ini yang disajikan oleh web server.

## 🗄️ 5. Database & Audit Trail

Aplikasi koperasi menyimpan data finansial, jadikan poin ini perhatian utama:

- [ ] Pastikan ekstensi PHP `pdo_mysql` (atau database terkait) aktif.
- [ ] Jalankan *migration*: `php artisan migrate --force` (Parameter `--force` wajib di *production*).
- [ ] Pastikan fitur *Soft Deletes* (dari *compliance* OJK) tidak pernah di-*force delete* oleh skrip pembersihan otomatis tanpa sepengetahuan auditor.
- [ ] Buat *cron job* server (`crontab -e`) untuk memicu *task scheduler* Laravel setiap menit, yang berguna untuk penanganan denda/overdue harian otomatis:
  ```text
  * * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
  ```

## 🔒 6. Keamanan Server (Nginx / Apache)

- [ ] Wajib gunakan SSL/HTTPS (bisa menggunakan *Let's Encrypt*).
- [ ] Blokir akses langsung ke file sensitif seperti `.env`, `.git`, atau `composer.json`.
- [ ] Pastikan *document root* web server secara *strict* menunjuk ke folder `public/` milik Laravel, **bukan** root folder project.
