# Deployment: Laragon dan cPanel

## Lokal (Laragon)
1. Siapkan PHP 8.3, MySQL, Composer, Node.js/npm, dan ekstensi PHP yang disyaratkan Laravel 13.
2. Arahkan virtual host `siakad.test` ke direktori `public` aplikasi; aktifkan hosts/DNS lokal Laragon.
3. Buat database lokal; salin `.env.example` menjadi `.env` dan isi kredensial lokal saja.
4. Pasang dependency dan asset melalui prosedur proyek setelah implementasi dimulai; jalankan migrasi dan verifikasi URL `http://siakad.test`.
5. Jangan commit `.env`, database berisi data nyata, atau file unggahan privat.
6. Sebelum uji lokal, jalankan `php artisan siakad:check-readiness` untuk memeriksa PHP, konfigurasi dasar, akses runtime, koneksi database, migrasi, dan hasil build asset.
7. Untuk memeriksa syarat production/cPanel dari Laragon tanpa mengubah `APP_ENV`, jalankan `php artisan siakad:check-readiness --production`. Nilai lokal seperti URL HTTP dan cookie non-Secure memang akan ditandai; gunakan hasilnya sebagai daftar konfigurasi yang harus diperbaiki saat deploy.

## Shared hosting/cPanel
- Pastikan provider mendukung PHP 8.3 atau lebih baru, ekstensi `ctype`, `curl`, `dom`, `fileinfo`, `filter`, `hash`, `mbstring`, `openssl`, `pcre`, `pdo`, `pdo_mysql`, `session`, `tokenizer`, dan `xml`, MySQL, HTTPS, SSH/Terminal, cron, serta document root yang dapat diarahkan ke `public`. Daftar dasar mengikuti [persyaratan server Laravel 13](https://laravel.com/docs/13.x/deployment#server-requirements); `pdo_mysql` diperlukan oleh koneksi basis data proyek.
- Letakkan kode di luar `public_html` bila konfigurasi mengizinkan; arahkan domain/subdomain ke folder `public`. Jangan mengekspos `.env`, `vendor`, atau storage privat.
- Build dependency dan asset secara reproducible; jalankan migrasi terjadwal dengan backup dan rencana rollback.
- Pastikan `storage` dan `bootstrap/cache` dapat ditulis oleh proses PHP. Simpan `storage/app/private` di luar document root, jangan buat symlink publik untuknya, dan sertakan berkas tersebut dalam backup terenkripsi. Form PMB membatasi 5 berkas × 5 MB; pastikan `upload_max_filesize` sekurangnya 5 MB, `post_max_size` lebih besar dari 25 MB, dan `max_file_uploads` sekurangnya 5, lalu verifikasi limit aktual provider untuk PHP web.
- Atur permission minimum, `APP_DEBUG=false`, `APP_ENV=production`, kunci aplikasi, URL HTTPS, timezone, dan secret unik. Default production mengaktifkan Secure session cookie serta enkripsi sesi; jangan menonaktifkannya untuk domain HTTPS.
- Sebelum mengaktifkan pemulihan kata sandi, konfigurasi mailer SMTP kampus/provider melalui environment, uji pengiriman ke mailbox internal, dan pastikan antrean notifikasi dapat diproses bila queue digunakan. Jangan meninggalkan mailer production pada driver `log` atau `array`.
- Setelah konfigurasi dan build asset selesai, jalankan `php artisan siakad:check-readiness --production` melalui Terminal cPanel. Perintah memeriksa direktori runtime yang digunakan, termasuk log dan Blade serta cache/sesi berbasis file bila driver tersebut aktif, syarat production, dan menolak mailer `log`/`array` termasuk sebagai fallback bertingkat serta alamat pengirim contoh. Pemeriksaan ini tidak mengirim email atau membuktikan kredensial/provider dapat mengirim; uji pengiriman ke mailbox internal tetap wajib. Perintah tidak menampilkan nilai secret. Hasil lulus hanya pemeriksaan teknis dan tidak menggantikan UAT, uji restore, maupun validasi kontrak Feeder.
- Kredensial sandbox Neo Feeder hanya dimasukkan melalui environment (`NEO_FEEDER_URL`, `NEO_FEEDER_USERNAME`, `NEO_FEEDER_PASSWORD`); jangan commit nilai nyata. Gunakan HTTPS untuk host nonlokal/nonprivate dan selalu verifikasi TLS. Untuk sandbox lokal yang hanya menyediakan HTTP, `NEO_FEEDER_ALLOW_INSECURE_HTTP=true` dapat mengizinkan HTTP ke host publik hanya di non-production. HTTP tidak mengenkripsi kredensial; batasi ke jaringan terpercaya dan akun sandbox. Production selalu menolak HTTP.
- Cron memanggil scheduler Laravel sesuai dokumentasi versi yang dipakai. Jalankan antrean hanya bila mekanisme provider mendukungnya; jika tidak, gunakan job berjangka pendek dan batch.
- Uji batas waktu request, ukuran unggahan, memori, proses, kuota disk, dan backup provider sebelum produksi.

## Migrasi ke VPS
Pindahkan aplikasi, database, file privat, cron/worker, TLS, dan konfigurasi secara terencana. Uji restore ke VPS, sinkronisasi data delta, cutover DNS, lalu verifikasi; simpan jalur rollback. Hindari asumsi bahwa file lokal adalah satu-satunya backup.

## Kriteria rilis
Checklist staging mencakup migrasi, login/RBAC, HTTPS, cron, email, upload privat/unduh berizin, backup-restore database serta file, log, Feeder Bridge bila dipakai, dan rollback. Detail operasi pada [backup dan operasi](14-operasi-backup.md).

## Terbuka
Provider, domain produksi, batas paket, metode deploy, dan mekanisme antrean belum ditentukan.
