Ubuntu 22.04 Sistemlerinde Composer Kurulumu
Bir PHP projesinde uygulama kodu, kullandığı ek kütüphanelerle birlikte anlam kazanır. Bağımlılıkların doğru sürümlerle sisteme eklenmesi, uygulama sürekliliği açısından önemlidir. Composer, bu süreci otomatikleştirerek kurulum ve yapılandırma işlemlerini standart hale getirir. Ubuntu 22.04 üzerinde Composer kurulumu bu yazının konusudur.
Kurulum Öncesi Sistem Gereksinimleri
Composer’ın çalışabilmesi için PHP CLI bileşeninin sistemde yer alması gerekir. Bununla birlikte, bağımlı paketlerin indirilebilmesi ve arşiv dosyalarının açılabilmesi için curl, zip ve unzip araçlarının kurulu olması beklenir. Bu bileşenler sağlandıktan sonra sistem güncel paket yapısıyla çalışmaya hazır hale gelir.
sudo apt update
sudo apt install -y php-cli php-zip unzip curlUbuntu 24.04’te genelde php-zip doğru, ama bazı sistemlerde PHP sürümüne göre php8.x-zip gerekebilir.
Kurulum tamamlandıktan sonra PHP çalışıyor mu kontrol edelim.
php -vComposer ile paket kurulumu sırasında oluşan bazı hatalar, PHP sürüm uyumsuzluğundan kaynaklanır. PHP 7.4.3 kullanılan sistemlerde, PHP 8.x sürümlerine geçiş sürecini açıklayan içeriğe başvurulması önerilir.
Composer Kurulum Dosyasının Temin Edilmesi
Composer’ın güvenli şekilde kurulabilmesi için dosyanın resmi kaynak üzerinden alınması gerekir. İşlemlerin geçici bir dizin altında yapılması, sistem düzeni açısından daha kontrollü bir yaklaşım sağlar.
cd /tmpKurulum dosyasını indirelim.
curl -sS https://getcomposer.org/installer -o composer-setup.php
Kurulum Dosyası Doğrulama
İndirilen dosyanın değiştirilmediğinden emin olmak için hash değerlerini karşılaştıralım.
HASH="$(curl -sS https://composer.github.io/installer.sig)"
php -r "if (hash_file('sha384', 'composer-setup.php') === '$HASH') { echo 'Installer doğrulandı'; } else { echo 'Installer bozuk'; unlink('composer-setup.php'); } echo PHP_EOL;"
Composer’ın Global Erişime Açılması
Composer’ın global erişime açılması, proje dizininden bağımsız olarak kullanılmasını sağlar. Böylece composer komutu sistem genelinde standart bir araç haline gelir.
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composerKurulum tamamlandıktan sonra kurulum dosyasını silelim.
rm -f composer-setup.phpŞimdi Composer’ın düzgün çalıştığını kontrol edelim.
composer --versionGlobal Kurulumu Kontrol Edelim
Composer’ın hangi dizinden çalıştığını görmek, ileride yaşanabilecek sürüm çakışmalarını önler.
which composerBeklenen çıktı genellikle /usr/local/bin/composer şeklindedir.

Yeni Bir Composer Projesi Oluşturalım
Şimdi küçük bir test projesi oluşturalım. Bunun için yeni bir dizin açalım ve Composer’ı başlatalım.
mkdir composer-deneme
cd composer-deneme
composer initBu komut bize proje adı, açıklama ve bağımlılıklarla ilgili sorular sorar. Varsayılan değerlerle ilerleyebiliriz. Bu işlem sonunda proje dizininde composer.json dosyası oluşur.
Bir Paket Kuralım ve Test Edelim
Örnek olarak yaygın kullanılan monolog paketini kuralım.
composer require monolog/monologBu komut
composer.jsondosyasını güncellercomposer.lockoluştururvendor/dizinini meydana getirir
Autoload ile Paketi Kullanalım
Composer ile kurulan paketleri kullanmak için vendor/autoload.php dosyasını dahil edelim. Basit bir test dosyası oluşturalım.
nano test.phpİçeriği aşağıdaki gibi olsun.
<?php
require __DIR__ . '/vendor/autoload.php';
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
$log = new Logger('demo');
$log->pushHandler(new StreamHandler(__DIR__ . '/app.log', Logger::WARNING));
$log->warning('Composer test log');
echo "Çalışıyor\n";Dosyayı çalıştıralım.
php test.php
cat app.logLog dosyası oluşuyorsa Composer doğru şekilde çalışıyor demektir.
Canlı Sunucuda Hangi Komutu Kullanalım
Geliştirme ortamında paket eklemek için composer require kullanılır. Canlı sunucuya geçildiğinde ise genellikle şu komut tercih edilir:
composer installGeliştirme bağımlılıklarını kurmamak için
composer install --no-devPerformans için autoload optimizasyonu ekleyebiliriz.
composer install --no-dev --prefer-dist --optimize-autoloader
composer.json ve composer.lock Dosyalarının Rolü
composer.json dosyası, projenin ihtiyaç duyduğu paketleri ve bu paketler için kabul edilen sürüm aralıklarını tanımlar. Hangi bağımlılıkların kullanılacağı ve hangi sürüm sınırları içinde çalışılacağı bu dosya üzerinden belirlenir. Basit bir composer.json yapısı genellikle aşağıdaki şekilde görülür.
{
"require": {
"monolog/monolog": "^3.0"
}
}Bu tanımlama, Monolog paketinin 3.x serisiyle uyumlu en güncel sürümünün kullanılabileceğini gösterir. Ancak hangi alt sürümün kurulacağı bu aşamada net değildir. composer.lock dosyası ise Composer tarafından otomatik olarak oluşturulur ve kurulan bağımlılıkların kesin sürümlerini içerir. Bu dosya sayesinde proje farklı ortamlarda kurulduğunda birebir aynı paket sürümleri yüklenir. composer.lock içinde ilgili paket aşağıdaki şekilde sabitlenmiş olarak görülebilir.
{
"name": "monolog/monolog",
"version": "3.5.0"
}Burada artık sürüm aralığı değil, kesin sürüm tanımlıdır.
Sık Sorulan Sorular
Composer kurulumu için PHP’nin hangi sürümü gerekir?
Composer, çalıştığı PHP sürümüne bağlıdır. Kullanılan paketlerin gereksinimlerine göre PHP 7.4, 8.0, 8.1 veya 8.2 gibi sürümler gerekebilir. Composer çalışıyor olsa bile, paket kurulumu sırasında PHP sürümü yetersizse hata alınabilir.
composer install ile composer update arasındaki fark nedir?
composer install, varsa composer.lock dosyasını esas alarak aynı sürümleri kurar ve genellikle canlı sunucularda kullanılır. composer update ise bağımlılıkları günceller, yeni sürümleri çözer ve composer.lock dosyasını değiştirir. Bu nedenle update işlemi daha çok geliştirme ortamlarında tercih edilir.
composer.lock dosyası silinirse ne olur?
composer.lock silinirse Composer bağımlılıkları composer.json içindeki sürüm aralıklarına göre yeniden çözer. Bu da farklı paket sürümlerinin kurulmasına ve beklenmeyen hatalara yol açabilir. Özellikle production ortamlarında bu dosyanın silinmesi önerilmez.
vendor dizini versiyon kontrolüne eklenmeli mi?
Genellikle vendor/ dizini Git gibi versiyon kontrol sistemlerine eklenmez. Bunun yerine composer.json ve composer.lock dosyaları repoya dahil edilir ve gerekli paketler composer install ile sunucuda yeniden kurulur.
