Takip et

Çoklu PHP Versiyonlarını Tek Sunucuda Çalıştırma: Apache ve PHP-FPM ile Ubuntu 20.04 Rehberi

Çoklu PHP Versiyonlarını Tek Sunucuda Çalıştırma: Apache ve PHP-FPM ile Ubuntu 20.04 Rehberi Giriş: Neden Çoklu PHP Versiyonu? Web gelişt

Çoklu PHP Versiyonlarını Tek Sunucuda Çalıştırma: Apache ve PHP-FPM ile Ubuntu 20.04 Rehberi

Giriş: Neden Çoklu PHP Versiyonu?

Web geliştirme dünyasında, farklı projelerin farklı PHP versiyonlarına ihtiyaç duyması sık karşılaşılan bir durumdur. Belki eski bir uygulamanın bakımı için PHP 7.4’e ihtiyacınız var, ancak yeni bir proje için PHP 8.2’nin sunduğu performans ve özelliklerden faydalanmak istiyorsunuz. Ya da farklı PHP versiyonlarında kodunuzu test etmeniz gerekiyor olabilir. Tek bir sunucuda bu farklı gereksinimleri yönetmek, hem maliyetleri düşürmek hem de sunucu kaynaklarını verimli kullanmak açısından büyük avantajlar sunar.

Bu rehber, Ubuntu 20.04 işletim sistemi üzerinde Apache web sunucusunu ve PHP-FPM (FastCGI Process Manager) kullanarak birden fazla PHP versiyonunu nasıl sorunsuz bir şekilde çalıştıracağınızı adım adım açıklamaktadır. PHP-FPM, PHP yorumlayıcısını Apache’den ayrı bir süreç olarak çalıştırarak performansı artırır, kaynak yönetimini kolaylaştırır ve her PHP versiyonu için ayrı bir çalışma ortamı sağlamanıza olanak tanır. Bu sayede, farklı sanal hostlarınız (web siteleriniz) için farklı PHP versiyonlarını bağımsız bir şekilde atayabilirsiniz.

Ön Gereksinimler ve Sistem Hazırlığı

Bu rehbere başlamadan önce, Ubuntu 20.04 sunucunuzun temel kurulumunun yapıldığını ve bir sudo yetkisine sahip kullanıcıya sahip olduğunuzu varsayıyoruz.

Sistem Güncellemesi ve Apache Kurulumu

İlk adım olarak, sunucunuzun paket listesini güncelleyelim ve mevcut paketleri yükseltelim. Ardından, Apache web sunucusunun kurulu olup olmadığını kontrol edelim. Kurulu değilse, kuralım:

sudo apt update
sudo apt upgrade -y
sudo apt install apache2 -y

Apache kurulumundan sonra, sunucunuzun güvenlik duvarını (UFW) yapılandırmanız gerekebilir. Apache profilini etkinleştirerek HTTP ve HTTPS trafiğine izin verin:

sudo ufw allow "Apache Full"
sudo ufw enable # Eğer UFW etkin değilse

PHP-FPM için Gerekli Apache Modüllerinin Etkinleştirilmesi

Apache’nin PHP-FPM ile iletişim kurabilmesi için proxy_fcgi ve setenvif modüllerini etkinleştirmemiz gerekir. proxy_fcgi modülü, Apache’nin FastCGI sunucularıyla (bu durumda PHP-FPM) iletişim kurmasını sağlarken, setenvif modülü çeşitli ortam değişkenlerini ayarlamak için kullanılır.

sudo a2enmod proxy_fcgi setenvif
sudo systemctl restart apache2

Bu komutlar, gerekli modülleri etkinleştirecek ve değişikliklerin uygulanması için Apache servisini yeniden başlatacaktır.

Ek PHP PPA’sı Ekleme

Ubuntu’nun varsayılan depoları genellikle en güncel PHP versiyonlarını içermez. Bu nedenle, PHP’nin daha yeni ve çeşitli versiyonlarını kolayca kurabilmek için Ondrej Sury’nin PPA’sını (Personal Package Archive) eklememiz önerilir. Bu PPA, Ubuntu için PHP’nin birçok farklı versiyonunu ve uzantısını sunar.

sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update

Bu adımla birlikte sisteminiz artık Ondrej Sury’nin PHP paketlerini kullanmaya hazır hale gelmiştir.

PHP Versiyonlarının Kurulumu ve Yapılandırılması

Şimdi, sunucumuza farklı PHP versiyonlarını kurma zamanı. Bu rehberde örnek olarak PHP 7.4 ve PHP 8.2’yi kuracağız. İhtiyaçlarınıza göre farklı versiyonları (örn. PHP 8.0, 8.1, 8.3) da benzer şekilde kurabilirsiniz. Her PHP versiyonu için phpX.X-fpm paketini kurmayı unutmayın, bu PHP-FPM servisini sağlar. Ayrıca, uygulamalarınızın ihtiyaç duyacağı diğer PHP uzantılarını da kurmalısınız (örn. phpX.X-mysql, phpX.X-curl).

PHP 7.4 Kurulumu

sudo apt install php7.4-fpm php7.4-mysql php7.4-cli php7.4-curl php7.4-json php7.4-gd php7.4-mbstring php7.4-xml php7.4-zip -y

PHP 8.2 Kurulumu

sudo apt install php8.2-fpm php8.2-mysql php8.2-cli php8.2-curl php8.2-json php8.2-gd php8.2-mbstring php8.2-xml php8.2-zip -y

PHP-FPM Servislerini Kontrol Etme

Kurulum tamamlandıktan sonra, her bir PHP-FPM servisinin düzgün çalıştığını kontrol etmek önemlidir:

sudo systemctl status php7.4-fpm
sudo systemctl status php8.2-fpm

Her iki komutun çıktısında da “active (running)” ifadesini görmelisiniz. Eğer bir servis çalışmıyorsa, manuel olarak başlatabilir ve sistem başlangıcında otomatik başlamasını sağlayabilirsiniz:

sudo systemctl start php7.4-fpm
sudo systemctl enable php7.4-fpm
sudo systemctl start php8.2-fpm
sudo systemctl enable php8.2-fpm

PHP Yapılandırma (php.ini) Ayarları

Her PHP versiyonunun kendine ait bir php.ini dosyası bulunur. Bu dosyalar genellikle /etc/php/X.X/fpm/php.ini yolunda yer alır. Örneğin, PHP 7.4 için /etc/php/7.4/fpm/php.ini ve PHP 8.2 için /etc/php/8.2/fpm/php.ini.

Uygulamalarınızın gereksinimlerine göre bu dosyalarda memory_limit, upload_max_filesize, post_max_size, max_execution_time gibi ayarları düzenleyebilirsiniz. Düzenleme yaptıktan sonra ilgili PHP-FPM servisini yeniden başlatmayı unutmayın:

sudo nano /etc/php/7.4/fpm/php.ini
sudo systemctl restart php7.4-fpm

sudo nano /etc/php/8.2/fpm/php.ini
sudo systemctl restart php8.2-fpm

Apache Sanal Host (Virtual Host) Yapılandırması

Şimdi sıra geldi Apache’yi, gelen isteklere göre hangi PHP-FPM servisini kullanacağını yönlendirecek şekilde yapılandırmaya. Her web siteniz (sanal host) için ayrı bir Apache yapılandırma dosyası oluşturacağız ve bu dosyalarda SetHandler yönergesini kullanarak belirli bir PHP-FPM soketine işaret edeceğiz.

Web Sitesi Dizinlerini Oluşturma

Örnek olarak site1.com ve site2.com adında iki web sitemiz olduğunu varsayalım. Bunlar için gerekli dizinleri oluşturalım:

sudo mkdir -p /var/www/site1.com/public_html
sudo mkdir -p /var/www/site2.com/public_html

Web sunucusunun bu dizinlere yazma izni olması için sahipliklerini değiştirelim:

sudo chown -R www-data:www-data /var/www/site1.com
sudo chown -R www-data:www-data /var/www/site2.com
sudo chmod -R 755 /var/www/site1.com
sudo chmod -R 755 /var/www/site2.com

Site1.com için Sanal Host Yapılandırması (PHP 7.4)

site1.com için Apache yapılandırma dosyasını oluşturalım:

sudo nano /etc/apache2/sites-available/site1.com.conf

İçeriğini aşağıdaki gibi doldurun:


    ServerAdmin webmaster@localhost
    ServerName site1.com
    DocumentRoot /var/www/site1.com/public_html

    
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    

    ErrorLog ${APACHE_LOG_DIR}/site1.com_error.log
    CustomLog ${APACHE_LOG_DIR}/site1.com_access.log combined

    # PHP 7.4'ü kullanmak için SetHandler yönergesi
    
        SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost/"
    

Buradaki kritik nokta bloğu içindeki SetHandler yönergesidir. Bu yönerge, .php uzantılı dosyalar için gelen istekleri php7.4-fpm.sock Unix soketi üzerinden PHP 7.4-FPM servisine yönlendirir.

Site2.com için Sanal Host Yapılandırması (PHP 8.2)

Benzer şekilde site2.com için yapılandırma dosyasını oluşturalım:

sudo nano /etc/apache2/sites-available/site2.com.conf

İçeriğini aşağıdaki gibi doldurun:


    ServerAdmin webmaster@localhost
    ServerName site2.com
    DocumentRoot /var/www/site2.com/public_html

    
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    

    ErrorLog ${APACHE_LOG_DIR}/site2.com_error.log
    CustomLog ${APACHE_LOG_DIR}/site2.com_access.log combined

    # PHP 8.2'yi kullanmak için SetHandler yönergesi
    
        SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost/"
    

Bu yapılandırmada ise .php uzantılı dosyalar için istekler php8.2-fpm.sock soketi üzerinden PHP 8.2-FPM servisine yönlendirilir.

Sanal Hostları Etkinleştirme ve Apache’yi Yeniden Başlatma

Yeni oluşturduğunuz sanal host yapılandırmalarını etkinleştirin ve Apache’yi yeniden yükleyin:

sudo a2ensite site1.com.conf
sudo a2ensite site2.com.conf
sudo apache2ctl configtest # Yapılandırma hatalarını kontrol edin
sudo systemctl reload apache2 # veya restart

configtest komutu, yapılandırma dosyalarınızda herhangi bir sözdizimi hatası olup olmadığını kontrol eder. Eğer “Syntax OK” çıktısını alırsanız, reload komutuyla Apache’yi yeniden yükleyebilirsiniz.

Test Amaçlı phpinfo.php Dosyaları Oluşturma

Her iki web sitesinin de doğru PHP versiyonunu kullandığını doğrulamak için public_html dizinlerine basit bir phpinfo.php dosyası oluşturalım:

site1.com için:

sudo nano /var/www/site1.com/public_html/phpinfo.php

İçeriği:

site2.com için:

sudo nano /var/www/site2.com/public_html/phpinfo.php

İçeriği:

Yerel Test için Hosts Dosyası Düzenlemesi (İsteğe Bağlı)

Eğer bu siteleri yerel bir makineden test ediyorsanız, hosts dosyanıza aşağıdaki satırları ekleyerek alan adlarını sunucunuzun IP adresine (veya 127.0.0.1 eğer sunucunun kendisinden erişiyorsanız) yönlendirebilirsiniz:

# /etc/hosts (Linux/macOS) veya C:\Windows\System32\drivers\etc\hosts (Windows)
127.0.0.1 site1.com
127.0.0.1 site2.com

Şimdi tarayıcınızdan http://site1.com/phpinfo.php ve http://site2.com/phpinfo.php adreslerine giderek her bir sitenin farklı PHP versiyonlarını kullandığını doğrulayabilirsiniz. phpinfo() çıktısının en üstünde ilgili PHP versiyonunu görmelisiniz.

Pratik İpuçları ve Sıkça Sorulan Sorular (SSS)

Güvenlik İpuçları

  • Güncellemeler: Tüm PHP versiyonlarını ve uzantılarını düzenli olarak güncel tutun. sudo apt update && sudo apt upgrade komutunu düzenli aralıklarla çalıştırmak önemlidir.
  • Gereksiz Modüller: Kullanmadığınız PHP modüllerini kaldırın. Daha az modül, daha az potansiyel güvenlik açığı demektir.
  • php.ini Hardening: php.ini dosyalarınızda güvenlik odaklı düzenlemeler yapın:

    • expose_php = Off
    • allow_url_fopen = Off
    • disable_functions ile tehlikeli fonksiyonları devre dışı bırakın.
    • log_errors = On ve error_log yolunu belirleyin.
  • Dizin İzinleri: Web kök dizinlerinizin ve dosyalarınızın izinlerini doğru ayarlayın (755 dizinler için, 644 dosyalar için). www-data kullanıcısının sadece gerekli yerlere yazma izni olduğundan emin olun.

Performans İpuçları

  • PHP-FPM Havuz Ayarları: Her PHP-FPM versiyonunun kendi havuz ayarları (pool settings) vardır. Bu ayarlar genellikle /etc/php/X.X/fpm/pool.d/www.conf dosyasında bulunur. pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers gibi değerleri sunucunuzun RAM ve CPU kapasitesine göre ayarlayarak performansı optimize edebilirsiniz.
  • OPcache: PHP’nin yerleşik OPcache modülünü etkinleştirdiğinizden emin olun. Bu, PHP kodunun önbelleğe alınmasını sağlayarak her istekte yeniden derlenmesini engeller ve performansı önemli ölçüde artırır. Varsayılan olarak etkin olmalıdır, ancak php.ini dosyanızda kontrol edebilirsiniz.
  • Apache Performansı: Apache’nin mpm_event modülünü kullanmak genellikle mpm_prefork‘tan daha verimlidir. sudo a2dismod mpm_prefork && sudo a2enmod mpm_event && sudo systemctl restart apache2 komutlarıyla geçiş yapabilirsiniz.

Hata Ayıklama

  • PHP Hata Kayıtları: Her PHP-FPM versiyonunun kendi hata kayıt dosyası bulunur (örn. /var/log/phpX.X-fpm.log veya php.ini içinde belirtilen error_log yolu). Bu dosyaları kontrol ederek PHP uygulamalarınızdaki hataları tespit edebilirsiniz.
  • Apache Hata Kayıtları: Apache’nin hata kayıtları (/var/log/apache2/error.log ve sanal hosta özel loglar) sunucu tarafındaki sorunları (yapılandırma hataları, izin sorunları vb.) belirlemenize yardımcı olur.
  • FPM Servis Durumu: sudo systemctl status phpX.X-fpm komutuyla PHP-FPM servislerinin durumunu kontrol etmek, sık karşılaşılan sorunları gidermenin ilk adımıdır.

Sıkça Sorulan Sorular (SSS)

S: Neden PHP-FPM kullanıyoruz da mod_php kullanmıyoruz?

C: mod_php, PHP yorumlayıcısını doğrudan Apache sürecine entegre ederken, PHP-FPM PHP’yi ayrı bir süreç olarak çalıştırır. PHP-FPM, her web sitesi için farklı PHP versiyonlarını izole bir şekilde çalıştırma yeteneği sunar, daha iyi performans, daha iyi kaynak yönetimi ve daha yüksek güvenlik sağlar. Ayrıca, bir PHP sürecindeki hata tüm Apache’yi etkilemez.

S: Aynı anda kaç farklı PHP versiyonu çalıştırabilirim?

C: Sunucunuzun kaynaklarına (CPU, RAM) bağlı olarak istediğiniz kadar PHP versiyonu çalıştırabilirsiniz. Her PHP-FPM havuzu belirli bir miktar RAM kullanır, bu nedenle çok sayıda aktif versiyon ve yoğun trafik, kaynak tüketimini artırabilir.

S: Bir uygulamanın PHP versiyonunu nasıl değiştiririm?

C: İlgili web sitesinin Apache sanal host yapılandırma dosyasını (/etc/apache2/sites-available/site_adi.conf) düzenleyerek bloğu içindeki SetHandler yönergesini istediğiniz PHP versiyonunun soketine (phpX.X-fpm.sock) işaret edecek şekilde değiştirmeniz yeterlidir. Değişiklikten sonra Apache’yi yeniden yüklemeyi unutmayın (sudo systemctl reload apache2).

S: PHP CLI (Komut Satırı Arayüzü) için varsayılan PHP versiyonunu nasıl ayarlarım?

C: update-alternatives komutunu kullanarak CLI için varsayılan PHP versiyonunu belirleyebilirsiniz:

sudo update-alternatives --config php

Bu komut size yüklü PHP CLI versiyonlarının bir listesini sunacak ve varsayılan olarak kullanmak istediğinizin numarasını seçmenizi isteyecektir.

S: PHP-FPM soket yolu neden /run/php/phpX.X-fpm.sock?

C: Ubuntu’da PHP-FPM servisleri varsayılan olarak Unix domain soketleri kullanarak iletişim kurar ve bu soket dosyaları genellikle /run/php/ dizini altında bulunur. Bu, TCP/IP soketlerine göre biraz daha hızlı ve güvenli bir iletişim yöntemidir, çünkü dosya sistemi üzerinde çalışır ve sadece yerel süreçler tarafından erişilebilir.

Bu rehberle birlikte, Ubuntu 20.04 sunucunuzda Apache ve PHP-FPM kullanarak birden fazla PHP versiyonunu başarıyla çalıştırabilir, farklı projelerinizin gereksinimlerini tek bir platformda karşılayabilirsiniz. Başarılar dileriz!

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.