# Setup Instance

Ada dua cara menjalankan SumoRouter. Untuk kebanyakan orang, pakai **One-Click Deploy di Sumopod**.

## One-Click Deploy di Sumopod

<a href="https://sumopod.com/dashboard/services/create/sumorouter" target="_blank" rel="noopener">**→ Deploy SumoRouter di Sumopod**</a>

1. Buka link di atas (login ke Sumopod jika diminta).
2. Pilih paket service, lalu klik **Deploy**. Server, PostgreSQL, dan Redis disiapkan otomatis.
3. Setelah service berjalan, pasang domain kamu (mis. `ai.brandkamu.id`) dan buka URL-nya.
4. Lanjutkan ke [Setup pertama](#setup-pertama) di bawah.

Karena model (Sumopod AI) dan pembayaran QRIS (Sumopod Managed Payment) juga dari Sumopod, semua
urusan ada di satu akun.

## Self-host dengan Docker

SumoRouter terdiri dari backend Rust, dashboard React, PostgreSQL, dan Redis. Semua dikemas dalam
Docker image di `ghcr.io/ariaseta/sumorouter`.

```bash
cp .env.example .env
# isi: POSTGRES_PASSWORD, REDIS_PASSWORD, JWT_SECRET, SALT_KEY (openssl rand -hex 32), PUBLIC_URL
docker compose -f docker-compose.ghcr.single.yml pull
docker compose -f docker-compose.ghcr.single.yml up -d
```

Dashboard dan API ada di `http://localhost:3000` (`APP_PORT`). Update = jalankan dua perintah yang
sama lagi; pin versi dengan `SUMOROUTER_TAG=1.2.3` di `.env`.

| Variabel | Fungsi |
|---|---|
| `PUBLIC_URL` | URL yang dibuka user; dipakai untuk redirect Google dan URL webhook |
| `SALT_KEY` | Hash API key dan enkripsi kredensial. **Backup bersama database**: kalau hilang, semua key dan kredensial tidak bisa dipakai |
| `JWT_SECRET` | Tanda tangan token sesi |
| `TRUSTED_PROXIES` | Isi `private` (atau IP/CIDR) jika di belakang reverse proxy, supaya IP asli klien terbaca |
| `CORS_ORIGIN` | Origin browser yang boleh memanggil `/api/*` |

## Setup pertama

1. Buka dashboard: wizard meminta nama, email, dan password akun **admin pemilik**, lalu setup 2FA (wajib untuk admin).
2. **Admin → Models**: isi API key Sumopod AI, klik **Simpan & cek**, lalu **Refresh model**.
3. Atur harga jual (per model atau sekaligus lewat **Atur markup**), lalu aktifkan model yang mau dijual.
4. **Admin → Settings → Payment**: isi kredensial Sumopod Managed Payment (Sandbox/Live) dan pasang URL webhook `{PUBLIC_URL}/api/webhooks/sumopod/{sandbox|live}` di Sumopod.
5. **Admin → Settings → Branding**: nama situs, URL, dan ikon brand kamu. Template email juga bisa diubah.
6. Opsional: metode login (Google OAuth), email (SMTP), branding, afiliasi, kupon, retensi log.

## Keamanan singkat

- Hanya hash API key yang disimpan; kredensial admin dienkripsi AES-256-GCM.
- Prompt dan respons tidak pernah disimpan.
- Admin wajib 2FA; semua perubahan admin tercatat di **Audit log**.
