Deployment Guide — Coolify on VPS
1. Topologi production
Coolify diinstal pada VPS dan menjalankan container terpisah untuk:
| Service | Fungsi | Ekspos publik |
|---|---|---|
frontend |
Next.js | Ya, hub.domain.com. |
backend-api |
NestJS HTTP/API/OAuth/webhook | Ya, api.hub.domain.com. |
backend-worker |
BullMQ processor dan scheduler | Tidak. |
postgres |
PostgreSQL | Tidak. |
redis |
BullMQ/Redis | Tidak. |
Coolify reverse proxy menangani domain dan TLS. Database/Redis hanya diakses lewat private network Docker/Coolify.
2. Persiapan Coolify
- Buat project dan environment terpisah:
stagingsertaproduction. - Tambahkan resource Git untuk frontend dan backend repository.
- Tambahkan PostgreSQL dan Redis managed resource pada environment yang sesuai.
- Tambahkan domain, aktifkan HTTPS, lalu atur CORS
FRONTEND_URLbackend sesuai domain frontend. - Simpan seluruh environment variable sebagai Coolify secret; jangan commit
.env.
Backend dideploy dua kali dari source/image yang sama: backend-api menjalankan pnpm start:prod; backend-worker menjalankan pnpm start:worker. Pastikan hanya satu scheduler lifecycle aktif per environment, atau gunakan distributed lock Redis.
3. Urutan deploy
- Backup database dan review migration Prisma.
- Deploy
backend-apibaru. - Jalankan migration production dengan
pnpm prisma migrate deploysebagai pre-deploy/release command satu kali. - Deploy atau restart
backend-workerdengan environment yang sama. - Deploy frontend dengan
NEXT_PUBLIC_API_URLyang benar. - Cek
/health,/api/docs(staging saja), worker queue, dan webhook sandbox.
Migration tidak boleh dieksekusi serentak oleh API dan worker. Gunakan release command/one-off task Coolify.
4. Payment webhook dan OAuth
- Daftarkan
https://api.hub.domain.com/webhooks/midtransdanhttps://api.hub.domain.com/webhooks/xenditdi dashboard provider. - Daftarkan redirect URI OAuth SaaS persis seperti pada
oauth_clients; jangan menerima wildcard. - Pastikan endpoint webhook menerima raw body bila signature provider memerlukannya.
- Setelah deploy, lakukan transaksi sandbox dan retry webhook untuk memastikan idempotensi.
5. Monitoring, backup, dan rollback
- Pantau container health, HTTP 5xx, disk VPS, koneksi PostgreSQL/Redis, queue failed jobs, dan error webhook.
- Backup PostgreSQL terjadwal serta uji restore berkala. Redis tidak memegang source of truth, tetapi konfigurasi persistence membantu pemulihan queue.
- Simpan log audit/error pada retensi yang disepakati; jangan menyimpan secret atau token mentah.
- Rollback aplikasi melalui deployment revision Coolify. Untuk migration destruktif, gunakan migration kompatibel bertahap; jangan rollback schema tanpa backup teruji.
6. Checklist go-live
- HTTPS/domain/CORS benar untuk frontend dan API.
- PostgreSQL dan Redis tidak terbuka ke internet.
- Environment secret terisi dan berbeda antara staging/production.
- Prisma migration sudah sukses sekali.
- API dan worker sehat; scheduler tidak berjalan ganda.
- Midtrans/Xendit webhook signature dan retry lulus sandbox test.
- Email verification/invoice dan job lifecycle terproses.
- Backup database dan prosedur rollback sudah diuji.