# Panduan Deploy AI Content Studio di DomaiNesia (VPS Ubuntu)

## A. Yang harus tersedia

- VPS DomaiNesia Ubuntu 22.04 atau 24.04 dengan **IP IPv4 publik** dan akses SSH root/sudo. Untuk mode AI 90 konten bertahap, disarankan mulai dari >=2 vCPU / 4 GB RAM, disk SSD 30 GB atau lebih dan lihat penggunaan storage sesungguhnya. Angka ini adalah rekomendasi operasional, bukan syarat resmi DomaiNesia.
- Domain `kurniawangroupofficial.com` dapat Anda kelola DNS-nya di DomaiNesia atau provider DNS yang sedang aktif.
- VPS **khusus** atau port 80/443 di VPS tidak sedang dipakai Nginx/Apache/Caddy lain. Jika VPS sudah menjalankan webserver, ikuti dokumen **02_ALTERNATIF_SERVER_EXISTING.md** agar tidak memutus website lain.
- Akses laptop/PC dengan aplikasi SSH/SFTP (Terminal, Termius, FileZilla atau Cyberduck).
- API key OpenAI opsional. Tanpa key, aplikasi bisa login, kelola brand, mode template lokal, simpan konten dan download ZIP; mode AI asli belum aktif.

## B. Atur DNS khusus subdomain `studio`

1. Temukan **IP IPv4 VPS** pada panel VPS DomaiNesia; jangan menebak IP.
2. Temukan DNS aktif domain utama (DNS Management DomaiNesia, cPanel Zone Editor, atau penyedia lain jika nameserver diarahkan ke layanan eksternal).
3. Tambah/ubah hanya record:

| Type | Host / Name | Value / Target | TTL |
|---|---|---|---|
| A | `studio` | `IP_PUBLIK_VPS_ANDA` | 300 atau Auto |

4. Jangan mengubah A record root domain `@` atau record website Kurniawan Group lain. Hapus record A/CNAME `studio` yang konflik jika Anda sudah memeriksa bahwa record itu memang milik target lama. Jika ada AAAA `studio` tetapi VPS tidak menyediakan IPv6 valid, perbaiki/hapus record itu.
5. Periksa DNS dari PC/VPS:

```bash
nslookup studio.kurniawangroupofficial.com
# atau
getent ahostsv4 studio.kurniawangroupofficial.com
```

DNS harus mengarah ke IP publik VPS yang benar. Perubahan DNS dapat memerlukan waktu propagasi.

**Rujukan resmi DomaiNesia:**
- https://www.domainesia.com/panduan/panduan-setting-dns-melalui-cpanel/
- https://www.domainesia.com/panduan/cara-mengarahkan-subdomain-ke-ip-berbeda/
- https://www.domainesia.com/panduan/cara-membuat-subdomain-di-cpanel/

## C. Instal Docker Engine dan Docker Compose

Login VPS:

```bash
ssh root@IP_PUBLIK_VPS_ANDA
```

Untuk instalasi Docker baru, ikuti **panduan resmi** langkah *Install using the apt repository* untuk Ubuntu: https://docs.docker.com/engine/install/ubuntu/ . Setelah repositori Docker diaktifkan, pasang:

```bash
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker
sudo docker --version
sudo docker compose version
```

Jangan menjalankan installer Docker dari URL tak dikenal. Bila VPS sudah berisi Docker yang berjalan, jangan menginstal ulang tanpa memeriksa dampaknya terhadap container lain.

**Firewall:** buka port TCP 80 dan 443 serta pertahankan akses SSH 22 (atau port SSH yang Anda set). Bila menggunakan UFW dan belum ada kebijakan khusus:

```bash
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw status
```

**JANGAN** menjalankan `ufw enable` secara sembarangan bila SSH menggunakan port nonstandar atau ada firewall provider yang belum dikonfigurasi.

## D. Upload ZIP ke VPS

Cara sederhana dari terminal laptop (file unduhan di folder Downloads, nama file sesuaikan):

```bash
scp ~/Downloads/STUDIO-KURNIAWANGROUP-READY-UPLOAD.zip root@IP_PUBLIK_VPS_ANDA:/opt/
```

Atau gunakan FileZilla/Cyberduck **SFTP** ke `/opt`. Tidak perlu upload ke `public_html`.

Di VPS:

```bash
cd /opt
sudo apt install -y unzip python3
sudo unzip -o STUDIO-KURNIAWANGROUP-READY-UPLOAD.zip
cd /opt/AI-Content-Studio-Domainesia
```

## E. Pasang aplikasi

```bash
sudo bash scripts/install-vps.sh
```

Skrip melakukan:
- Membuat `.env` bila belum ada.
- Membuat password login acak + session secret unik.
- Memvalidasi konfigurasi.
- Menyiapkan akses folder data untuk user nonroot dalam Docker.
- Membangun image Python dari source code.
- Menjalankan app dan Caddy (reverse proxy/SSL otomatis).

**SIMPAN PASSWORD PADA PASSWORD MANAGER.** Password dicetak di terminal satu kali pada pemasangan pertama, tidak ada kredensial default dalam ZIP.

## F. Buka website

Buka **https://studio.kurniawangroupofficial.com** (HTTPS). Caddy akan mencoba menerbitkan dan memperbarui sertifikat SSL setelah record DNS publik sudah benar dan port 80/443 dapat diakses. Periksa:

```bash
sudo docker compose -f compose.yaml ps
sudo docker compose -f compose.yaml logs --tail=80 caddy
sudo docker compose -f compose.yaml logs --tail=80 studio
curl -I https://studio.kurniawangroupofficial.com
curl https://studio.kurniawangroupofficial.com/api/health
```

Jika `curl /api/health` menghasilkan JSON `{"status":"ok",...}`, server web berjalan. Itu **bukan** tes lengkap akses key AI atau output gambar AI.

**Login pertama:** gunakan password yang muncul saat script instalasi.

## G. Aktifkan OpenAI untuk generasi gambar AI nyata

```bash
cd /opt/AI-Content-Studio-Domainesia
sudo nano .env
```

Isi `OPENAI_API_KEY=...` memakai key yang Anda buat sendiri. Jangan mengirimkannya ke chat/WhatsApp atau memasukkannya ke frontend. Simpan file, lalu restart container (membaca env yang baru):

```bash
sudo docker compose -f compose.yaml up -d --force-recreate studio
```

Buka halaman Settings: seharusnya indikator "AI terhubung" mengacu pada adanya API key, **belum** memverifikasi saldo/izin model. Buat **1 konten** terlebih dahulu untuk menguji API. Lihat dokumen 03_AI_API_DAN_BIAYA.md.

## H. Backup dan update

```bash
sudo bash scripts/backup.sh
sudo bash scripts/check.sh
```

Saat ada ZIP pembaruan aplikasi, simpan file `data/` dan `.env` (jangan ditimpa), ganti source code, lalu:

```bash
sudo bash scripts/update.sh
```

Script backup menghentikan layanan studio sementara agar salinan SQLite konsisten, kemudian menghidupkannya kembali. Arsip backup berada di folder `backups/` dan sebaiknya dipindahkan ke lokasi berbeda dari VPS.

## I. Ringkasan status

- ✅ **File siap diunggah ke VPS dan dikonfigurasi**.
- ✅ **Docker / Caddy / domain / penyimpanan / skrip install tersedia**.
- ✅ **Mode template lokal dapat digunakan setelah server hidup**.
- ⚙️ **OpenAI API key + izin model diperlukan** untuk gambar AI sungguhan.
- ⚠️ **Belum online**: instalasi, DNS, HTTPS, dan uji API live hanya dapat dilakukan dengan akses VPS/DNS yang Anda kelola.
