# Panduan Stabil dan Upload ke cPanel

Panduan ini untuk CMS FHISH berbasis Laravel 12. Jangan mengunggah `.env` lokal, kata sandi, atau `APP_KEY` ke tempat publik.

## Sebelum membeli atau memakai hosting

Pastikan paket hosting menyediakan:

- PHP 8.2 atau lebih baru untuk domain ini.
- Ekstensi PHP: `ctype`, `curl`, `dom`, `fileinfo`, `filter`, `hash`, `mbstring`, `openssl`, `pcre`, `pdo`, `pdo_mysql`, `session`, `tokenizer`, dan `xml`.
- MySQL/MariaDB, akses Terminal/SSH, dan Composer. Bila Composer tidak tersedia, minta penyedia hosting mengaktifkan SSH dan Composer.
- Domain dengan SSL/HTTPS.

Laravel harus disajikan dari folder `public`, bukan dari akar proyek. Simpan kode Laravel di luar folder yang bisa dibuka publik. [Dokumentasi deployment Laravel](https://laravel.com/docs/12.x/deployment)

## 1. Siapkan database di cPanel

1. Buka **MySQL® Databases**.
2. Buat database dan user database.
3. Hubungkan user ke database dan beri **ALL PRIVILEGES**.
4. Catat nama database, nama user, dan kata sandi. cPanel biasanya menambahkan awalan nama akun, misalnya `akun_fhishcms`.

## 2. Upload kode dengan aman

### Pilihan terbaik: document root domain diarahkan ke `public`

1. Buat folder proyek, misalnya `/home/NAMA_AKUN/fhish_app`.
2. Buat ZIP proyek dengan folder Laravel (`app`, `bootstrap`, `config`, `database`, `public`, `resources`, `routes`, `storage`) serta `artisan`, `composer.json`, dan `composer.lock`. Jangan masukkan `.env`; jika Composer dijalankan di hosting, `vendor` juga tidak perlu dimasukkan.
3. Upload ZIP melalui **File Manager**, ekstrak ke `fhish_app`, dan pastikan file `artisan` berada langsung di folder itu. Jangan letakkan `.env` atau kode aplikasi di `public_html`.
4. Di **Domains**, atur document root domain ke `/home/NAMA_AKUN/fhish_app/public` jika paket hosting mengizinkannya.

Di cPanel, document root menentukan direktori publik sebuah domain. [Cara domain cPanel menyajikan konten](https://docs.cpanel.net/knowledge-base/cpanel-product/how-domains-serve-content/)

### Jika document root domain utama tidak bisa diubah dari `public_html`

1. Tetap simpan aplikasi lengkap di `/home/NAMA_AKUN/fhish_app`, di luar `public_html`.
2. Salin **isi** folder `fhish_app/public` ke `public_html`, termasuk `.htaccess` dan folder `css`.
3. Edit `public_html/index.php`. Ubah kedua path Laravel agar menunjuk ke folder proyek:

   ```php
   require __DIR__.'/../fhish_app/vendor/autoload.php';
   (require_once __DIR__.'/../fhish_app/bootstrap/app.php')->handleRequest(Illuminate\Http\Request::capture());
   ```

   Pastikan blok maintenance di file itu juga memakai path `../fhish_app/storage/framework/maintenance.php`.

   Ganti `fhish_app` dengan nama folder sebenarnya. Jangan memindahkan `vendor`, `bootstrap`, `storage`, atau `.env` ke `public_html`.

## 3. Pasang dependensi PHP

Buka **Terminal** cPanel, lalu jalankan:

```bash
cd /home/NAMA_AKUN/fhish_app
composer install --no-dev --prefer-dist --optimize-autoloader
```

Jika Composer menyatakan ekstensi PHP hilang, pilih versi PHP dan aktifkan ekstensi tersebut di **MultiPHP Manager** atau **Select PHP Version**. Versi PHP per domain diatur lewat MultiPHP Manager bila tersedia. [Dokumentasi MultiPHP Manager](https://docs.cpanel.net/cpanel/software/multiphp-manager-for-cpanel/)

## 4. Atur `.env` untuk domain

Salin `.env.example` menjadi `.env`, lalu edit melalui File Manager. Jangan memakai nilai Laragon `root`/tanpa kata sandi di hosting.

Isi bagian berikut sesuai hosting:

```dotenv
APP_ENV=production
APP_DEBUG=false
APP_URL=https://domain-anda.id

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=udccjmjd_fhish_cms
DB_USERNAME=AWALAN_NAMA_USER
DB_PASSWORD=KATA_SANDI_DATABASE

SESSION_DRIVER=file
SESSION_COOKIE=fhish_prod_session
SESSION_SECURE_COOKIE=true

ADMIN_EMAIL=admin@domain-anda.id
ADMIN_PASSWORD=GANTI_DENGAN_KATA_SANDI_KUAT_SEMENTARA
```

Biarkan `SESSION_DOMAIN` kosong. Gunakan URL HTTPS yang sama persis dengan domain yang dipakai dan aktifkan **Force HTTPS Redirect** di pengaturan domain cPanel bila tersedia. Jangan mengaktifkan `APP_DEBUG` di hosting publik. Dokumentasi Laravel juga mengharuskan web server mengarah ke `public` dan direktori `storage` serta `bootstrap/cache` dapat ditulis oleh PHP. [Panduan deployment Laravel](https://laravel.com/docs/12.x/deployment)

## 5. Buat kunci dan tabel aplikasi

Jalankan perintah ini dari folder proyek:

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

Migrasi membuat tabel dan memasukkan konten awal FHISH yang sudah dirujuk ke sumber resmi. Seeder mengisi lima program studi awal dan membuat akun admin **hanya jika** `ADMIN_EMAIL` serta `ADMIN_PASSWORD` diisi. Seeder tidak mengganti kata sandi atau konten yang sudah ada.

Sesudah seeding pertama berhasil, hapus nilai kata sandi sementara dari `.env` (`ADMIN_PASSWORD=`). Akun tetap tersimpan di database. Jangan jalankan seeder untuk mengganti kata sandi admin.

Jika ingin mempertahankan konten dari Laragon, ekspor database `fhish_cms` lewat phpMyAdmin, impor file SQL ke database cPanel, lalu jalankan `php artisan migrate --force` **tanpa `--seed`**. Cadangkan database hosting sebelum impor atau migrasi.

### Impor file `fhish_cms_export.sql`

1. Di phpMyAdmin cPanel, klik database **`udccjmjd_fhish_cms`** di panel kiri. Pastikan nama database terlihat sebagai database yang sedang dipilih.
2. Buka tab **Import**, pilih file `fhish_cms_export.sql`, pastikan format **SQL**, lalu klik **Import/Go**.
3. Jika muncul `#1046 - No database selected`, kembali ke panel kiri dan pilih database terlebih dahulu. File ekspor tidak membuat database; cPanel yang membuatnya lewat menu **MySQL Databases**.
4. Upload kode Laravel terbaru, termasuk migrasi baru. Dari Terminal cPanel, jalankan `php artisan migrate --force` **tanpa `--seed`** agar akun dan konten hasil impor dipertahankan.

Untuk membuat ulang ekspor lokal setelah Laragon aktif, buka terminal pada `D:\fhish` dan jalankan:

```powershell
powershell -NoProfile -ExecutionPolicy Bypass -File .\export-database.ps1
```

File hasilnya `D:\fhish\fhish_cms_export.sql`. Jangan mengunggah berkas `.env` atau membagikan dump database secara publik karena dump berisi data akun dan konten.

## 6. Izin tulis dan optimasi produksi

Di Terminal cPanel:

```bash
chmod -R ug+rwX storage bootstrap/cache
php artisan optimize:clear
php artisan optimize
```

`optimize` membuat cache konfigurasi, route, event, dan Blade untuk deployment. [Perintah optimasi Laravel](https://laravel.com/docs/12.x/deployment#optimization)

## 7. Periksa situs

- Buka `https://domain-anda.id/`.
- Buka `https://domain-anda.id/admin/login`.
- Jika muncul 500, periksa `storage/logs/laravel.log`; pastikan `APP_DEBUG=false` tetap dipakai untuk publik.
- Pastikan `public_html` hanya berisi berkas publik, bukan `.env`, `vendor`, atau folder aplikasi.

## Pembaruan berikutnya

Cadangkan database, unggah kode baru, lalu dari Terminal:

```bash
cd /home/NAMA_AKUN/fhish_app
composer install --no-dev --prefer-dist --optimize-autoloader
php artisan migrate --force
php artisan optimize:clear
php artisan optimize
```

Jangan menjalankan `key:generate` lagi pada situs yang sudah aktif. Menukar `APP_KEY` dapat membuat cookie dan data terenkripsi lama tidak terbaca.
