OpenLiteSpeed ile PHP Sürüm Seçimi ve Çoklu PHP Yönetimi

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 uyumsuz
  • musteri2.com: Laravel 10 tabanlı yeni proje, PHP 8.2 minimum şart
  • musteri3.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.

Yorum yapın