Menjawab Tantangan Deployment Laravel dengan Observability dan Rollback Cepat

Untuk menjaga keandalan aplikasi Laravel, deployment harus disertai observability real-time dan mekanisme rollback cepat saat sesuatu tidak berjalan sesuai rencana. Anda perlu pipeline CI/CD sederhana yang mengotomasi build dan testing, pemeriksaan pra-deploy yang pasti, metrik/log/tracing yang tajam, serta keputusan rollback otomatis atau manual yang dapat segera diuji.

Artikel ini menjelaskan langkah-langkah praktis untuk mencapai itu semua sambil tetap mempertahankan kestabilan produksi.

Membangun Pipeline CI/CD Sederhana dengan Pemeriksaan Pra-Deploy

CI/CD modern untuk Laravel bisa berupa workflow yang berjalan di GitHub Actions, GitLab CI, atau Jenkins. Fokusnya adalah memastikan setiap commit yang masuk ke cabang rilis melewati pengecekan berikut:

  • Dependency install dan caching: jalankan composer install --no-dev --prefer-dist dengan cache agar tidak mengulang pipelining.
  • Static analysis: gunakan phpstan atau pest untuk level kualitas minimal.
  • Migration dan test ringan: jalankan php artisan migrate --pretend untuk memastikan skema tidak bermasalah, lalu php artisan test --testsuite=unit untuk lapisan kritikal.

Contoh fragment GitHub Actions (disederhanakan) untuk tahap ini:

name: Deploy Laravel
on:
  push:
    branches: [ main ]
jobs:
  ci:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: php-actions/composer@v6
        with:
          args: install --no-progress --prefer-dist
      - name: Run PHPStan
        run: vendor/bin/phpstan analyse
      - name: Run Unit Tests
        run: php artisan test --testsuite=unit

Setelah pekerjaan CI lulus, pipeline dapat meneruskan ke tahap deploy. Tetap pisahkan build (artifact) dan deploy agar pengujian lanjutan bisa dijalankan di staging sebelum ke produksi.

Observability: Metrics, Logs, dan Tracing untuk Laravel

Observability adalah jantung deteksi dini masalah. Untuk Laravel, pendekatan praktis mencakup:

  • Metrik aplikasi: gunakan Laravel Telescope di environment pengembangan dan sinkronkan metric seperti request latency, job queue depth, atau cache hit rate ke Prometheus via exporter sederhana.
  • Logs yang konsisten: konfigurasi LOG_CHANNEL=json supaya log terstruktur, kemudian kirim ke service seperti Elasticsearch, Loki, atau Cloud provider. Pastikan log request memiliki request_id dan trace_id.
  • Tracing: gunakan OpenTelemetry atau Laravel Telescope untuk melacak durasi job/command. Jangan lupa mengirim span context ke distributed tracer agar dapat melihat dampak deploy terhadap latency.

Contoh pengiriman metric queue depth ke Prometheus bisa menggunakan command artisan yang men-generate metric lalu expose via HTTP endpoint yang dipanggil Prometheus. Pastikan endpoint tersebut hanya tersedia untuk monitoring internal.

Observability juga berarti alert yang realistis—misalnya, alert jika rata-rata latency API 5 menit terakhir naik 2x dibanding normal, atau jika job queue depth melebihi threshold.

Strategi Rollback Cepat Otomatis dan Manual

Rollback harus ditentukan sebelum deployment dimulai. Ada dua pendekatan utama:

  1. Rollback otomatis: deploy pipeline memantau health endpoint atau metric. Jika setelah release ada spike error 5 menit pertama, sistem langsung menjalankan terraform apply versi sebelumnya atau mengganti symlink release (seperti pada Laravel Envoy/Deployer). Keuntungannya cepat; kerugiannya, false positive bisa memicu rollback.
  2. Rollback manual: operator melihat alert/observability, lalu menjalankan skrip rollback. Ini memberi kontrol untuk investigasi lebih lanjut, namun membutuhkan dokumentasi jelas agar tidak terlambat.

Contoh prosedur rollback manual:

  1. Identifikasi release terakhir dan versi sebelumnya yang stabil.
  2. Jalankan php artisan down jika diperlukan untuk menjaga konsistensi sebelum rollback.
  3. Ganti symlink release di server (misal lewat Deployer) dan jalankan php artisan migrate:rollback --step=1 jika migrasi perlu dikembalikan.
  4. Flush cache config/route dan jalankan php artisan up.

Catatan: rollback otomatis hanya bisa digunakan jika perubahan state (migrasi, data) bisa dibalik tanpa kehilangan integritas. Jika tidak, tambahkan checkpoint manual dengan flag “consensus rollback” sebelum rollback otomatis dijalankan.

Postmortem Ringan dan Pencegahan Insiden Besar

Setelah insiden—baik rollback otomatis maupun manual—lakukan postmortem ringan:

  • Apa yang tidak berjalan sesuai rencana: metric/alert mana yang memicu rollback?
  • Apa tindakan yang diambil: siapa memutuskan rollback manual atau apakah pipeline otomatis yang memicu?
  • Penyebab utama: kode baru, dependency, migrasi, atau konfigurasi?
  • Perbaikan: update pipeline, tambah test, atau adjust threshold alert.

Dokumentasikan postmortem singkat (1-2 paragraf) dan bagikan kepada tim. Fokus pada fakta, bukan menyalahkan.

Untuk mencegah insiden lain, pertimbangkan:

  • Gunakan feature flag untuk mematikan fitur baru tanpa rollback komplek.
  • Jaga database migration backward compatible, agar versi lama tetap bisa dijalankan sementara deploy baru ditinjau.
  • Latih tim untuk menjalankan rollback manual dan observability dashboard sehingga mereka tidak tergesa-gesa saat live issue.

Kesimpulan

Mengelola deployment Laravel modern berarti menautkan pipeline CI/CD yang kuat dengan observability penuh dan prosedur rollback yang siap pakai. Gabungkan pemeriksaan pra-deploy, metrik/log/tracing yang relevan, langkah rollback otomatis/manual, serta postmortem agar setiap insiden menjadi pelajaran. Saat pipeline dan observability bekerja bersama, Anda dapat memastikan deploying Laravel tetap cepat namun aman.