9.0 KiB
Production Readiness Checklist
Dokumen ini merangkum kesiapan aplikasi BizOne Portal sebelum naik production live.
Status saat ini:
- Staging-ready: hampir siap
- Production-ready: belum
- Rekomendasi: jangan deploy production live sebelum semua item
Blockerselesai
Blocker
Item berikut wajib selesai sebelum production.
1. Rotate semua secret yang pernah tersimpan di repo
Status: Belum selesai
Risiko:
- Secret/password/token di file example atau dokumentasi harus dianggap bocor jika pernah masuk repo.
- Credential lama tidak boleh dipakai di production.
Yang harus dilakukan:
- Bersihkan credential asli dari
deploy/debian12/app.env.example. - Bersihkan credential asli dari
.env.examplejika ada. - Bersihkan potongan secret/password dari
README.mdatau dokumentasi lain. - Generate secret baru untuk production.
- Pakai secret baru hanya di
.envserver, bukan di repo.
Secret yang wajib di-rotate:
DATABASE_URLpassword databaseJWT_SECRETJWT_REFRESH_SECRETWEBHOOK_VERIFY_TOKENWEBHOOK_SHARED_SECRETMETA_WEBHOOK_APP_SECRETMAIL_PASSWORD
Acceptance criteria:
- Tidak ada credential asli di repo.
- Production
.envhanya ada di server. - Semua secret production berbeda dari secret yang pernah ditulis di repo.
2. Jalankan build final backend
Status: Belum dijalankan final setelah perubahan terbaru
Command:
cd backend
npm run db:generate
npm run build
Acceptance criteria:
- Build backend sukses tanpa error TypeScript.
- Prisma client berhasil generate.
dist/main.jstersedia dan bisa dijalankan.
3. Jalankan build final frontend
Status: Belum dijalankan final setelah perubahan UI terbaru
Command:
cd frontend
npm run build
Acceptance criteria:
- Build Next.js sukses.
- Tidak ada TypeScript error.
- Tidak ada runtime import error.
- Tidak ada route yang gagal saat build.
4. Jalankan migration deploy di database production/staging
Status: Belum diverifikasi final
Command:
cd backend
npm run db:migrate:deploy
Acceptance criteria:
- Migration selesai tanpa error.
- Tabel utama tersedia.
- Backend health check mengembalikan database
ok.
5. Smoke test end-to-end production flow
Status: Belum selesai
Minimal test:
- Login admin berhasil.
- Ganti password admin berhasil.
- Aktifkan 2FA berhasil.
- Dashboard bisa dibuka.
- User management bisa load.
- Contacts bisa load, create, import/export minimal dicek.
- Conversations bisa load.
- WhatsApp API Setting bisa load dan save.
- Sensitive value tidak tampil plain text saat
NODE_ENV=production. - Webhook verification dari Meta berhasil.
- Webhook event masuk ke logs.
- Pesan inbound WhatsApp masuk ke Conversations.
- Balas pesan dari dashboard berhasil jika token Meta valid.
- Audit trail mencatat aksi penting.
Acceptance criteria:
- Semua flow utama di atas lolos tanpa error 500.
- Browser console tidak menunjukkan runtime error kritikal.
- Backend log tidak menunjukkan exception berulang.
High Priority
Item berikut sangat disarankan selesai sebelum production, tapi bisa dipisah setelah blocker jika deployment sangat mendesak.
1. Production nginx security headers masuk ke config repo
Status: Belum masuk final config repo
Tambahkan ke deploy/debian12/nginx.portal.bizone.id.conf:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
Acceptance criteria:
nginx -tsukses.- Header muncul di response HTTPS.
2. Frontend Dockerfile production-ready
Status: Belum siap
Masalah:
frontend/Dockerfilemasih menjalankannpm run dev.
Opsi:
- Jika deployment pakai systemd, Dockerfile ini tidak blocker.
- Jika deployment pakai Docker, wajib ubah ke production build.
Acceptance criteria:
- Docker image frontend menjalankan
next start, bukannext dev.
3. Dependency audit
Status: Belum dijalankan
Command:
npm audit
cd backend && npm audit
cd ../frontend && npm audit
Acceptance criteria:
- Tidak ada critical vulnerability.
- High vulnerability punya keputusan: fix, upgrade, atau accepted risk tertulis.
4. Review penggunaan Next 15.0.0 dan React RC
Status: Perlu review
Risiko:
- React RC dan Next awal versi major bisa punya issue kompatibilitas.
Acceptance criteria:
- Build final sukses.
- Smoke test UI sukses.
- Tidak ada issue runtime kritikal.
- Jika memungkinkan, upgrade ke versi stabil yang kompatibel.
5. Backup PostgreSQL dan Redis
Status: Belum ada strategi final
Minimal PostgreSQL backup:
pg_dump "$DATABASE_URL" > backup-$(date +%F).sql
Yang perlu disiapkan:
- Backup harian.
- Retention minimal 7-14 hari.
- Lokasi backup di luar server utama jika memungkinkan.
- Restore test minimal satu kali.
Acceptance criteria:
- Backup otomatis berjalan.
- Restore procedure terdokumentasi.
Medium Priority
Item berikut tidak selalu blocker, tapi penting untuk operasional production yang sehat.
1. Monitoring uptime
Status: Belum ada
Endpoint yang dipantau:
https://portal.bizone.id/api/health
Acceptance criteria:
- Alert aktif saat endpoint non-200.
- Alert aktif saat response terlalu lambat.
2. Log retention
Status: Belum dikunci
Cek journald:
sudo journalctl --disk-usage
Rekomendasi:
- Batasi ukuran journald.
- Pastikan log backend/frontend bisa dibaca saat incident.
3. Forced first-login password change
Status: Belum ada secara code
Risiko:
- Seed admin default bisa lupa diganti.
Acceptance criteria:
- Admin bootstrap dipaksa ganti password saat login pertama, atau proses operasional mewajibkan rotate manual sebelum go-live.
4. Role permission enforcement review
Status: Perlu review final
Yang perlu dicek:
- User biasa tidak bisa akses halaman admin.
- Role non-admin tidak bisa mengubah settings, users, roles, audit trail.
- API backend menolak akses yang tidak sesuai role.
Acceptance criteria:
- Permission UI dan backend konsisten.
5. Translation sweep
Status: Sebagian besar halaman utama sudah dirapikan
Perlu cek lagi:
- Detail contact
- Detail campaign
- Detail template/builder edge case
- Auth pages forgot/reset/set password
- Notification center
- Global search modal
Acceptance criteria:
- Tidak ada string penting yang hardcoded di halaman utama production.
Done / Already Good
Item berikut sudah terlihat cukup baik dari code saat ini.
1. Env validation backend production
Status: Sudah ada
Catatan:
- Production menolak secret pendek/placeholder.
- Production menolak
WEBHOOK_ALLOW_UNSIGNED=true. - Production mewajibkan URL HTTPS untuk origin/public API.
2. Sensitive WhatsApp values tidak tampil di production
Status: Sudah ada
Catatan:
- Backend hanya mengembalikan sensitive values saat
!isProduction. - Pastikan
NODE_ENV=productionbenar di server.
3. Cookie secure di production
Status: Sudah ada
Catatan:
- Frontend cookie memakai
secure: process.env.NODE_ENV === 'production'. sameSitememakailax.
4. CORS dibatasi via FRONTEND_ORIGIN
Status: Sudah ada
Catatan:
- Backend membaca allowed origin dari env.
5. Prisma migration deploy tersedia
Status: Sudah ada
Command:
cd backend
npm run db:migrate:deploy
6. Systemd deployment tersedia
Status: Sudah ada
File:
deploy/debian12/bizone-backend.servicedeploy/debian12/bizone-frontend.service
7. Nginx reverse proxy config tersedia
Status: Ada, perlu hardening headers
File:
deploy/debian12/nginx.portal.bizone.id.conf
8. PostgreSQL dan Redis infra compose tersedia
Status: Sudah ada
File:
deploy/debian12/docker-compose.infra.yml
Go / No-Go Decision
Go staging
Boleh jika:
- Backend build sukses.
- Frontend build sukses.
- Migration deploy sukses.
- Staging
.envaman.
Go production
Boleh jika semua ini selesai:
- Semua blocker selesai.
- Secret sudah di-rotate.
- Build backend/frontend final sukses.
- Migration production sukses.
- Smoke test end-to-end sukses.
- Nginx HTTPS aktif.
- Backup minimal sudah ada.
No-go production
Jangan production jika salah satu ini masih terjadi:
- Secret asli masih ada di repo.
- Build frontend/backend gagal.
- Migration gagal.
- Login/admin flow gagal.
- Webhook production gagal diverifikasi.
- Database belum punya backup.
NODE_ENVbukanproduction.WEBHOOK_ALLOW_UNSIGNED=true.
Suggested production run order
- Bersihkan repo dari secret dan rotate semua credential.
- Siapkan
.envproduction di server. - Jalankan infra PostgreSQL/Redis.
- Jalankan
npm installroot, backend, frontend. - Jalankan
npm run db:generate. - Jalankan backend build.
- Jalankan frontend build.
- Jalankan migration deploy.
- Restart systemd services.
- Reload nginx.
- Smoke test health, login, dashboard, webhook, conversation.
- Aktifkan backup dan monitoring.