# Deployment ke AnyMHost

Proyek ini adalah CodeIgniter 4 dan memerlukan PHP 8.2 atau lebih baru, ekstensi `intl`, `mbstring`, `mysqli`, `xml`, `zip`, `gd`, dan `curl`.

## Struktur yang aman

Atur **Document Root** subdomain `dmmanufakturing.mdcode.my.id` ke direktori `public` proyek. Susunan yang direkomendasikan di File Manager adalah:

```
/home/USERNAME/pakdema/             # app, vendor, writable, .env, spark
/home/USERNAME/pakdema/public/      # document root subdomain
```

Jangan arahkan document root ke folder proyek utama, karena file `.env`, `app`, `vendor`, dan `writable` tidak boleh dapat diakses lewat web.

Jika panel tidak mengizinkan document root kustom, simpan proyek di luar `public_html`, lalu salin **isi** folder `public` ke document root subdomain dan sesuaikan dua baris path pada `index.php` sesuai lokasi folder proyek. Pilihan document root kustom tetap yang paling aman dan tidak memerlukan perubahan kode.

## Konfigurasi produksi

File `.env` lokal sudah disetel untuk produksi dan URL subdomain. Di server, buat/upload `.env` pada root proyek (sejajar dengan `app`), lalu isi kredensial database dari panel hosting. File ini diabaikan Git dan jangan di-commit.

Pastikan nilai berikut ada dan tidak diawali `#`:

```ini
CI_ENVIRONMENT = production
app.baseURL = 'https://dmmanufakturing.mdcode.my.id/'
app.forceGlobalSecureRequests = true
database.default.hostname = localhost
database.default.DBDriver = MySQLi
database.default.port = 3306
```

Tambahkan kunci enkripsi unik di server sebelum situs menerima trafik:

```bash
php spark key:generate
```

Jalankan perintah dari root proyek. Jangan membagikan atau menyimpan file `.env` di repositori.

## Langkah rilis

1. Buat database MySQL dan pengguna melalui panel AnyMHost, lalu impor file SQL aplikasi bila tersedia.
2. Upload seluruh proyek termasuk `vendor` (atau jalankan `composer install --no-dev --optimize-autoloader` bila SSH/Composer tersedia).
3. Buat subdomain dan set document root ke `.../pakdema/public`.
4. Pastikan folder `writable/` beserta `writable/cache`, `writable/logs`, `writable/session`, dan `writable/uploads` dapat ditulis oleh proses PHP. Umumnya permission folder `755` atau `775`, tergantung konfigurasi hosting.
5. Pasang SSL untuk subdomain, baru aktifkan/pertahankan HTTPS paksa.
6. Jalankan migrasi hanya setelah backup database: `php spark migrate --all`.
7. Buka halaman login, unggah satu berkas uji, dan periksa `writable/logs/` bila ada error.

## Catatan keamanan

- Aturan Apache di `public/.htaccess` sudah memakai rewrite CodeIgniter dan tidak lagi mengarahkan HTTPS ke HTTP.
- Error database tidak ditampilkan ketika `CI_ENVIRONMENT = production`.
- Jangan mempercayai header proxy dari semua alamat IP. Konfigurasi proxy aplikasi dibiarkan kosong; isi hanya rentang IP proxy resmi bila nanti memakai Cloudflare atau reverse proxy.
