Skip to content

Rollback Procedures

Panduan langkah demi langkah untuk melakukan rollback ketika ada masalah setelah deployment.

Terdapat 4 level rollback, dari yang termudah sampai yang paling kompleks:

LevelMethodTimeData Loss
1Dokploy Redeploy~2 minNone
2Git Revert~5 minNone
3Database Restore~15-30 minLast backup
4Full Infrastructure~1 hourVaries

  • Bug di code tanpa perubahan database
  • Perlu kembali ke versi sebelumnya dengan cepat
  • Tidak ada schema migration yang bermasalah
  1. Login ke Dokploy dashboard
  2. Pilih aplikasi → tab Deployments
  3. Temukan deployment yang sebelumnya berfungsi
  4. Klik “Redeploy”
[SCREENSHOT: Dokploy → Deployments tab showing previous deployment]
  1. Monitor logs sampai selesai
  2. Verify dengan health check:
Terminal window
curl https://api.yourdomain.com/api/health
  • ~2 menit

  • Commit bermasalah sudah di-push
  • Perlu review perubahan sebelum rollback
  • Ingin zachh完整的 revert commit
Terminal window
# Clone repo jika belum ada
git clone https://github.com/Syskita/merq.git
cd merq
# Buat revert commit
git revert HEAD
# Push ke main (trigger auto-deploy)
git push origin main
  1. Buka GitHub repository
  2. Pilih commit yang bermasalah
  3. Klik “Revert”
  4. Buat Pull Request
  5. Merge setelah review
  • ~5 menit

  • Ada destructive migration yang merusak data -Perlu kembali ke state database sebelumnya
  • Level 1 dan 2 tidak menyelesaikan masalah

Database restore akan menghapus semua perubahan sejak backup terakhir. Pastikan tidak ada data penting yang perlu diselamatkan!

  • Backup file tersedia di /backups/
  • Tau timestamp backup yang ingin di-restore
Terminal window
# Backup dulu state saat ini (jika memungkinkan)
pg_dump -h $DB_HOST -U $DB_USER $DB_NAME > /backups/pre_restore_$(date +%Y%m%d_%H%M%S).sql
Terminal window
# Via Dokploy
# Buka dashboard → Stop Application
# Via CLI
docker stop merq-backend
docker stop merq-web
Terminal window
ls -la /backups/
Terminal window
# Drop dan recreate database
psql -h $DB_HOST -U $DB_USER -c "DROP DATABASE $DB_NAME"
psql -h $DB_HOST -U $DB_USER -c "CREATE DATABASE $DB_NAME"
# Restore dari backup
psql -h $DB_HOST -U $DB_USER $DB_NAME < /backups/merq_YYYYMMDD_HHMMSS.sql
Terminal window
# Kembali ke versi code sebelumnya (Level 1 atau 2)
# Kemudian start aplikasi
docker start merq-backend
docker start merq-web
Terminal window
# Check application logs
docker logs -f merq-backend
# Health check
curl https://api.yourdomain.com/api/health
# Sample query
curl https://api.yourdomain.com/api/office/v1/users?limit=1
  • ~15-30 menit

  • Seluruh infrastruktur corrupted -Perlu provisioning ulang dari awal
  • Semua upaya lain gagal

Catat:

  • Error messages
  • Logs
  • Screenshots
  • Steps yang menyebabkan masalah
Terminal window
# Stop semua container
docker-compose down
# atau
docker stop merq-backend merq-web merq-postgres merq-redis merq-typesense

Jika menggunakan DigitalOcean:

  1. Buka Droplet settings
  2. Pilih Snapshots
  3. Restore dari snapshot terakhir yang berfungsi

Jika snapshot tidak tersedia:

  1. Buat Droplet baru
  2. Ikuti Manual Deployment dari awal
  3. Restore database dari backup
Terminal window
# Point domain ke IP baru
# A Record: api.yourdomain.com → new_server_ip
# A Record: admin.yourdomain.com → new_server_ip
Terminal window
# All services
docker ps
# Health checks
curl https://api.yourdomain.com/api/health
curl https://admin.yourdomain.com
  • ~1 jam atau lebih

Untuk mencegah kebutuhan rollback:

  • Backup database sebelum deploy:

    Terminal window
    pg_dump -h $DB_HOST -U $DB_USER $DB_NAME > /backups/pre_deploy_$(date +%Y%m%d_%H%M%S).sql
  • Test di staging terlebih dahulu

  • Review migration scripts:

    • Apakah reversible?
    • Apakah ada data loss?
    • Apakah ada backup strategy?
  • Deploy di jam off-peak untuk minimize impact

  • Siapkan rollback plan sebelum deploy


Masalah terjadi setelah deploy
┌───────────────┐
│ Severity? │
└───────┬───────┘
┌───────┴───────┐
▼ ▼
┌───────┐ ┌───────┐
│ Critical│ │ Minor │
└───┬───┘ └───┬───┘
│ │
▼ ▼
┌─────────┐ ┌─────────┐
│ Level 1 │ │ Level 1 │
│ or 2 │ │ first │
└────┬────┘ └───┬────┘
│ │
▼ ▼
┌─────────┐ ┌─────────┐
│ Work? │ │ Fix in │
│ ✓ │ │ next │
└─────────┘ │ release │
└─────────┘

LevelMethodTypical Time
1Dokploy Redeploy2 menit
2Git Revert5 menit
3Database Restore15-30 menit
4Full Infrastructure1+ jam