# Panduan Deployment: GitHub → DigitalOcean (webg.my)

Panduan ini menerangkan cara sambungkan repo GitHub ini dengan droplet
DigitalOcean supaya **setiap merge ke `main` akan auto-deploy** ke
https://webg.my — dan macam mana guna Claude Code untuk auto merge.

## Gambaran keseluruhan

```
Anda / Claude Code buat PR → merge ke main → GitHub Actions trigger
    → SSH masuk droplet → git pull + build + restart → live di webg.my
```

---

## Langkah 1: Point DNS ke droplet

Di registrar domain anda (tempat beli webg.my), tambah rekod DNS:

| Jenis | Nama | Nilai              |
|-------|------|--------------------|
| A     | @    | `<IP droplet anda>` |
| A     | www  | `<IP droplet anda>` |

DNS mungkin ambil masa beberapa minit hingga sejam untuk propagate.
Semak dengan: `dig webg.my +short`

## Langkah 2: Setup droplet (sekali sahaja)

SSH masuk droplet dan jalankan skrip setup:

```bash
ssh root@<IP-droplet>
curl -fsSL https://raw.githubusercontent.com/mhbakar-cloude/WebG/main/deploy/setup-server.sh -o setup-server.sh
bash setup-server.sh
```

Skrip ini akan:
1. Install nginx, git, certbot, dan setup firewall
2. Jana **deploy key** — anda perlu tambah public key yang dipaparkan ke
   GitHub: **repo Settings → Deploy keys → Add deploy key** (read-only)
3. Clone repo ke `/var/www/webg`
4. Setup nginx untuk webg.my
5. Pasang SSL percuma (Let's Encrypt) — auto-renew

## Langkah 3: Tambah GitHub Secrets

Supaya GitHub Actions boleh SSH masuk droplet, pergi ke:
**repo Settings → Secrets and variables → Actions → New repository secret**

Tambah 3 secrets ini:

| Secret       | Nilai                                                        |
|--------------|--------------------------------------------------------------|
| `DO_HOST`    | IP droplet anda (contoh: `152.42.x.x`)                       |
| `DO_USER`    | `root` (atau user deploy anda)                               |
| `DO_SSH_KEY` | Kandungan **private key** SSH yang boleh masuk droplet       |

> **Tip untuk `DO_SSH_KEY`:** Paling selamat, jana sepasang key baru khas
> untuk GitHub Actions di komputer anda:
> ```bash
> ssh-keygen -t ed25519 -N "" -f gh-actions-key
> # Masukkan public key ke server:
> ssh root@<IP-droplet> "cat >> ~/.ssh/authorized_keys" < gh-actions-key.pub
> # Kandungan fail 'gh-actions-key' (private) → letak dalam secret DO_SSH_KEY
> cat gh-actions-key
> ```

## Langkah 4: Uji deployment

Selepas secrets ditambah, uji dengan trigger manual:

1. Pergi ke tab **Actions** di GitHub
2. Pilih workflow **"Deploy to DigitalOcean"**
3. Klik **Run workflow**

Atau merge apa-apa perubahan ke `main` — deployment akan jalan sendiri.

---

## Auto merge & deploy dengan Claude Code

Cara paling mudah guna Claude Code untuk keseluruhan flow:

### Dari sesi Claude Code (web/app/CLI)

1. Minta Claude buat perubahan — Claude akan push branch & buka PR
2. Minta Claude **"merge PR ni"** — Claude boleh merge terus guna GitHub MCP
3. Merge ke `main` → GitHub Actions auto-deploy ke webg.my

### Auto-merge bila CI lulus (pilihan)

Aktifkan auto-merge di GitHub supaya PR merge sendiri bila semua check lulus:

1. **Repo Settings → General → Pull Requests** → tick ✅ **Allow auto-merge**
2. Bila buka PR, minta Claude "enable auto-merge untuk PR ni", atau klik
   butang **Enable auto-merge** di halaman PR

Dengan ini, flow penuh jadi: *minta Claude buat perubahan → PR auto-merge
bila check lulus → auto-deploy ke webg.my* — tanpa sentuh server langsung.

### Minta Claude jaga PR

Dalam sesi Claude Code, anda juga boleh cakap:
> "Tolong watch PR ni, autofix kalau CI fail, dan merge bila green"

Claude akan subscribe pada aktiviti PR dan uruskan sampai merge.

---

## Sesuaikan dengan jenis app anda

Setup default melayan projek ini sebagai **static site** (fail dalam
`public/`). Jika app anda berlainan:

- **Node.js (Express/Next.js):** Install PM2 di server
  (`npm i -g pm2`), start app dengan `pm2 start ... --name webg`,
  kemudian buka `deploy/nginx/webg.my.conf` dan tukar ke blok
  **PILIHAN B** (reverse proxy ke port 3000). Skrip `deploy.sh` sudah
  auto-reload PM2 setiap deploy.
- **PHP:** Install `php-fpm` + `composer`, dan tambah blok PHP dalam
  config nginx.
- **Python (Flask/Django):** Guna gunicorn + systemd service, dan
  uncomment baris `systemctl restart webg` dalam `deploy/deploy.sh`.

## Troubleshooting

| Masalah                          | Penyelesaian                                              |
|----------------------------------|-----------------------------------------------------------|
| Actions gagal "connection refused" | Semak `DO_HOST`/`DO_SSH_PORT`, pastikan firewall benarkan SSH |
| Actions gagal "permission denied"  | `DO_SSH_KEY` mesti private key penuh (termasuk baris BEGIN/END) |
| Certbot gagal                      | DNS belum propagate — tunggu & jalankan semula certbot    |
| Website tak update selepas deploy  | SSH masuk & semak log: `cd /var/www/webg && git log -1`   |
