PHP kurulumu genel olarak kolaydır ancak yüksek trafikli bir sitede verimli çalışmasını sağlamak optimize edilmemiş bir PHP ile imkansızdır. Bu rehberde Ubuntu üzerinde en güncel PHP versiyonunun kurulumunu (PHP-FPM ile) görecek ve yüksek performans sağlaması için opcache, realpath_cache ve FPM worker ayarlarını optimize edeceğiz.
Adım 1: PHP ve PHP-FPM Kurulumu
Ubuntu'nun varsayılan repoları her zaman en güncel PHP sürümünü sunmayabilir. Bu yüzden Ondrej Sury repolarını kullanacağız:
# Gerekli yazılımları kur
sudo apt update
sudo apt install software-properties-common apt-transport-https
# Ondrej PPA eklentisini dahil et
sudo add-apt-repository ppa:ondrej/php
sudo apt update
# PHP 8.2 ve gerekli Nginx uyumlu modüllerin kurulumu
sudo apt install php8.2 php8.2-fpm php8.2-mysql php8.2-mbstring php8.2-xml php8.2-curl php8.2-zip
Kurulum durumunu test et:
php -v
systemctl status php8.2-fpm
Adım 2: php.ini Üzerinde Performans Optimizasyonu
PHP-FPM için `php.ini` dosyası genellikle `/etc/php/8.2/fpm/php.ini` dizinindedir:
sudo nano /etc/php/8.2/fpm/php.ini
Aşağıdaki değerleri bularak proje yüküne göre düzenle:
# Bellek Limiti
memory_limit = 256M
# Tek Seferde Maksimum Yüklenecek Dosya Boyutu
upload_max_filesize = 64M
post_max_size = 64M
# Çalıştırma sınırları
max_execution_time = 60
max_input_time = 60
# Dizin yolu belleğe alma (I/O Optimizasyonu)
realpath_cache_size = 4096K
realpath_cache_ttl = 600
💡 NVMe Destekli Altyapı ile Süper Hız
PHP betikleri ne kadar iyi optimize edilirse edilsin, disk tarafında takılırsa hızlanamazlar. HazalHost VDS sunucularında NVMe diskler ile betiklerinizin I/O darboğazlarına takılmasına engel olun.
Adım 3: OPcache Aktivasyonu ve Ayarları
OPcache, önceden derlenmiş bytecode'ları RAM'de saklayarak PHP'nin her istekte aynı dosyaları baştan ayrıştırmasını (compile) engeller. Hala `php.ini` dosyasının içindeyken (veya `10-opcache.ini` içinde):
[opcache]
# Aktif et
opcache.enable=1
# Opcache için ayrılacak bellek (RAM'ine göre 128 - 256MB verebilirsin)
opcache.memory_consumption=128
# Cache'lenecek maksimum dosya sayısı (Projendeki PHP dosya sayısı)
opcache.max_accelerated_files=10000
# String önbellekleme
opcache.interned_strings_buffer=16
# Zaman doğrulamasını kapat (Canlı Ortam - Production İçin)
# Eğer bir dosyada kod güncellersen cache'in silinmesi gerekir (veya FPM restart)
opcache.validate_timestamps=0
Adım 4: PHP-FPM Pool (www.conf) Ayarları
Gerçek performans kazanımı FPM işlemlerinin yönetildiği yerdir. `www.conf` dosyasını yapılandıracağız.
sudo nano /etc/php/8.2/fpm/pool.d/www.conf
Sunucunun RAM değerlerine göre bu bölümü düzenleyelim. "ondemand" veya "dynamic" modülünü kullanabilirsin ancak çok trafikli sitelerde "static" tercih edilir (daha fazla RAM kullanır, daha yüksek dönüş yapar).
# Process yöneticisini dynamic yapalım
pm = dynamic
# Maksimum child sayısı: Yüksek tutarsanız daha çok ram tüketir.
# Örn: (Total Ram - 1024) / 60
pm.max_children = 50
# Başlangıç process sayısı
pm.start_servers = 10
# Boşta bekleyecek minimum process
pm.min_spare_servers = 5
# Boşta bekleyecek maximum process
pm.max_spare_servers = 20
# Memory leak (bellek sızıntısı) önlemek için işlemi periyodik olarak sıfırlama
pm.max_requests = 1000
# Yapılandırmaları test et ve yeniden başlat
sudo php-fpm8.2 -t
sudo systemctl restart php8.2-fpm
🚀 Yavaş Siteleri Unut! Yüksek Performanslı VDS Seçimi
Memory_limit, Opcache ayarlarına ek olarak sunucunun sağladığı doğal donanım gücü her şeyin temelidir. Yüksek CPU saat hızlı ve NVMe diskli HazalHost VDS paketleriyle tanış.
Sonuç
PHP kurulumu esnasında FPM kullanarak web sunucun (Nginx veya Apache) üzerinden hızlı, OPcache aktifleştirerek bellekli çalışmasını sağladın. Özellikle OPcache validate_timestamps=0 ayarı, disk okumasını inanılmaz ölçüde rahatlatacaktır. Unutma; bu ayarı yaparsan PHP dosyalarını güncellediğinde FPM servisini de restart etmelisin.
Sık Sorulan Sorular (FAQ)
PHP-FPM ile PHP-CGI arasındaki fark nedir?
PHP-FPM, CGI yapısına göre çok daha gelişmiş bellek yönetimi sunar. Child processleri ayakta tutar, yeniden başlatmaya gerek duymadan bir sonraki isteği direkt alabilir, bu da performansı katlar.
opcache.validate_timestamps=0 yapınca sitede değişikliklerim neden görünmüyor?
Çünkü PHP artık dosyanın değişip değişmediğini kontrol etmiyor. Kodunuzu yayına aldıktan sonra sudo systemctl restart php8.2-fpm komutunu çalıştırarak Opcache'i boşaltmalısınız.
PHP bellek limitini ne kadar ayarlamalıyım?
Standart bir Wordpress veya Laravel projesi için 128M ile 256M idealdir. Fazladan RAM limit koymak uygulamanın çökmesini engellemeyebilir, scriptteki memory_leak problemini çözmeniz gerekebilir.