Deployment yang buruk membatalkan semua kerja keras sebelumnya dalam satu menit. Kabar baiknya, deployment Laravel yang aman pada dasarnya adalah urutan tetap yang sama setiap kali — dan justru sifat berulang itulah yang membuatnya bisa diperiksa dengan checklist. Chapter ini memampatkan seluruh section Deployment dan Production menjadi satu runbook: persiapan sebelum rilis, urutan langkah saat rilis, verifikasi sesudahnya, dan resep untuk kegagalan yang paling sering terjadi. Cetak sekali, tempel di sebelah terminal, dan biarkan menjadi refleks saat tombol deploy ditekan.

Pra-Deploy #

Empat hal ini diperiksa sebelum menyentuh server produksi, berurutan dari yang termurah. Keseluruhan pra-deploy yang sehat biasanya hanya memakan waktu di bawah lima belas menit.

  1. Test hijau di lokal dan CI — php artisan test lulus semua; deployment atas test merah adalah undangan insiden.
  2. Backup database terbaru — dump penuh tersimpan dan, lebih penting, sudah dicoba dipulihkan minimal sekali.
  3. Audit dependensi — composer audit bersih, seperti dibahas di Referensi Keamanan .
  4. Tinjau migration baru — perintah DDL berat (tambah kolom NOT NULL, ubah tipe) dipecah agar tidak mengunci tabel besar; pembahasannya di Database Migration Production .

Urutan Langkah Deploy #

#LangkahPerintahCatatan
1Tarik kode terbarugit pull / release artifactmode maintenance belum perlu
2Pasang dependensicomposer install --no-dev --optimize-autoloadertanpa paket dev
3Build aset frontendnpm ci && npm run buildhasilnya di public/build
4Jalankan migrationphp artisan migrate --force--force wajib di produksi
5Bangun semua cachephp artisan optimizeconfig + route + view sekaligus
6Restart queue workerphp artisan queue:restartagar worker memuat kode baru
7Pastikan schedulercron * * * * * php artisan schedule:runcek schedule:list
8Hidupkan aplikasiphp artisan upbila tadi di-maintenance

Langkah 5 dan 6 adalah dua yang paling sering dilupakan. Berikut output nyata php artisan optimize di sandbox Course ini, memperlihatkan empat cache yang dibangun:

text
   INFO  Caching framework bootstrap, configuration, and metadata.

  config ......................................................... 7.23ms DONE
  events ......................................................... 0.94ms DONE
  routes ......................................................... 9.17ms DONE
  views .......................................................... 38.30ms DONE

Sedangkan perintah migrate dengan --force terlihat seperti ini pada kondisi tanpa migration baru — yang justru sinyal sehat bila rilis tidak membawa perubahan skema:

text
   INFO  Nothing to migrate.

Mengapa urutannya penting: migration dijalankan sebelum cache dibangun dan sebelum worker direstart, sehingga saat kode baru mulai melayani request, skema database sudah siap. Simpan tabel ini sebagai skrip atau job di CI — prinsip otomatisasinya dibahas di Deployment Workflow .

Pasca-Deploy #

Menyatakan rilis selesai butuh bukti, bukan perasaan. Jalankan smoke test manual tiga menit berikut.

  1. Buka halaman depan dan satu halaman ber-data (login bila perlu).
  2. Lakukan satu aksi tulis (tambah/ubah data) untuk memastikan migration dan storage/ sehat.
  3. Kirim satu aksi yang menulis ke queue (bila ada), lalu pastikan job terproses.
  4. Amati log selama 15-30 menit pertama: tail -f storage/logs/laravel.log atau php artisan pail.

Untuk pemantauan berkelanjutan, konfigurasi channel dan alertnya dibahas di Logging dan Monitoring , sedangkan prosedur mundur bila semuanya berantakan ada di Rollback dan Recovery .

Satu keputusan yang perlu disepakati sebelum insiden terjadi: kapan memperbaiki maju dan kapan mundur. Aturan praktis kami — bila smoke test gagal pada langkah pertama atau kedua dan penyebabnya belum jelas dalam sepuluh menit, mundur ke versi sebelumnya; rilis yang sehat lebih berharga daripada harga diri. Sebaliknya, bila penyebabnya sudah terbaca di log dan perbaikannya berupa perubahan kecil, memperbaiki maju lebih murah daripada membatalkan seluruh rilis.

Resep Kegagalan Umum #

Gejala pasca-deployPenyebab umumPerbaikan
500 segera setelah deployConfig/route cache basiphp artisan optimize:clear dulu, baru optimize
Permission denied di log/uploadWeb server tak bisa menulis storage/sesuaikan kepemilikan storage/ dan bootstrap/cache
Ekstensi hilang (ext-...)PHP server tanpa ekstensicocokkan composer check-platform-reqs dengan php -m
Halaman lama masih tampilOPcache / worker belum restartrestart php-fpm; queue:restart
Migration macet di tengahTabel besar terkunci DDLpecah migration, gunakan jendela tenang

Bila gejalanya tidak masuk tabel ini, kembali ke prosedur umum di Panduan Debugging — log tetap titik berangkat pertama.

Khusus Deploy Pertama #

Server kosong butuh lima langkah tambahan yang tidak muncul lagi di rilis berikutnya: salin .env produksi (APP_ENV=production, APP_DEBUG=false), jalankan php artisan key:generate, buat symlink php artisan storage:link, pasang entri cron scheduler, dan pasang supervisor untuk queue:work --tries=3 — semuanya dibahas di section Production Environment hingga Queue Worker Production . Jangan lupa mengunci izin folder produksi sesuai Storage Permissions dan menuntaskan Production Security Checklist .

Aplikasi kini hidup di produksi — dan dengan itu seluruh aspek teknis Course ini telah tersambung. Satu hal terakhir yang perlu kita susun adalah arah belajar ke depan: chapter penutup, Roadmap Belajar .