Composer menyelesaikan ketergantungan, dan itu menuntut memori serta akses jaringan — keduanya terbatas di hosting bersama. Ia juga mengunduh kode langsung ke server produksi, dan di sanalah tempat terakhir yang Anda inginkan untuk menemukan bahwa sebuah paket telah berubah.

Bentuk yang lebih baik

Selesaikan ketergantungannya di tempat yang punya sumber daya, lalu kirim hasilnya. Dengan begitu server tidak pernah menjalankan Composer sama sekali.

# on your machine or in CI
composer install --no-dev --optimize-autoloader --classmap-authoritative
rsync -az --delete vendor/ user@server:/var/www/site/vendor/
  • --no-dev — kerangka pengujian dan alat pelacak galat tidak berurusan dengan produksi.
  • --optimize-autoloader — peta kelas alih-alih pencarian di sistem berkas, dan percepatan yang bisa diukur.
  • --classmap-authoritative — sama sekali tidak ada panggilan stat cadangan. Pakai hanya bila tidak ada yang membangkitkan kelas saat program berjalan.

Kalau memang harus dijalankan di server

php -d memory_limit=-1 /usr/local/bin/composer install --no-dev --optimize-autoloader

Penghalang yang biasa muncul adalah batas memori. Menaikkannya hanya untuk perintah itu membuat Anda tak perlu menaikkannya bagi seluruh situs.

Masukkan berkas kunci ke repositori, jangan pernah direktori vendor

composer.lock tempatnya di git — dialah yang membuat dua pemasangan menjadi identik. Direktori vendor tidak: ia membuat repositorinya membengkak dan penggabungan menjadi mustahil.

Menerapkan tanpa jendela pecah

Menyalin berkas ke direktori yang sedang melayani berarti sebagian permintaan melihat setengah dari kode barunya. Bangunlah ke direktori baru lalu pindahkan tautan simboliknya, sehingga perubahannya utuh sekali jadi.

ln -sfn /var/www/releases/2026-09-05 /var/www/current
sudo systemctl reload php8.3-fpm       # clear the opcache of the old paths
Muat ulang PHP-FPM setelah penerapan, kalau tidak opcache akan terus menyajikan kode sebelumnya dari memori — lihat Apa yang disinggahkan opcache.