# Deploy Laravel ke Hosting

Project ini adalah Laravel dengan Vite. Requirement minimum:

- PHP 8.3 atau lebih baru
- Extension PHP umum Laravel: `ctype`, `curl`, `dom`, `fileinfo`, `filter`, `hash`, `mbstring`, `openssl`, `pdo`, `session`, `tokenizer`, `xml`
- Composer jika hosting menyediakan SSH
- Node.js hanya dibutuhkan saat build asset; asset production sudah ada di `public/build`

## Opsi 1: Shared Hosting / cPanel

Pakai opsi ini kalau hosting hanya menyediakan File Manager dan tidak nyaman pakai terminal.

1. Upload isi project ke folder di luar `public_html`, misalnya:

   ```text
   /home/USER/gmcomp-service-system
   ```

2. Arahkan document root domain/subdomain ke:

   ```text
   /home/USER/gmcomp-service-system/public
   ```

   Jika hosting tidak bisa mengubah document root, buat subdomain baru yang document root-nya bisa diarahkan ke folder `public`.

3. Buat file `.env` di root project hosting. Contoh untuk SQLite:

   ```dotenv
   APP_NAME="GMComp Service System"
   APP_ENV=production
   APP_KEY=base64:ISI_DENGAN_APP_KEY
   APP_DEBUG=false
   APP_URL=https://domain-anda.com

   DB_CONNECTION=sqlite
   DB_DATABASE=/home/USER/gmcomp-service-system/database/database.sqlite

   SESSION_DRIVER=database
   CACHE_STORE=database
   QUEUE_CONNECTION=database
   FILESYSTEM_DISK=local

   MAIL_MAILER=log
   ```

   Ganti `/home/USER/...` dan `https://domain-anda.com` sesuai hosting.

4. Pastikan permission folder berikut bisa ditulis PHP:

   ```text
   storage
   bootstrap/cache
   database/database.sqlite
   ```

5. Kalau hosting punya Terminal/SSH, jalankan:

   ```bash
   php artisan key:generate --force
   php artisan migrate --force
   php artisan storage:link
   php artisan optimize:clear
   php artisan optimize
   ```

   Kalau tidak ada terminal, gunakan `APP_KEY` dari `.env` lokal atau generate key di komputer lokal lalu salin ke `.env` hosting.

## Opsi 2: Hosting dengan SSH / VPS

1. Upload atau clone repo ke server.

2. Install dependency production:

   ```bash
   composer install --no-dev --optimize-autoloader
   npm ci
   npm run build
   ```

3. Buat `.env` production, lalu jalankan:

   ```bash
   php artisan key:generate --force
   php artisan migrate --force
   php artisan storage:link
   php artisan optimize
   ```

4. Set web server agar document root mengarah ke folder `public`.

## Catatan Database

Project saat ini default memakai SQLite. Untuk shared hosting kecil, SQLite cukup praktis. Untuk hosting produksi yang ramai, pindahkan ke MySQL:

```dotenv
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=nama_database
DB_USERNAME=username_database
DB_PASSWORD=password_database
```

Setelah itu jalankan:

```bash
php artisan migrate --force
```

## File yang Tidak Perlu Diupload

Jangan upload:

- `.git`
- `node_modules`
- `tests`
- file log di `storage/logs`

Folder `vendor` boleh ikut diupload kalau hosting tidak menyediakan Composer.
