# Deploy PADEBERKINEM lewat Git (clone + pull terus-menerus)

Backend = **Laravel** (`api/`).  
Frontend = **React SPA Vite** — build di laptop, upload `dist/` (lihat [DEPLOY_FRONTEND_SPA.md](./DEPLOY_FRONTEND_SPA.md)).

Di server **tidak perlu Node.js** untuk menjalankan frontend.

Repo: `https://github.com/fauzi041169/PADEBERKINEM.git`  
Branch: `main`

---

## Alur singkat

```
Laptop  →  git push origin main  (termasuk frontend/dist hasil npm run build)
Server  →  git pull origin main
         →  SKIP_FRONTEND=1 bash scripts/deploy/git-update.sh   # update Laravel
cPanel  →  Document Root frontend → .../PADEBERKINEM/frontend/dist
         →  Document Root API      → .../PADEBERKINEM/api/public
```

Contoh frontend: `https://dudungabdulqodir.mcbdl.com` → `frontend/dist`  
Contoh API: `https://padeberkinem.ramaboedi.com` → `api/public`
---

## 1) Persiapan GitHub (repo private)

Di server butuh akses clone. Pilih salah satu:

### A. Personal Access Token (paling cepat)

1. GitHub → Settings → Developer settings → Personal access tokens  
2. Buat token (Classic: centang `repo`, atau Fine-grained: Contents Read)
3. Di server, clone dengan:

```bash
cd ~/public_html
git clone -b main https://USERNAME:TOKEN@github.com/fauzi041169/PADEBERKINEM.git PADEBERKINEM
```

Setelah clone, hapus token dari remote URL:

```bash
cd ~/public_html/PADEBERKINEM
git remote set-url origin https://github.com/fauzi041169/PADEBERKINEM.git
```

Simpan kredensial dengan credential helper, atau pakai **Deploy Key** (lebih aman).

### B. Deploy Key (disarankan jangka panjang)

```bash
ssh-keygen -t ed25519 -C "padeberkinem-server" -f ~/.ssh/padeberkinem_deploy -N ""
cat ~/.ssh/padeberkinem_deploy.pub
```

Tambahkan public key di GitHub → repo → Settings → Deploy keys (Read-only).

```bash
# ~/.ssh/config
Host github.com-pade
  HostName github.com
  User git
  IdentityFile ~/.ssh/padeberkinem_deploy
  IdentitiesOnly yes
```

```bash
cd ~/public_html
git clone -b main git@github.com-pade:fauzi041169/PADEBERKINEM.git PADEBERKINEM
```

---

## 2) Setup pertama di server

```bash
cd ~/public_html/PADEBERKINEM
bash scripts/deploy/git-clone-setup.sh \
  https://mcbdl.site \
  https://padeberkinem.ramaboedi.com \
  127.0.0.1 \
  rama3823_padeberkinem \
  rama3823_padeberkinem \
  'PASSWORD_DB_ANDA'
```

Script ini akan:
- `git pull` branch `main`
- menulis `api/.env` dan `frontend/.env.local` (**tidak masuk Git**)
- `composer install` + `key:generate` + seed admin
- `npm install` + `npm run build` frontend
- menyalin `server.js` production

### cPanel setelah setup

| Item | Nilai |
|------|--------|
| Domain API `padeberkinem.ramaboedi.com` | Document root → `.../PADEBERKINEM/api/public` (**PHP**, bukan Node) |
| Node.js App frontend | Application root → `.../PADEBERKINEM/frontend`, startup → `server.js` |
| Backend Node lama | **Hapus/stop** (folder `backend/` deprecated) |

Env frontend (sudah ditulis script, atau di panel Node.js App):

```env
BACKEND_INTERNAL_URL=https://padeberkinem.ramaboedi.com/api
```

Tes:

```bash
curl https://padeberkinem.ramaboedi.com/api/health
```

---

## 3) Update terus-menerus

Di laptop (setelah ubah kode):

```bash
git add -A
git commit -m "pesan perubahan"
git push origin main
```

Di server:

```bash
cd ~/public_html/PADEBERKINEM
bash scripts/deploy/git-update.sh
```

Lalu pastikan Document Root frontend tetap ke `frontend/dist` (tanpa Node.js App).

Hanya update API (tanpa rebuild frontend di server):

```bash
SKIP_FRONTEND=1 bash scripts/deploy/git-update.sh
```

`frontend/dist/` sudah ada di repo — setelah `git pull` tampilan ikut terbarui.

---

## 4) File yang TIDAK di-commit (aman di server)

| File | Keterangan |
|------|------------|
| `api/.env` | DB, JWT, APP_KEY |
| `frontend/.env` / `.env.local` | VITE_* / domain (lokal saja) |
| `api/storage/*` | upload & cache |
| `frontend/node_modules/` | npm |
| `api/vendor/` | Composer (dihasilkan `composer install`) |

`frontend/dist/` **ikut di-commit** agar shared hosting cukup `git pull`.

Jangan pernah `git add` file `.env`.

---

## 5) Jika folder lama sudah ada (bukan git)

Backup dulu, lalu clone baru:

```bash
cd ~/public_html
mv PADEBERKINEM PADEBERKINEM-backup-$(date +%Y%m%d)
git clone -b main https://github.com/fauzi041169/PADEBERKINEM.git PADEBERKINEM

# Salin env lama jika ada
cp PADEBERKINEM-backup-*/api/.env PADEBERKINEM/api/.env 2>/dev/null || true
cp PADEBERKINEM-backup-*/frontend/.env.local PADEBERKINEM/frontend/.env.local 2>/dev/null || true

cd PADEBERKINEM
bash scripts/deploy/git-update.sh
```

Atau inisialisasi git di folder existing:

```bash
cd ~/public_html/PADEBERKINEM
git init
git remote add origin https://github.com/fauzi041169/PADEBERKINEM.git
git fetch origin
git checkout -B main origin/main
bash scripts/deploy/git-update.sh
```

---

## 6) Build frontend gagal di server (RAM)

Kalau `npm run build` **Aborted** / OOM:

1. Build di laptop / CI, atau pakai ZIP build (`scripts/build-upload-zip.ps1`)
2. Di server tetap `git pull` untuk `api/` (Laravel ringan)
3. Frontend: upload hasil `.next` + `node_modules` dari build lokal, **atau**

```bash
SKIP_FRONTEND=1 bash scripts/deploy/git-update.sh
```

lalu sync folder `frontend/.next` dari mesin yang berhasil build.

---

## 7) Checklist harian update

1. `git push` dari laptop  
2. SSH: `bash scripts/deploy/git-update.sh`  
3. Restart Node.js App frontend  
4. Cek `/api/health` + login web  

Panduan arsitektur Laravel: [MIGRASI-LARAVEL.md](./MIGRASI-LARAVEL.md)
