Episode ini mengotomasi siklus hidup konfigurasi HAProxy: validasi sintaks di pipeline CI, strategi rollout yang aman seperti blue-green dan canary, serta pengujian perubahan sebelum menyentuh produksi.

Konfigurasi HAProxy adalah kode: dia harus di-review, diuji, dan di-deploy secara teratur. Episode 20 membahas cara memperlakukan haproxy.cfg seperti produk perangkat lunak yang layak.
Kalian akan membangun pipeline validasi di CI, memilih strategi rollout yang tidak mengganggu trafik, dan menguji perubahan pada lingkungan staging sebelum produksi. Tujuannya satu: perubahan konfigurasi tidak boleh lagi menjadi momen yang menegangkan.
Semua dimulai dari satu perintah yang sudah sering kalian pakai: haproxy -c. Di pipeline, perintah itu menjadi gerbang utama:
name: validate-haproxy
on:
pull_request:
paths:
- "haproxy.cfg"
- "maps/*.map"
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Validate syntax
run: |
docker run --rm -v "$PWD:/config:ro" \
haproxy:2.9-alpine \
haproxy -c -f /config/haproxy.cfgWorkflow di atas menjalankan validasi setiap kali ada perubahan di file konfigurasi. haproxy -c -f /config/haproxy.cfg berjalan di container dengan versi HAProxy yang sama dengan produksi.
Perbedaan versi bisa membuat konfigurasi lolos validasi lokal tapi gagal di produksi. Karena itu:
haproxy -c -d untuk melihat evaluasi direktif.haproxy -c -d -f /etc/haproxy/haproxy.cfghaproxy -c -d -f /etc/haproxy/haproxy.cfg memvalidasi sekaligus menampilkan hasil evaluasi. Berguna untuk menangkap direktif yang salah ketik sejak dini.
Pola blue-green menjaga dua konfigurasi hidup: yang lama dan yang baru. Trafik dipindahkan sebagai satu unit:
haproxy -c -f /etc/haproxy/haproxy-green.cfg || exit 1
cp /etc/haproxy/haproxy-green.cfg /etc/haproxy/haproxy.cfg
systemctl reload haproxyhaproxy -c -f /etc/haproxy/haproxy-green.cfg || exit 1 memastikan konfigurasi baru valid sebelum menggantikan file aktif. Rollback cukup mengembalikan file lama dan reload lagi.
Canary lebih mulus: sebagian kecil trafik diarahkan ke server dengan konfigurasi atau versi baru, sisanya ke yang lama:
backend web_back
balance roundrobin
server stable 10.0.0.11:8080 check weight 90
server canary 10.0.0.12:8080 check weight 10Konfigurasi di atas mengirim 10 persen trafik ke server canary. Jika sehat, naikkan bobotnya bertahap:
echo "set weight web_back/canary 50" | socat stdio /run/haproxy.sockecho "set weight web_back/canary 50" | socat stdio /run/haproxy.sock menggeser trafik tanpa reload. Jika masalah muncul, turunkan weight kembali ke nol.
Jika klaster memakai banyak node HAProxy (episode 13), rollout dilakukan node per node:
echo "set server web_back/node1 state drain" | socat stdio /run/haproxy.sock
systemctl restart haproxy
echo "set server web_back/node1 state ready" | socat stdio /run/haproxy.sockUrutan drain, restart, ready membuat satu node diperbarui tanpa menurunkan layanan secara keseluruhan.
Pengujian yang bermakna butuh lingkungan yang menyerupai produksi:
Selain sintaks, uji perilaku: routing harus mengarah ke backend yang benar.
curl -s -o /dev/null -w "%{http_code}\n" http://staging/api/health
curl -s -o /dev/null -w "%{http_code}\n" http://staging/admin/healthcurl -s -o /dev/null -w "%{http_code}\n" membandingkan status antar path. Uji ini bisa diulang di produksi setelah deploy untuk konfirmasi akhir.
Sebelum release ke produksi, pastikan:
Episode 20 mengubah konfigurasi HAProxy menjadi aset yang dikelola seperti kode: validasi otomatis di CI, rollout yang bertahap dan mudah di-rollback, serta pengujian yang menjamin perilaku sebelum produksi.
Inti yang harus dibawa pulang:
haproxy -c sebagai gerbang wajib di pipeline CI.Di episode 21 selanjutnya kita akan membahas SLOs, SLIs & operational metrics — mendefinisikan SLO untuk trafik HAProxy, menyusun alerting berbasis error rate, latensi, dan saturasi sumber daya, serta menulis runbook untuk insiden trafik dan failover.