# Deploy ke Rumahweb (Shared Hosting)

Panduan singkat agar project Undangan Digital jalan di hosting Rumahweb.

## Persyaratan

- PHP **8.3** (wajib — atur di cPanel → MultiPHP Manager)
- Ekstensi PHP: `pdo_mysql`, `mbstring`, `openssl`, `tokenizer`, `xml`, `ctype`, `json`, `bcmath`, `fileinfo`, `gd` (atau imagick), `zip`
- Database **MySQL**
- `mod_rewrite` aktif (biasanya sudah)

## Struktur upload yang disarankan

### Opsi A (paling bersih) — document root ke `/public`

1. Upload seluruh project ke luar atau di dalam hosting, contoh:
   ```
   /home/username/undangan/     ← full Laravel
   ```
2. Di cPanel → Domains / Document Root, arahkan domain ke:
   ```
   /home/username/undangan/public
   ```

### Opsi B — project di dalam `public_html`

```
public_html/
  app/
  bootstrap/
  config/
  database/
  public/          ← berisi index.php, css, dll
  resources/
  routes/
  storage/
  vendor/
  .env
  artisan
  composer.json
  htaccess root   ← copy dari htaccess-root-rumahweb.txt jadi .htaccess
```

1. Isi `public_html` dengan file project
2. Copy `htaccess-root-rumahweb.txt` → `public_html/.htaccess` (agar root mengarah ke `public/`)
3. Pastikan `public/.htaccess` tetap ada

## Langkah deploy

### 1) Siapkan di PC (sebelum upload)

Di folder project:

```powershell
composer install --no-dev --optimize-autoloader
```

Opsional buat zip (tanpa `.env`, `.git`, `node_modules`):

```powershell
powershell -ExecutionPolicy Bypass -File scripts/prepare-deploy.ps1
```

Hasil: `dist/undangan-rumahweb.zip`

### 2) Buat database di cPanel

1. MySQL Databases → buat database + user + password
2. Assign user ke database (ALL PRIVILEGES)
3. Catat: nama DB, user, password (biasanya berawalan username cPanel)

### 3) Upload file

- Upload zip via File Manager / FTP, lalu extract
- Jangan upload folder `.env` lokal (isi password development)

### 4) Buat file `.env` production

1. Copy `.env.rumahweb.example` → `.env`
2. Isi:
   - `APP_URL=https://domainanda.com`
   - `APP_KEY=` (generate di langkah 5)
   - `DB_*` sesuai database cPanel
   - `PAYMENT_*` rekening transfer Anda
3. Pastikan:
   - `APP_ENV=production`
   - `APP_DEBUG=false`

### 5) Jalankan perintah artisan (SSH / Terminal cPanel)

Jika ada SSH / Terminal:

```bash
cd ~/undangan   # atau path project Anda
php artisan key:generate
php artisan migrate --force
php artisan db:seed --force
php artisan storage:link
php artisan config:cache
php artisan route:cache
php artisan view:cache
```

Jika **tidak ada SSH**:

1. Generate `APP_KEY` di PC: `php artisan key:generate --show` lalu tempel ke `.env` di server
2. Import database: export dari local (MySQL) atau jalankan migrate lewat temporary route (kurang disarankan)
3. Buat symlink storage manual:
   - Target: `storage/app/public`
   - Link: `public/storage`
   - Atau di File Manager: buat folder `public/storage` dan pastikan upload masuk ke `storage/app/public` (tanpa symlink, perlu penyesuaian — symlink lebih baik)
4. Minta Rumahweb bantu `storage:link` via ticket jika perlu

### 6) Permission folder

Pastikan writable (biasanya 755/775):

- `storage/`
- `storage/app/`
- `storage/framework/`
- `storage/logs/`
- `bootstrap/cache/`

### 7) Seed akun awal

Setelah `db:seed`:

| Peran | Email | Password |
|-------|-------|----------|
| Admin | `admin@undangan.test` | `password` |
| Klien demo | `klien@undangan.test` | `password` |

**Segera ganti password** setelah login pertama.

### 8) Cek setelah online

- `https://domainanda.com` → beranda
- `https://domainanda.com/paket` → katalog
- `https://domainanda.com/login` → login admin
- Upload foto undangan → pastikan muncul (storage link)
- Admin → Pengaturan:
  - nomor WhatsApp
  - akun Instagram / TikTok / Facebook (+ aktifkan tampilan)
  - favicon / logo browser
  - teks portal jika ingin diganti

## Checklist production

- [ ] PHP 8.3 aktif di MultiPHP Manager
- [ ] `APP_DEBUG=false`
- [ ] `APP_URL` memakai `https://` (sama dengan domain yang dibuka: www / non-www)
- [ ] Database MySQL terhubung + `migrate --seed` sukses
- [ ] `php artisan storage:link` sukses
- [ ] Password admin diganti
- [ ] Rekening `PAYMENT_*` diganti data asli
- [ ] WhatsApp & sosial media diisi di Pengaturan
- [ ] SSL/HTTPS aktif di cPanel

## Masalah umum

| Gejala | Solusi |
|--------|--------|
| 500 Internal Server Error | Cek `storage/logs/laravel.log`, permission `storage` & `bootstrap/cache`, PHP 8.3 |
| Halaman putih | `APP_DEBUG` sementara true untuk lihat error, lalu matikan lagi |
| CSS/asset 404 | Pastikan document root ke folder `public` |
| Upload foto tidak muncul | Jalankan `storage:link`, pastikan `FILESYSTEM_DISK=public` |
| CSRF / session hilang | `APP_URL` harus sama dengan domain yang dibuka (www vs non-www) |
| Database connection refused | `DB_HOST` biasanya `localhost` (bukan 127.0.0.1 di sebagian hosting) |

## Catatan Midtrans

Pembayaran otomatis Midtrans belum diaktifkan. Saat ini alur: transfer manual → upload bukti → admin konfirmasi.
