# Panduan Deployment ArlanGTC di Server VPS Ubuntu

Panduan lengkap ini menjelaskan langkah demi langkah cara men-deploy **ArlanGTC** pada server VPS Ubuntu (20.04 / 22.04 / 24.04 LTS) hingga berjalan otomatis dan aman dengan HTTPS.

---

## 1. Persiapan Server & Paket Dasar

Login ke server via SSH:
```bash
ssh root@IP_SERVER_ANDA
```

Update repositori dan install paket dasar:
```bash
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget git build-essential ufw nginx
```

---

## 2. Install Node.js & PM2

Install Node.js versi 22 LTS:
```bash
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs

# Verifikasi versi
node -v
npm -v

# Install PM2 secara global
sudo npm install -g pm2
```

---

## 3. Install Dependensi Chromium (PENTING untuk WhatsApp-Web.js)

`whatsapp-web.js` membutuhkan library sistem Linux agar Chromium headless dapat berjalan:
```bash
sudo apt install -y \
  gconf-service libasound2 libatk1.0-0 libc6 libcairo2 libcups2 \
  libdbus-1-3 libexpat1 libfontconfig1 libgcc1 libgconf-2-4 \
  libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 libpango-1.0-0 \
  libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 \
  libxcomposite1 libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 \
  libxrandr2 libxrender1 libxss1 libxtst6 ca-certificates \
  fonts-liberation libappindicator1 libnss3 lsb-release xdg-utils
```

---

## 4. Install & Konfigurasi MySQL

```bash
sudo apt install -y mysql-server
sudo mysql_secure_installation
```

Masuk ke MySQL shell:
```bash
sudo mysql
```

Jalankan perintah SQL berikut untuk membuat database dan user:
```sql
CREATE DATABASE arlangtc CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'arlangtc_user'@'localhost' IDENTIFIED BY 'PASSWORD_KUAT_ANDA';
GRANT ALL PRIVILEGES ON arlangtc.* TO 'arlangtc_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
```

---

## 5. Clone / Salin Project & Install Dependencies

Pindah ke folder web:
```bash
mkdir -p /var/www/arlangtc
cd /var/www/arlangtc

# Salin source code atau clone dari Git:
# git clone <URL_REPO_ANDA> .

# Install dependencies produksi
npm install --production=false
```

---

## 6. Konfigurasi Environment (.env)

Salin template `.env.example` ke `.env`:
```bash
cp .env.example .env
nano .env
```

Sesuaikan nilai di dalam file `.env`:
```ini
NODE_ENV=production
PORT=3000
DATABASE_URL="mysql://arlangtc_user:PASSWORD_KUAT_ANDA@localhost:3306/arlangtc"

# API Checker
GTC_API_URL=https://gtc.topupcuy.com
GTC_API_KEY=API_KEY_ASLI_ANDA

# Midtrans Production
MIDTRANS_SERVER_KEY=Mid-server-xxxxxxxxxxxxxxxxxxxx
MIDTRANS_CLIENT_KEY=Mid-client-xxxxxxxxxxxxxxxxxxxx
MIDTRANS_IS_PRODUCTION=true

# WhatsApp Session Storage
SESSION_PATH=/var/www/arlangtc/.wwebjs_auth

# Web App URL
APP_URL=https://domain-anda.com
JWT_SECRET=BUAT_RANDOM_SECRET_STRING_YANG_PANJANG_DAN_AMAN

CHECK_PRICE=800
POLL_INTERVAL=3000
POLL_TIMEOUT=90000
MIN_TOPUP=10000
MAX_TOPUP=10000000
```

Simpan file (`Ctrl + O`, `Enter`, lalu `Ctrl + X`).

---

## 7. Migrasi Database & Seeding

Jalankan Prisma sync dan seeding admin:
```bash
npx prisma db push
npm run prisma:seed
```

Default login admin setelah seed:
- **Email:** `admin@arlangtc.com`
- **Password:** `admin123`
*(Segera ubah password di menu Admin Account setelah login)*.

---

## 8. Menjalankan Aplikasi dengan PM2

Buat folder logs dan session:
```bash
mkdir -p logs .wwebjs_auth
```

Jalankan aplikasi via PM2:
```bash
pm2 start ecosystem.config.js --env production
```

Atur PM2 agar otomatis berjalan saat server reboot:
```bash
pm2 save
pm2 startup
```
*(Copy dan jalankan perintah sudo yang ditampilkan oleh terminal).*

Melihat log WhatsApp & aplikasi:
```bash
pm2 logs arlangtc
```
Saat pertama kali dijalankan, QR Code WhatsApp akan muncul di terminal `pm2 logs arlangtc` atau Anda dapat membuka URL dashboard admin (`/admin`) untuk melakukan scan QR secara visual.

---

## 9. Konfigurasi Nginx Reverse Proxy & SSL

Buat file konfigurasi Nginx:
```bash
sudo nano /etc/nginx/sites-available/arlangtc
```

Masukkan konfigurasi:
```nginx
server {
    listen 80;
    server_name domain-anda.com;

    client_max_body_size 20M;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
```

Aktifkan konfigurasi:
```bash
sudo ln -s /etc/nginx/sites-available/arlangtc /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
```

### Pasang SSL Gratis (Let's Encrypt Certbot)
```bash
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d domain-anda.com
```

---

## 10. Konfigurasi Webhook Midtrans

1. Masuk ke **Dashboard Midtrans** (Production / Sandbox).
2. Masuk ke menu **Settings** > **Configuration**.
3. Di bagian **Payment Notification URL**, isi dengan:
   ```
   https://domain-anda.com/api/midtrans/notification
   ```
4. Di bagian **Finish Redirect URL**, isi: `https://domain-anda.com`
5. Klik **Update Configuration**.

---

## 11. Konfigurasi Firewall (UFW)

```bash
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
sudo ufw status
```

---

## 12. Backup Database Otomatis (Cron Job)

Beri izin eksekusi pada script backup:
```bash
chmod +x /var/www/arlangtc/scripts/backup.sh
```

Buka crontab:
```bash
crontab -e
```

Tambahkan baris berikut untuk backup otomatis setiap hari pukul 02:00 pagi:
```cron
0 2 * * * /var/www/arlangtc/scripts/backup.sh >> /var/log/arlangtc_backup.log 2>&1
```

---

## 13. Perintah Pemeliharaan Rutin

- **Lihat status bot & log realtime:**
  ```bash
  pm2 status
  pm2 logs arlangtc
  ```
- **Restart aplikasi:**
  ```bash
  pm2 restart arlangtc
  ```
- **Hentikan sementara:**
  ```bash
  pm2 stop arlangtc
  ```
- **Monitor penggunaan memori & CPU:**
  ```bash
  pm2 monit
  ```
