Note
SOP Deployment & Rollback (NestJS, Prisma, PostgreSQL)
SOP Deployment & Rollback (NestJS, Prisma, PostgreSQL)
Panduan langkah demi langkah untuk melakukan deployment ke server production menggunakan metode Fail-Fast dan prosedur rollback jika terjadi kesalahan.
1. Persiapan (Wajib)
Sebelum menarik kode baru, pastikan untuk selalu melakukan backup database terlebih dahulu. Kita menggunakan format custom yang terkompresi.
sudo -u postgres pg_dump --format=custom --compress=6 --verbose name_db > /opt/backup_db/name_backup_$(date +%Y-%m-%d_%H-%M-%S).dump
2. Urutan Deploy Emas (Fail-Fast Method)
Urutan ini dirancang agar sistem menghentikan proses deploy jika ada error pada kode, sehingga database tidak akan tersentuh jika aplikasi gagal dikompilasi.
Langkah-langkah:
-
Tarik Kode Terbaru: Ambil pembaruan dari repositori. Posisi sebelum perintah ini berjalan akan disimpan di
HEAD@{1}pada reflog Git.bashgit pull origin main -
Sinkronkan Library (NPM): Pastikan paket yang diinstal sesuai dengan
package-lock.json.bashnpm ci -
Update Prisma Client: Persiapkan struktur database baru agar bisa dibaca oleh TypeScript.
bashnpx prisma generate -
Kompilasi Kode (Build): (PERHATIAN: Jika proses ini memunculkan error, HENTIKAN proses deploy. Database Anda masih aman).
bashnpm run build -
Terapkan Migrasi Database: (Jalankan hanya jika langkah build sukses tanpa error).
bashnpx prisma migrate deploy -
Muat Ulang Aplikasi (PM2): Terapkan pembaruan ke production dengan sistem zero-downtime.
bashpm2 reload nama-aplikasi -
Pantau Log Server: Pastikan tidak ada pesan crash atau database connection error.
bashpm2 logs
3. Skenario Darurat (Rollback)
Jika terjadi error fatal setelah pm2 reload, lakukan identifikasi masalah dan pilih salah satu skenario berikut:
Skenario A: Error Kode (Database Tidak Berubah)
Jika error murni karena logika kode (tanpa ada perubahan skema database), Anda cukup membatalkan git pull tadi.
git reset --hard HEAD@{1}
npm ci
npm run build
pm2 reload nama-aplikasi
Skenario B: Error Migrasi Database
Jika error disebabkan oleh perubahan tabel/kolom yang salah di database, Anda memiliki dua opsi:
Opsi 1: Fix Forward (Direkomendasikan - Data Aman) Jangan melakukan restore backup jika aplikasi sudah mengumpulkan data/transaksi pengguna yang baru.
- Biarkan server berjalan.
- Di laptop/lokal, perbaiki file
schema.prismake versi yang benar. - Buat migrasi perbaikan:
npx prisma migrate dev --name fix-rollback - Push kode ke repositori.
- Jalankan ulang Langkah Deployment 1-7 di atas.
Opsi 2: Restore Instan (Mundur Total - Data Baru Hilang) Gunakan hanya jika aplikasi benar-benar hancur dan Anda rela kehilangan data yang masuk sejak proses backup terakhir.
# 1. Matikan aplikasi agar tidak ada koneksi/data yang masuk
pm2 stop nama-aplikasi
# 2. Kembalikan kode ke versi sebelum git pull
git reset --hard HEAD@{1}
npm ci
npm run build
# 3. Restore database ke kondisi bersih (menghapus skema yang salah)
pg_restore -U postgres --clean --if-exists -d mini_erp_db /opt/backup_db/nama_file_backup_sebelumnya.dump
# 4. Nyalakan kembali aplikasi
pm2 start nama-aplikasi