Deployment
Deploy Laravel dengan Docker di VPS: Checklist yang Sering Terlupakan Tim Kecil
Deploy Laravel di VPS dengan Docker terlihat sederhana, tapi banyak error produksi justru muncul dari detail kecil seperti proxy trust, storage mount, dan urutan command build.
Kenapa checklist deploy masih penting
Banyak tim kecil merasa proses deploy Laravel dengan Docker sudah selesai begitu container berhasil up. Padahal, titik rawan sebenarnya sering baru muncul setelah aplikasi live: file upload tidak jalan, asset salah protocol, cron tidak jalan, queue menumpuk, atau URL yang terbentuk salah karena reverse proxy tidak dipercaya dengan benar.
Checklist deploy bukan soal formalitas. Ia membantu mencegah bug yang mahal di jam operasional.
1. Pisahkan source code dan data runtime
Pola yang paling aman adalah memisahkan folder aplikasi menjadi:
repo/untuk source codeshared/untuk.envdan storage persistenlogs/untuk kebutuhan logging terpisah
Ini membantu saat redeploy, rollback, dan backup. Jangan campur semua file ke satu tempat kalau ingin deploy lebih rapi dalam jangka panjang.
2. Jangan mengandalkan symlink host-style di dalam image
Kalau aplikasi Laravel butuh .env fisik dan storage yang persisten, mount langsung ke path yang benar di container. Misalnya:
../shared/.env:/var/www/html/.env../shared/storage:/var/www/html/storage
Banyak masalah muncul ketika symlink dari host ikut tercopy ke image, lalu ternyata tidak valid di dalam container.
3. Pastikan reverse proxy benar-benar dipercaya
Kalau Laravel berada di balik Caddy, Nginx, atau load balancer HTTPS, trust proxy wajib benar. Tanpa ini, aplikasi bisa menganggap request datang sebagai HTTP biasa. Dampaknya bisa berupa mixed content, canonical URL salah, callback URL kacau, atau redirect aneh.
4. Perhatikan urutan command build dan runtime
Jangan asal memasukkan semua command artisan ke Docker build stage. Beberapa command bergantung pada env atau storage runtime yang belum ada saat build. Dalam banyak kasus, lebih aman menjalankan command tertentu setelah container hidup.
Contoh yang sering bikin masalah adalah package:discover, cache config, atau command yang membaca storage yang belum termount.
5. Cek upload limit dari dua sisi
Masalah upload sering tidak berasal dari Laravel saja. Biasanya ada minimal dua lapis yang perlu dicek:
- web server seperti Nginx (
client_max_body_size) - PHP (
upload_max_filesizedanpost_max_size)
Kalau salah satu terlalu kecil, user tetap akan gagal upload meskipun logic aplikasi sudah benar.
6. Queue, scheduler, dan background jobs jangan dilupakan
Aplikasi bisa tampak normal di permukaan, padahal email tidak terkirim, invoice tidak dibuat, atau job sinkronisasi tidak pernah jalan. Pastikan worker queue dan scheduler memang dijalankan, bukan hanya diasumsikan ada.
7. Siapkan langkah recovery yang sederhana
Deploy yang sehat bukan hanya soal cara naik, tapi juga cara pulih ketika sesuatu gagal. Minimal, tim perlu tahu:
- cara rebuild container bersih
- cara restart service
- cara cek logs utama
- cara memastikan container lama tidak mengunci nama atau port
Langkah recovery sederhana sering menyelamatkan lebih banyak waktu daripada setup yang terlalu rumit.
Penutup
Deploy Laravel dengan Docker di VPS tidak harus rumit, tapi memang perlu disiplin di detail kecil. Untuk tim kecil, checklist yang jelas lebih berharga daripada arsitektur yang terlalu ambisius. Tujuannya bukan terlihat canggih, tapi membuat produksi lebih tenang.
Lanjut eksplorasi
Kalau artikel ini relevan dengan kebutuhan implementasi atau source code siap pakai, lanjutkan ke katalog produk atau baca artikel teknis lain yang masih berhubungan.