# Deploy ke Shared Hosting (cPanel)

Aplikasi sudah berhasil diuji berjalan di Docker (Linux + Apache PHP 8.2 + MySQL) dan
login merespons 200. Berikut langkah upload ke shared hosting.

## Prasyarat hosting
- PHP **8.2+** dengan ekstensi: `pdo_mysql, mbstring, gd, zip, intl, bcmath, exif, curl`
- MySQL/MariaDB (buat database + user baru di cPanel > MySQL Databases)
- Composer (untuk install vendor) — atau pakai build artifact
- Node 20 (hanya saat build asset, bisa dilakukan di mesin lokal lalu upload hasilnya)

## 1. Build asset (jika tidak punya Node di hosting)
Jalankan di lokal:
```
npm install
npm run build
```
Hasilnya di `public/build` ikut di-upload. (Jangan upload `node_modules`.)

## 2. Siapkan file .env produksi
Ubah nilai ini dari `.env.docker`:
```
APP_ENV=production
APP_DEBUG=false
APP_URL=https://domain-anda.com        # sesuaikan
DB_HOST=localhost                        # atau host dari cPanel
DB_PORT=3306
DB_DATABASE=nama_database
DB_USERNAME=nama_user
DB_PASSWORD=password_kamu
MAIL_MAILER=smtp                        # isi sesuai SMTP hosting
MAIL_HOST=mail.domain-anda.com
MAIL_PORT=465
MAIL_USERNAME=...                       # atau ssl
MAIL_PASSWORD=...
MAIL_FROM_ADDRESS=...@domain-anda.com
MAIL_FROM_NAME="${APP_NAME}"
```
Simpan sebagai `.env`. **JANGAN pernah upload `.env` ke repo/zip publik** (sudah di-gitignore).

## 3. Upload file ke hosting
Upload isi folder proyek (tanpa `node_modules`, `.git`, `docker/` bila tidak perlu) ke
`public_html` (untuk aplikasi di root domain) atau subdirektori (`public_html/aplikasi`).

> Jika aplikasi bukan di root document root, document root Laravel harus diarahkan ke
> folder **`public`** (mis. via `.htaccess` rewrite atau subdomain → folder public).

## 4. Install dependency PHP
```
composer install --no-dev --prefer-dist --optimize-autoloader
```

## 5. Link storage publik
```
php artisan storage:link
```
(Pastikan folder `storage/app/public` isi logo, dst. sudah di-upload atau dipindahkan.)

## 6. Migrasi database
```
php artisan migrate --force
```
Sesuaikan `DB_*` di `.env` agar menunjuk database hosting. Migrasi dibuat **idempotent**
(aman dijalankan di DB kosong).

## 7. Cache produksi
```
php artisan config:cache
php artisan route:cache
php artisan view:cache
```

## 8. Izin folder
Pastikan `storage/` dan `bootstrap/cache/` writable oleh user PHP (biasanya
`chmod -R 755` di cPanel, atau dari File Manager).

## Catatan penting
- **Document root** harus folder `public` (Apache `.htaccess` sudah disediakan di
  `public/.htaccess`). Kalau hosting pasang Laravel di root, gunakan subdomain yang
  dokumennya `public` atau `.htaccess` rewrite dari `public_html` ke `public/`.
- **Logo/favicon**: tampil otomatis dari `storage/app/public/sekolah` (pastikan
  file logo ikut ter-upload) dan `public/favicon.ico` (sudah diganti logo sekolah).
- `SESSION_DRIVER`, `CACHE_STORE`, `QUEUE_CONNECTION` = `database` — tabel dibuat
  otomatis oleh migrasi, tidak butuh Redis.
- Untuk perubahan kode berikutnya, cukup upload ulang file yang berubah lalu
  `php artisan config:cache && route:cache && view:cache` dan `optimize`.

## Perintah cepat (SSH/cPanel Terminal)
```
cd ~/public_html
composer install --no-dev --optimize-autoloader --no-interaction
php artisan storage:link
php artisan migrate --force
php artisan config:cache
php artisan route:cache
php artisan view:cache
```
