Pengalaman Mengatasi Downtime Saat Redeploy Laravel Project, Dari Chaos ke Zero-Downtime Deployment

Pengalaman Mengatasi Downtime Saat Redeploy Laravel Project, Dari Chaos ke Zero-Downtime Deployment
Momen Paling Menegangkan Buat Developer
Ada satu hal yang selalu bikin jantung developer berdebar lebih kencang daripada chattingan sama crush: deploy ke production.
Buat para developer, momen “push ke master → workflow jalan → aplikasi update” terlihat simpel. Tapi kenyataannya, deploy sering kali terasa seperti berjudi dengan nasib. Kadang lancar, kadang error, dan kadang… downtime.
Downtime ini bukan cuma gangguan teknis — tapi pukulan mental.
Website tiba-tiba tidak bisa diakses, user komplain, error log membludak, dan kamu duduk di depan terminal seperti:
“Lah ini kenapa… barusan masih normal…”
Itulah fase yang aku alami beberapa waktu lalu ketika melakukan redeploy blog Laravel aku.
Dan pengalaman itu menjadi pelajaran penting yang akhirnya mendorongku memperbaiki workflow deployment menjadi lebih profesional — bahkan hampir zero downtime.
Artikel panjang ini adalah cerita lengkapnya.
Ketika Pertama Kali Mengalami Downtime
Deploy sore itu awalnya biasa saja.
Aku push commit kecil—hanya update UI ringan. GitHub Actions mulai berjalan, dan aku cuek sambil lanjut buka YouTube.
Beberapa menit kemudian, aku coba buka blog.
Tapi yang muncul malah:
500 | Server Error
Hati langsung mencelos.
Aku cek lagi—masih error.
Aku buka terminal server, lihat log — ternyata error vendor tidak lengkap.
Baru sadar:
Composer install sedang berjalan, dan user mengakses website saat vendor setengah jadi.
Inilah salah satu konsekuensi terbesar dari cara deploy lamaku.
Apa yang sebenarnya terjadi?
Workflow YAML lamaku berjalan begini:
- Archive dikirim ke server
- Extract langsung ke folder production
- Composer install dijalankan langsung di production
- baru kemudian caching & migrate
Masalahnya?
- Ketika tar xzf overwrite file saat website sedang aktif, beberapa file sempat hilang.
- Composer install belum selesai, tapi request sudah masuk.
- Vendor incomplete = Laravel error fatal.
- Website down hingga deploy selesai.
Maintenance mode seharusnya membantu…
Tapi Laravel masuk ke maintenance setelah file sudah diextract.
Keburu down duluan.
Saat itu aku benar-benar mikir:
“Kalau blog kecil gini bisa down, gimana kalau nanti deploy aplikasi client? Bisa gawat.”
Panik, malu, dan langsung belajar banyak hal dari insiden itu.
Masalah dari Workflow Lama
Setelah menenangkan diri, aku audit YAML lama.
Masalahnya cukup jelas.
Extract ke Production
Ini seperti mengubah mesin mobil sambil mobil tetap berjalan. Mustahil tidak error.
Composer Install di Production
Composer itu berat.
Ketika vendor berubah saat aplikasi berjalan, error pasti muncul.
Tidak Ada Staging
Build dan deploy dilakukan di folder yang sama.
Parahnya lagi, user tetap akses folder itu.
Maintenance Mode Terlambat
Maintenance-nya masuk setelah overwrite terjadi.
Sudah tidak ada artinya.
Singkatnya:
Aku deploy langsung ke “rumah asli”, bukan ke “ruang kerja sementara”.
Ini kesalahan umum developer pemula — dan aku juga pernah melakukannya.
Aha Moment — Waktu Menemukan Cara Zero Downtime
Setelah banyak baca, nonton tutorial DevOps, dan eksperimen, aku menemukan konsep yang menjawab semua masalah ini:
Atomic Deployment
Prinsipnya simpel:
- Jangan sentuh production sampai semuanya benar-benar siap.
- Build di folder staging
- Test di staging
- Sinkronkan ke production dengan proses cepat (rsync)
- Production hanya menerima versi final yang lengkap
Ketika paham ini, aku langsung sadar:
“Oh… pantes kenapa workflow lama bikin chaos. Aku build di tempat yang salah!”
Membangun Workflow Deployment Baru
Aku mulai dari nol dan menyusun ulang YAML GitHub Actions.
Staging Directory
Alih-alih extract ke production, file dikirim ke:
/var/www/blog.fiandev.com-staging
Di sinilah semua:
- archive diextract
- composer install dijalankan
- permission diset
- .env disalin
Production tetap aman.
User tetap bisa akses website tanpa gangguan.
Sync Menggunakan rsync
Setelah staging sudah siap, langkah berikutnya adalah menyalin hasil build ke production:
rsync -a --delete --exclude '.env' STAGING/ PRODUCTION/
Rsync bekerja dalam milidetik — jauh lebih cepat daripada copy biasa atau extract langsung.
Downtime? Hampir tidak ada.
Permission
Setelah sync, permission diatur ulang supaya Laravel tidak error.
Laravel Optimize
Semua cache dibuat setelah file final pindah, bukan sebelumnya.
Migration dengan Guard
php artisan migrate || true
Jika ada migration yang sudah terpasang, workflow tidak gagal.
Cleanup
Archive dibuang.
Dengan ini semua, deploy menjadi proses yang:
- aman
- bersih
- stabil
- cepat
Penyelamat yang Mengurangi Downtime Hingga Hampir Nol
Bagian YAML baru benar-benar mengubah semuanya.
Dulu:
- downtime 10–30 detik
- user sempat lihat error
- vendor incomplete
- file overwritten
Sekarang?
- downtime hampir tidak terasa
- production selalu konsisten
- composer berjalan di tempat aman
- rsync cepat sekali
Setelah menguji beberapa kali, hasilnya memuaskan.
Aku bisa deploy kapan saja tanpa deg-degan.
Pelajaran Berharga dari Insiden Downtime
1. Deploy Bukan Sekadar Push
Ini bukan proses trivial.
Environment harus aman dan terkontrol.
2. Jangan Build di Production
Kesalahan klasik semua pemula.
3. Staging Wajib Kalau Mau Zero Downtime
Tidak ada jalan pintas lain.
4. Permission Itu Konsistensi
Salah permission = error fatal.
5. Error Adalah Guru Terbaik
Pengalaman buruk itu mahal…
tapi justru itulah yang membuat developer berkembang.
Penutup, Dari Downtime Memalukan Menjadi Deployment Profesional
Sekarang, proses deploy terasa seperti perjalanan upgrade skill.
Dulu aku deploy dengan naïf dan berharap keberuntungan.
Sekarang aku deploy dengan sistem, strategi, dan workflow yang aman.
Dulu aku takut push ke production.
Sekarang aku bisa deploy kapan saja tanpa anxiety.
Masalah downtime itu memalukan, iya.
Tapi justru dari rasa malu itulah aku belajar membuat pipeline yang lebih elegan, aman, dan profesional.
Kalau kamu developer pemula, percayalah:
- Jangan takut salah.
- Jangan takut error.
- Yang penting kamu belajar memperbaiki workflow-mu.
Dan jika suatu hari deploy-mu bikin website down…
ingat cerita ini:
Downtime bukan akhir dari segalanya.
Kadang itu justru awal dari versi terbaik seorang developer.
Written by
Alfiansa
Just someone that loves coding