# FreeBSD 12.0’da Apache HTTP, MPM Event ve PHP-FPM Kurulumu ve Optimizasyonu
Yüksek trafikli bir web siteniz var ve performans sorunlarıyla boğuşuyorsunuz. Apache’iniz yavaş çalışıyor, kaynak tüketimi yüksek ve kullanıcı deneyimi olumsuz etkileniyor. Bu makalede, FreeBSD 12.0 üzerinde Apache HTTP sunucusunu MPM Event ile yapılandırarak ve PHP-FPM’i entegre ederek bu sorunlara nasıl çözüm bulabileceğinizi adım adım öğreneceksiniz. Performans optimizasyonuna odaklanarak, sisteminizi daha verimli ve ölçeklenebilir hale getireceğiz.
Öğrenme Yol Haritası:
* Yeni Başlayan: Temel kurulum adımları, basit bir web uygulamasıyla uygulama.
* Orta: Gerçek dünya senaryoları, performans optimizasyon ipuçları ve log analizleri.
* İleri Düzey: Performans analizi araçları kullanımı, edge case’ler ve özel durum yönetimi.
1. Temel Kavramlar: Apache, MPM Event ve PHP-FPM
Öncelikle, kullanacağımız temel bileşenleri anlamak önemlidir. Apache HTTP Server, web sunucumuzdur. MPM (Multi-Processing Module), Apache’in nasıl çalıştığına karar veren modüldür. MPM Event, yüksek performanslı, çok iş parçacıklı bir model kullanarak çok sayıda eş zamanlı bağlantıyı verimli bir şekilde işler. PHP-FPM (FastCGI Process Manager), PHP betiklerinin daha hızlı ve verimli bir şekilde çalıştırılmasını sağlar. Bu üç bileşeni bir araya getirerek, yüksek performanslı bir web sunucusu kuracağız. FreeBSD’nin sağlam ve güvenilir altyapısı, bu kurulum için ideal bir zemin oluşturur.
2. FreeBSD Sisteminin Hazırlanması: Paket Yönetimi ve Gerekli Yazılımlar
Öncelikle FreeBSD sisteminizin güncel olduğundan emin olmalısınız. Bunun için pkg update ve ardından pkg upgrade komutlarını çalıştırın. Daha sonra, Apache, PHP ve PHP-FPM paketlerini yüklememiz gerekiyor. FreeBSD’nin pkg sistemi ile bu işlem oldukça kolaydır:
pkg install apache24 php81 php81-fpm
Bu komut, Apache 2.4, PHP 8.1 ve PHP-FPM’i sisteminize kuracaktır. Farklı PHP sürümleri için paket isimlerini buna göre değiştirmeniz gerekebilir. Kurulumdan sonra, Apache ve PHP-FPM servislerini başlatmanız ve otomatik başlatmayı etkinleştirmeniz gerekir:
service apache24 start
service php81-fpm start
sysrc apache24_enable="YES"
sysrc php81-fpm_enable="YES"
3. Apache’i MPM Event ile Yapılandırma
Apache’in MPM Event modülünü kullanmasını sağlamak için httpd.conf dosyasını düzenlememiz gerekiyor. Bu dosya genellikle /usr/local/etc/apache24/httpd.conf yolunda bulunur. Dosyayı düzenlemek için nano veya tercih ettiğiniz bir metin editörünü kullanabilirsiniz. httpd.conf dosyasında aşağıdaki satırı bulup prefork yerine event olarak değiştirin:
# Listen 80
Listen 8080 # Örnek port numarası, 80'i tercih edebilirsiniz.
<IfModule mpm_prefork_module>
# Bu bölümü yorum satırı yapın veya silin.
</IfModule>
<IfModule mpm_event_module>
# Event MPM ayarlarını burada yapabilirsiniz. Örneğin:
StartServers 5
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxClients 1000
MaxRequestsPerChild 10000
</IfModule>
Bu ayarlar örnektir ve sisteminizin kaynaklarına göre ayarlanmalıdır. StartServers, MinSpareThreads, MaxSpareThreads, ThreadsPerChild ve MaxClients değerlerini sisteminizin performansına göre ayarlamak önemlidir. Daha fazla bilgi için Apache dökümanlarına bakabilirsiniz. Değişiklikleri kaydettikten sonra Apache servisini yeniden başlatın:
service apache24 restart
4. PHP-FPM Yapılandırması: Socket ve Performans Ayarları
PHP-FPM’in çalışması için Apache ile iletişim kuracağı bir socket tanımlamamız gerekiyor. PHP-FPM’in konfigürasyon dosyası genellikle /usr/local/etc/php-fpm.conf veya /usr/local/etc/php-fpm.d/www.conf yolunda bulunur. Bu dosyayı düzenleyerek listen direktifini aşağıdaki gibi değiştirebilirsiniz:
listen = /var/run/php-fpm.sock
Bu, PHP-FPM’in /var/run/php-fpm.sock dosyasında bir socket dinleyeceği anlamına gelir. Bu dosyanın oluşturulması ve yetkilerinin düzgün ayarlanması önemlidir. Ayrıca, pm (process manager) tipinin dynamic olarak ayarlandığından emin olun ve pm.max_children, pm.start_servers, pm.min_spare_servers ve pm.max_spare_servers gibi parametreleri sisteminizin kaynaklarına uygun şekilde ayarlayın. Örneğin:
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 30
Bu ayarlar da örnektir ve sisteminizin yüküne ve kaynaklarına göre ayarlanmalıdır. Değişiklikleri kaydettikten sonra PHP-FPM servisini yeniden başlatın:
service php81-fpm restart
5. Apache ve PHP-FPM Entegrasyonu: Virtual Host Yapılandırması
Apache’i PHP-FPM ile entegre etmek için bir virtual host dosyası oluşturmanız gerekiyor. Örnek bir virtual host konfigürasyonu şöyle olabilir:
<VirtualHost *:8080>
ServerName www.ornek.com
ServerAlias ornek.com
DocumentRoot /var/www/html/ornek
<Directory /var/www/html/ornek>
AllowOverride All
Require all granted
</Directory>
SetEnv APPLICATION_ENV "development" # Çevre değişkeni örneği
<FilesMatch \.php$>
SetHandler "proxy:unix:/var/run/php-fpm.sock|fcgi://localhost"
</FilesMatch>
</VirtualHost>
Bu konfigürasyon, www.ornek.com ve ornek.com domainlerini /var/www/html/ornek dizinine yönlendirir ve .php uzantılı dosyalar için PHP-FPM’i kullanır. SetEnv direktifi ile uygulama ortam değişkeni ayarlayabilirsiniz. Bu dosyayı /usr/local/etc/apache24/vhosts.d dizinine kaydedin (dizin yoksa oluşturun) ve Apache’i yeniden başlatın.
6. Gerçek Dünya Senaryosu: E-Ticaret Sitesi Optimizasyonu
Örneğin, yüksek trafikli bir e-ticaret sitesi için, yukarıdaki adımların yanı sıra, daha fazla performans iyileştirmesi için önbellekleme mekanizmaları (Redis, Memcached) ve içerik dağıtım ağı (CDN) kullanmak faydalı olabilir. Ayrıca, Apache ve PHP-FPM’in log dosyalarını düzenli olarak izleyerek performans darboğazlarını tespit edebilir ve gerekli optimizasyonları yapabilirsiniz. top, htop gibi sistem izleme araçlarını kullanarak sistem kaynaklarının kullanımını takip edebilirsiniz. [Fatih Soysal’ın blogunda](https://fatihsoysal.com) performans optimizasyonu hakkında daha detaylı makaleler bulabilirsiniz.
7. Performans Optimizasyonu ve Ölçeklendirme
Performans optimizasyonu sürekli bir süreçtir. Sisteminizin performansını düzenli olarak izleyerek ve gerekli ayarlamaları yaparak en iyi performansı elde edebilirsiniz. Yüksek trafik durumlarında, Apache ve PHP-FPM’in çalıştığı sunucuyu ölçeklendirmeniz gerekebilir. Bunun için, daha fazla işlemci gücü, bellek ve disk I/O kapasitesi sağlayan daha güçlü bir sunucuya geçebilir veya yük dengeleme (load balancing) kullanabilirsiniz.
8. Hata Ayıklama ve Log Analizi
Kurulum sırasında veya sonrasında sorunlarla karşılaşırsanız, Apache ve PHP-FPM’in log dosyalarını kontrol etmek önemlidir. Bu log dosyaları, hataları tespit etmenize ve sorunları çözmenize yardımcı olacaktır. Apache’in log dosyaları genellikle /var/log/apache24 dizininde bulunurken, PHP-FPM’in log dosyası konfigürasyon dosyasında belirtilen yolda bulunur. tail -f komutu ile log dosyalarını gerçek zamanlı olarak izleyebilirsiniz.
9. Güvenlik Önlemleri
Güvenlik, her web sunucusu için kritik öneme sahiptir. Apache ve PHP-FPM’i güvenli bir şekilde yapılandırmak için, güvenlik duvarı (firewall) kullanmalı, güncellemeleri düzenli olarak uygulamalı ve güvenlik açıklarını gidermelisiniz. Ayrıca, şifreleme (SSL/TLS) kullanarak web sitenizi güvence altına almalısınız.
Sonuç
Bu makalede, FreeBSD 12.0 üzerinde Apache HTTP, MPM Event ve PHP-FPM’i nasıl kuracağınızı ve yapılandıracağınızı adım adım öğrendiniz. Performans optimizasyonu ipuçları ve gerçek dünya senaryoları ile sisteminizi daha verimli ve ölçeklenebilir hale getirmeyi hedefledik. Ancak, sisteminizin özel gereksinimlerine göre ayarları değiştirmeniz gerekebilir. Unutmayın ki, performans optimizasyonu sürekli bir süreçtir ve sisteminizin performansını düzenli olarak izleyerek gerekli ayarlamaları yapmalısınız.
Sıkça Sorulan Sorular:
1. Apache’i farklı bir portta nasıl çalıştırırım? Listen direktifini httpd.conf dosyasında değiştirerek farklı bir port numarası belirleyebilirsiniz.
2. PHP-FPM’in socket dosyasının izinleri nasıl ayarlanmalıdır? Socket dosyasının sahibi ve grubu www olmalı ve 660 izinlerine sahip olmalıdır.
3. Performans sorunlarını nasıl tespit ederim? Apache ve PHP-FPM’in log dosyalarını inceleyin, sistem izleme araçlarını kullanın ve profil oluşturma araçlarıyla kodunuzun performansını analiz edin.
4. Yüksek trafik durumunda sistemimi nasıl ölçeklendirebilirim? Daha güçlü bir sunucuya geçin veya yük dengeleme kullanın.
5. Güvenlik açıklarını nasıl önlerim? Güvenlik duvarı kullanın, güncellemeleri düzenli olarak uygulayın, güvenlik açıklarını giderin ve şifreleme kullanın.
Yazar: Fatih Soysal
