# Deploy Sakara Ops ke Server

Panduan naikin app ini dari local (yang selama ini kita test) ke server beneran.

## 1. Yang perlu disiapin di server

- **Node.js >= 22.5.0** (app ini pakai `node:sqlite` bawaan Node, jadi versi Node-nya harus segini ke atas — kalau kurang, `npm install`/`node server.js` bakal error).
- Akses SSH/terminal ke server.
- Domain atau IP yang bisa diakses dari luar (kalau mau login dari HP/browser lain, bukan cuma localhost).

Cek versi Node di server:
```bash
node -v
```

## 2. Upload kode ke server

Paling gampang pakai git (kalau ada repo), atau upload manual via SFTP/SCP folder `sakara-ops-app` ke server. Jangan ikut upload folder `node_modules` — install ulang di server aja pakai step 3, lebih aman (native binary bisa beda antar OS).

## 3. Install dependency

```bash
cd sakara-ops-app
npm install
```

## 4. Isi `.env` (WAJIB, jangan skip)

Copy `.env.example` jadi `.env`:
```bash
cp .env.example .env
```

Terus isi nilai-nilai ini:

| Variable | Wajib? | Keterangan |
|---|---|---|
| `PORT` | opsional | default 3000. Kalau server udah ada app lain di port itu, ganti. |
| `SESSION_SECRET` | **wajib diganti** | random string panjang, jangan pakai nilai default. Contoh generate: `openssl rand -hex 32` |
| `SMTP_HOST`, `SMTP_PORT`, `SMTP_USER`, `SMTP_PASS` | wajib buat email jalan | dari mail server kamu (Gmail App Password / SendGrid / Mailgun / dll). Tanpa ini, email cuma ke-log di console, gak beneran terkirim. |
| `MAIL_FROM` | wajib | nama+alamat pengirim yang muncul di email, contoh `"Sakara Ops <no-reply@sakaracollectives.com>"` |
| `TELEGRAM_BOT_TOKEN` | wajib buat Telegram jalan | token dari @BotFather (yang udah kamu kasih ke saya sebelumnya, `8837663004:AAE...`) |
| `TELEGRAM_BOT_USERNAME` | wajib | `SakaraOpsBot` (tanpa @) |
| `APP_TIMEZONE` | opsional | default `Asia/Jakarta`, biasanya gak usah diubah |

**Poin penting soal Telegram**: di server beneran (bukan sandbox saya), polling ke Telegram bakal jalan normal karena servernya punya akses internet asli — gak akan kena masalah "bot diem" kayak yang kejadian pas testing di sini.

## 5. Siapin database

Kalau ini deploy PERTAMA KALI (belum ada data produksi):
```bash
npm run seed
```
Ini bikin database baru dari nol dengan data contoh (staff, 15 client, dst). **Jangan jalanin ini kalau udah ada data asli di server** — `seed` itu wipe & isi ulang semua tabel.

Kalau mau bawa data yang udah ada dari local sekarang, tinggal copy file `db/sakara.db` (dan `db/sakara.db-wal`, `db/sakara.db-shm` kalau ada) ke server, di folder `db/` yang sama.

## 6. Jalanin app supaya nyala terus (gak mati kalau SSH ditutup)

**Jangan** pakai `node server.js` biasa — itu bakal mati begitu kamu logout dari SSH. Pakai process manager:

### Opsi A — PM2 (paling umum buat Node)
```bash
npm install -g pm2
pm2 start server.js --name sakara-ops
pm2 save
pm2 startup    # ikutin instruksi yang muncul, biar auto-start pas server reboot
```

Cek status / restart / lihat log:
```bash
pm2 status
pm2 restart sakara-ops
pm2 logs sakara-ops
```

### Opsi B — systemd (kalau server-nya Linux dan kamu lebih suka native service)
Bikin file `/etc/systemd/system/sakara-ops.service`:
```ini
[Unit]
Description=Sakara Ops
After=network.target

[Service]
Type=simple
WorkingDirectory=/path/ke/sakara-ops-app
ExecStart=/usr/bin/node server.js
Restart=always
User=www-data

[Install]
WantedBy=multi-user.target
```
Lalu:
```bash
sudo systemctl daemon-reload
sudo systemctl enable --now sakara-ops
sudo systemctl status sakara-ops
```

## 7. Buka akses dari luar (kalau mau pakai domain)

App-nya jalan di `http://localhost:3000` di server. Supaya bisa diakses via domain (`https://ops.sakaracollectives.com` misalnya) dan pakai HTTPS, taruh **reverse proxy** di depannya — paling umum pakai **Nginx**:

```nginx
server {
    listen 80;
    server_name ops.sakaracollectives.com;

    location / {
        proxy_pass http://localhost: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;
    }
}
```
Terus pasang SSL gratis pakai [Certbot](https://certbot.eff.org/) buat HTTPS-nya.

## 8. Setelah nyala, cek ini

- [ ] Bisa buka `https://domain-kamu` dan login page muncul
- [ ] Login admin (`admin@sakara.local` / `sakara123` / kode `SAKARA`) berhasil
- [ ] Kirim test email dari menu Kelola User/notifikasi — cek beneran masuk
- [ ] Buka Telegram, kirim `/start <kode>` ke @SakaraOpsBot — harus dapat balesan "berhasil terhubung"
- [ ] Ganti password default staff & client kalau mau lebih aman (belum ada UI ganti password sendiri — perlu diupdate manual lewat database atau saya bikinin fitur ganti password kalau perlu)

## Catatan keamanan sebelum production beneran

- `SESSION_SECRET` di `.env` **harus** diganti dari default.
- Password default (`sakara123` / `client123`) sebaiknya diganti per user, terutama yang production.
- File `.env` jangan pernah di-commit ke git / dikirim ke tempat publik — isinya kredensial SMTP & token bot.
