Web sunucusu yönetiminde en sık karşılaşılan durumlardan biri, farklı PHP sürümlerine ihtiyaç duyan birden fazla uygulamayı aynı sunucuda çalıştırma gereksinimidir. Bir müşterinin eski WordPress sitesi PHP 7.4 isterken, yeni geliştirdiğin Laravel uygulaması PHP 8.2 gerektiriyor olabilir. OpenLiteSpeed bu konuda oldukça esnek bir yapı sunuyor ve doğru yapılandırıldığında aynı sunucuda birden fazla PHP sürümünü sorunsuz şekilde çalıştırabiliyorsun.
OpenLiteSpeed ve PHP İlişkisi
OpenLiteSpeed, Apache veya Nginx’ten farklı olarak PHP’yi bir FastCGI işleyici üzerinden değil, doğrudan LiteSpeed SAPI (LSAPI) aracılığıyla çalıştırıyor. Bu yaklaşım hem performans hem de esneklik açısından ciddi avantajlar sağlıyor. LSAPI, PHP-FPM’e kıyasla bellek tüketimini düşürürken istek işleme hızını artırıyor.
Her PHP sürümü için ayrı bir lsphp paketi kuruyorsun ve bu paketler birbirinden bağımsız çalışıyor. Yani PHP 7.4 ile PHP 8.2’yi aynı anda aktif tutabilir, her sanal ana makine (virtual host) için istediğin sürümü bağımsız olarak atayabilirsin.
Kurulum öncesinde sunucunun güncel olduğundan emin ol:
sudo apt update && sudo apt upgrade -y
# Eğer OpenLiteSpeed henüz kurulu değilse:
wget -O - https://repo.litespeed.sh | sudo bash
sudo apt install openlitespeed -y
LiteSpeed PHP Depolarını Eklemek
PHP paketleri için LiteSpeed’in kendi deposunu kullanman gerekiyor. Bu depo lsphp ön ekiyle paketleri sunuyor ve standart PHP paketlerinden bağımsız çalışıyor.
# LiteSpeed deposu zaten ekli olmalı, kontrol et:
cat /etc/apt/sources.list.d/litespeed.list
# Depo yoksa ekle:
wget -O - https://repo.litespeed.sh | sudo bash
sudo apt update
Kullanılabilir lsphp sürümlerini listelemek için:
apt-cache search lsphp | grep -E "^lsphp[0-9]" | sort
Bu komut sana şuna benzer bir çıktı verecek:
lsphp74 - PHP 7.4 for LiteSpeed
lsphp80 - PHP 8.0 for LiteSpeed
lsphp81 - PHP 8.1 for LiteSpeed
lsphp82 - PHP 8.2 for LiteSpeed
lsphp83 - PHP 8.3 for LiteSpeed
Birden Fazla PHP Sürümü Kurma
Şimdi ihtiyacımız olan PHP sürümlerini kuralım. Ben bu yazıda PHP 7.4 ve PHP 8.2’yi birlikte kullanacağım bir senaryo üzerinden gideceğim. Gerçek ortamlarda eski bir Joomla sitesi için 7.4, aktif geliştirme yapılan bir proje için 8.2 kullanmak oldukça yaygın.
# PHP 7.4 ve yaygın eklentilerini kur
sudo apt install lsphp74 lsphp74-common lsphp74-mysql lsphp74-curl
lsphp74-json lsphp74-opcache lsphp74-mbstring lsphp74-xml
lsphp74-zip lsphp74-gd lsphp74-imagick -y
# PHP 8.2 ve eklentilerini kur
sudo apt install lsphp82 lsphp82-common lsphp82-mysql lsphp82-curl
lsphp82-opcache lsphp82-mbstring lsphp82-xml
lsphp82-zip lsphp82-gd lsphp82-imagick -y
Kurulum sonrası binary dosyalarının konumlarını doğrula:
ls -la /usr/local/lsws/lsphp74/bin/
ls -la /usr/local/lsws/lsphp82/bin/
Her sürüm için PHP CLI ile versiyon kontrolü yap:
/usr/local/lsws/lsphp74/bin/php74 -v
/usr/local/lsws/lsphp82/bin/php82 -v
OpenLiteSpeed WebAdmin Üzerinden PHP Handler Tanımlama
OpenLiteSpeed’i genellikle WebAdmin arayüzü üzerinden yönetiyorsun. Varsayılan olarak https://sunucu-ip:7080 adresinde erişilebilir. Ama her şeyi komut satırından da yapabilirsin, config dosyaları oldukça sade bir yapıda.
WebAdmin arayüzünden PHP handler ekleme adımları:
- Server sekmesine git
- External App bölümünü seç
- Add butonuna tıkla
- Type olarak LiteSpeed SAPI App seç
- Her PHP sürümü için ayrı bir external app tanımla
Komut satırı yolunu tercih edenlerin doğrudan config dosyasını düzenlemesi gerekiyor. Ana server konfigürasyonu /usr/local/lsws/conf/httpd_config.conf dosyasında:
sudo nano /usr/local/lsws/conf/httpd_config.conf
extProcessor bloklarını aşağıdaki gibi ekle:
extProcessor lsphp74 {
type lsapi
address uds://tmp/lshttpd/lsphp74.sock
maxConns 35
env PHP_LSAPI_CHILDREN=35
initTimeout 60
retryTimeout 0
persistConn 1
pcKeepAliveTimeout
respBuffer 0
autoStart 1
path /usr/local/lsws/lsphp74/bin/lsphp
backlog 100
instances 1
priority 0
memSoftLimit 2047M
memHardLimit 2047M
procSoftLimit 400
procHardLimit 500
}
extProcessor lsphp82 {
type lsapi
address uds://tmp/lshttpd/lsphp82.sock
maxConns 35
env PHP_LSAPI_CHILDREN=35
initTimeout 60
retryTimeout 0
persistConn 1
pcKeepAliveTimeout
respBuffer 0
autoStart 1
path /usr/local/lsws/lsphp82/bin/lsphp
backlog 100
instances 1
priority 0
memSoftLimit 2047M
memHardLimit 2047M
procSoftLimit 400
procHardLimit 500
}
Script Handler Tanımlama
External app tanımladıktan sonra, .php uzantısının hangi işleyiciye yönlendirileceğini belirtmen gerekiyor. Bu tanımı hem global düzeyde hem de sanal ana makine düzeyinde yapabilirsin.
Global düzeyde (tüm siteler için varsayılan) script handler tanımlamak:
scriptHandler {
suffix php
type lsapi
handler lsphp82
}
Bu tanımı WebAdmin arayüzünde Server > Script Handler bölümünden de ekleyebilirsin.
Sanal Ana Makine Bazında PHP Sürümü Atama
İşte asıl konu burası. Her virtual host için farklı PHP sürümü atamak istiyorsan, ilgili sanal ana makine konfigürasyonunu düzenlemelisin.
Sanal ana makine config dosyaları genellikle şu konumda bulunur:
ls /usr/local/lsws/conf/vhosts/
Örneğin eski-site.com için PHP 7.4, yeni-proje.com için PHP 8.2 kullanmak istiyorsan:
# Eski site konfigürasyonunu düzenle
sudo nano /usr/local/lsws/conf/vhosts/eski-site.com/vhconf.conf
Bu dosyaya şu bloğu ekle veya mevcut scriptHandler bloğunu güncelle:
scriptHandler {
suffix php
type lsapi
handler lsphp74
}
Yeni proje için:
sudo nano /usr/local/lsws/conf/vhosts/yeni-proje.com/vhconf.conf
scriptHandler {
suffix php
type lsapi
handler lsphp82
}
Değişiklikleri uygulamak için OpenLiteSpeed’i graceful restart ile yeniden başlat:
sudo /usr/local/lsws/bin/lswsctrl restart
# Veya graceful reload için:
sudo kill -USR1 $(cat /usr/local/lsws/logs/lshttpd.pid)
PHP Sürümünü Doğrulama
Her şeyin doğru çalışıp çalışmadığını kontrol etmek için her iki sitede de basit bir PHP info sayfası oluştur:
# Eski site için test dosyası
echo "<?php phpinfo(); ?>" | sudo tee /var/www/eski-site.com/phpinfo.php
# Yeni proje için test dosyası
echo "<?php phpinfo(); ?>" | sudo tee /var/www/yeni-proje.com/phpinfo.php
Tarayıcıdan http://eski-site.com/phpinfo.php adresine girdiğinde PHP 7.4 bilgilerini, http://yeni-proje.com/phpinfo.php adresine girdiğinde PHP 8.2 bilgilerini görmelisin. Test bittikten sonra bu dosyaları silmeyi unutma.
sudo rm /var/www/eski-site.com/phpinfo.php
sudo rm /var/www/yeni-proje.com/phpinfo.php
PHP.ini Ayarlarını Özelleştirme
Her PHP sürümünün kendi php.ini dosyası var. Bu dosyalar genellikle şu konumlarda:
# PHP 7.4 için
/usr/local/lsws/lsphp74/etc/php/7.4/litespeed/php.ini
# PHP 8.2 için
/usr/local/lsws/lsphp82/etc/php/8.2/litespeed/php.ini
Örneğin büyük dosya yüklemelerine izin veren bir e-ticaret sitesi için PHP 8.2 ayarlarını düzenleyelim:
sudo nano /usr/local/lsws/lsphp82/etc/php/8.2/litespeed/php.ini
Aşağıdaki değerleri ihtiyaca göre ayarla:
; Bellek limiti
memory_limit = 512M
; Maksimum yürütme süresi
max_execution_time = 120
; Dosya yükleme ayarları
upload_max_filesize = 64M
post_max_size = 128M
; Hata raporlama (production için)
display_errors = Off
log_errors = On
error_log = /var/log/php82_errors.log
; OPcache ayarları
opcache.enable = 1
opcache.memory_consumption = 256
opcache.max_accelerated_files = 20000
opcache.revalidate_freq = 0
Eski PHP 7.4 kullanan site daha muhafazakar ayarlara ihtiyaç duyabilir:
sudo nano /usr/local/lsws/lsphp74/etc/php/7.4/litespeed/php.ini
memory_limit = 256M
max_execution_time = 60
upload_max_filesize = 32M
post_max_size = 64M
Her değişiklikten sonra OpenLiteSpeed’i yeniden başlatmayı unutma.
.htaccess ile PHP Sürümü Değiştirme
Bazı durumlarda her dizin için farklı PHP sürümü kullanman gerekebilir. OpenLiteSpeed, .htaccess dosyaları aracılığıyla bu esnekliği sağlıyor. Bu özellikle paylaşımlı hosting benzeri ortamlarda çok işe yarıyor.
Site kökünde bir .htaccess dosyası oluştur:
nano /var/www/eski-site.com/.htaccess
# Bu site için PHP 7.4 kullan
<IfModule LiteSpeed>
AddType application/x-httpd-lsphp74 .php
</IfModule>
PHP 8.2 için:
<IfModule LiteSpeed>
AddType application/x-httpd-lsphp82 .php
</IfModule>
Bu yöntemin çalışması için sanal ana makine ayarlarında .htaccess override’a izin verdiğinden emin ol. Virtual host config dosyasında AllowOverride All veya en azından AllowOverride Options FileInfo ayarının aktif olması gerekiyor.
Gerçek Dünya Senaryosu: Ajans Ortamı
Diyelim ki küçük bir dijital ajansın sunucusunu yönetiyorsun. Elinde şu siteler var:
musteri1.com: 2018’de yapılmış WordPress sitesi, bazı eski eklentiler PHP 8.x ile uyumsuzmusteri2.com: Laravel 10 tabanlı yeni proje, PHP 8.2 minimum şartmusteri3.com: Opencart 3.x mağazası, PHP 8.1 öneriliyor
Bu senaryoda üç farklı PHP sürümü yan yana çalışacak. Her şeyi bir script ile otomatize edebilirsin:
#!/bin/bash
# Çoklu PHP kurulum scripti
echo "PHP sürümleri kuruluyor..."
# PHP 7.4
apt install -y lsphp74 lsphp74-common lsphp74-mysql lsphp74-curl
lsphp74-mbstring lsphp74-xml lsphp74-zip lsphp74-opcache
# PHP 8.1
apt install -y lsphp81 lsphp81-common lsphp81-mysql lsphp81-curl
lsphp81-mbstring lsphp81-xml lsphp81-zip lsphp81-opcache
# PHP 8.2
apt install -y lsphp82 lsphp82-common lsphp82-mysql lsphp82-curl
lsphp82-mbstring lsphp82-xml lsphp82-zip lsphp82-opcache
echo "Kurulum tamamlandi. OLS yeniden baslatiliyor..."
/usr/local/lsws/bin/lswsctrl restart
echo "Tum PHP surumleri aktif:"
/usr/local/lsws/lsphp74/bin/php74 -v | head -1
/usr/local/lsws/lsphp81/bin/php81 -v | head -1
/usr/local/lsws/lsphp82/bin/php82 -v | head -1
Sorun Giderme
En sık karşılaşılan sorunlar ve çözümleri:
500 Internal Server Error alıyorsan:
# OLS hata logunu kontrol et
tail -f /usr/local/lsws/logs/error.log
# PHP handler'ının çalışıp çalışmadığını kontrol et
ps aux | grep lsphp
PHP sürümü değişmiyorsa:
- WebAdmin’de Graceful Restart yaptığından emin ol
- Config dosyasında syntax hatası olup olmadığını kontrol et
- Socket dosyalarının oluştuğunu doğrula:
ls /tmp/lshttpd/
OPcache sorunları yaşıyorsan:
# Her PHP sürümü için OPcache durumunu kontrol et
/usr/local/lsws/lsphp82/bin/php82 -r "echo opcache_get_status()['opcache_enabled'] ? 'Aktif' : 'Pasif';"
Log dosyalarını merkezi takip etmek için:
tail -f /usr/local/lsws/logs/error.log
/var/log/php74_errors.log
/var/log/php82_errors.log
PHP Sürümü Güncelleme Stratejisi
PHP sürümleri güvenlik güncellemeleri alıyor ve bir noktada eski sürümlerin desteği bitiyor. PHP 7.4, Aralık 2022’de end-of-life oldu yani aktif güvenlik güncellemesi almıyor. Bir geçiş planın olmasında fayda var.
Geçiş sürecinde önerilen yaklaşım:
- Önce staging ortamında yeni PHP sürümünü test et
- Uyumsuz eklenti veya kod parçalarını tespit et
- Geçiş tarihini müşteriyle koordineli planla
- Geçişten sonra eski PHP sürümünü hemen kaldırma, birkaç hafta bekle
- Her şey yolundaysa eski paketleri temizle:
sudo apt remove lsphp74 lsphp74-* -y
sudo apt autoremove -y
WebAdmin Üzerinden Hızlı Kontrol
Tüm bu yapılandırmaların ardından WebAdmin arayüzünden genel durumu kontrol etmek iyi bir alışkanlık. Server Status sayfasında aktif PHP işleyicilerini ve bağlantı durumlarını görebilirsin. Virtual Hosts sekmesinde her sanal ana makinenin hangi PHP sürümünü kullandığını doğrulayabilirsin.
Ayrıca gerçek zamanlı istatistikler için şu komutu kullanabilirsin:
# OLS real-time stats
curl -s http://localhost:7080/status | grep -i php
Sonuç
OpenLiteSpeed ile çoklu PHP yönetimi, bir kez altyapıyı doğru kurduğunda son derece pratik bir şekilde işliyor. LSAPI’nin getirdiği performans avantajı sayesinde birden fazla PHP sürümü aynı anda aktif olsa bile kaynak tüketimi makul seviyelerde kalıyor.
En kritik nokta şu: her değişiklikten sonra graceful restart yapmayı alışkanlık haline getir. Config dosyasında yapılan bir hatayı, OLS’nin restart’ı reddetmesiyle hemen fark edebilirsin ve bu da seni potansiyel downtime’dan kurtarıyor.
Çoklu PHP yönetiminin gerçek gücü özellikle müşteri ortamlarında ortaya çıkıyor. Her müşterinin kendi PHP sürümünde izole çalışması, bir sitenin PHP güncellemesinin diğerlerini etkileme riskini tamamen ortadan kaldırıyor. Bu esneklik, OpenLiteSpeed’i paylaşımlı hosting veya çok kiracılı (multi-tenant) ortamlar için güçlü bir tercih haline getiriyor.