Modern web uygulamaları geliştirmek için güncel ve stabil bir yerel geliştirme ortamına sahip olmak, her geliştiricinin temel ihtiyacıdır. Ubuntu tabanlı sistemlerde PHP 8.1’i kurmak ve optimize edilmiş bir geliştirme ortamı oluşturmak, projelerinizin verimliliğini ve performansını önemli ölçüde artırabilir. Bu rehberde, PHP 8.1’in kurulumundan web sunucusu entegrasyonuna, veritabanı yönetiminden hata ayıklama araçlarına kadar tüm adımları detaylı bir şekilde ele alacağız.
Neden PHP 8.1 ve Modern Geliştirme Ortamı Kurmalıyız?
PHP, web geliştirme dünyasının en köklü ve yaygın kullanılan dillerinden biridir. Yıllar içinde büyük bir evrim geçirerek, sadece basit web siteleri değil, aynı zamanda karmaşık kurumsal uygulamalar ve API’ler geliştirmek için de güçlü bir araç haline gelmiştir. PHP 8.1 sürümü, bu evrimin önemli bir aşamasını temsil ediyor ve geliştiricilere bir dizi yenilik ve performans iyileştirmesi sunuyor. Peki, neden özellikle PHP 8.1’i tercih etmeliyiz ve neden yerel bir geliştirme ortamı kurmak bu kadar kritik?
Öncelikle, PHP 8.1 ile gelen yeniliklere bir göz atalım. Bu sürüm, dilin çekirdeğine bir dizi önemli özellik ekledi. Örneğin, Enums (Numaralandırmalar), belirli bir değer kümesinden seçim yapılması gereken durumlar için tip güvenliği ve okunabilirlik sunar. Bu, özellikle durum yönetimi veya sabit değerlerin kullanıldığı senaryolarda kodun daha sağlam olmasını sağlar. Ayrıca, Fibers ile eşzamansız programlama yetenekleri artırılmış, bu da I/O yoğun uygulamalarda performans artışı potansiyeli yaratmıştır. Read-only Properties (Salt Okunur Özellikler), nesnelerin oluşturulduktan sonra değiştirilemeyen özelliklere sahip olmasını sağlayarak immutability (değişmezlik) prensibini destekler ve kodun tahmin edilebilirliğini artırır. Intersection Types (Kesişim Tipleri) ise, bir değişkenin aynı anda birden fazla arayüzü veya sınıfı uygulamasını gerektiren daha esnek tip bildirimlerine olanak tanır. Tüm bu özellikler, daha temiz, daha güvenli ve daha performanslı kod yazılmasına yardımcı olur.
Performans açısından bakıldığında, PHP 8.1, önceki sürümlere göre önemli iyileştirmeler sunar. JIT (Just-In-Time) derleyicisi üzerinde yapılan geliştirmeler ve genel optimizasyonlar sayesinde, uygulamalar daha hızlı çalışır, bu da kullanıcı deneyimini doğrudan etkiler. Özellikle yüksek trafikli uygulamalarda veya yoğun işlem gerektiren senaryolarda, bu performans artışı kritik öneme sahiptir. Bu nedenle, projelerinizi güncel tutmak ve en iyi performansı elde etmek için PHP 8.1’e geçiş yapmak mantıklı bir adımdır.
Yerel geliştirme ortamı kurmanın faydaları ise saymakla bitmez. Birincisi, hız ve verimlilik. Kodunuzu her değişiklikte bir uzak sunucuya yüklemek zorunda kalmadan anında test edebilirsiniz. Bu, geliştirme döngüsünü hızlandırır ve hataları daha çabuk tespit etmenizi sağlar. İkincisi, güvenlik. Hassas verilerle çalışırken veya henüz kamuya açık olmayan projeler üzerinde çalışırken, yerel ortamınızda kalmak, verilerinizi potansiyel dış tehditlerden korur. Üçüncüsü, deneme imkanı. Yeni teknolojileri, kütüphaneleri veya farklı yapılandırmaları, canlı sunucunuzu riske atmadan güvenle deneyebilirsiniz. Bu, öğrenme ve yenilik yapma özgürlüğü sağlar. Ubuntu gibi Linux tabanlı bir işletim sistemi, sunucu ortamlarına yakınlığı sayesinde, yerel ortamınızda geliştirdiğiniz uygulamaların dağıtım ortamında da benzer şekilde çalışmasını garanti eder.
Vaka Analizi: E-ticaret Sitesi Geliştiricisinin PHP 8.1’e Geçişi
Ali, küçük bir e-ticaret sitesi için PHP 7.4 ile çalışan bir altyapı kullanıyordu. Site, özellikle kampanya dönemlerinde veya yüksek trafik anlarında yavaşlamalar yaşıyor, sepet işlemleri gecikiyor ve genel kullanıcı deneyimi olumsuz etkileniyordu. Ali, PHP 8.1’e geçiş yapmaya karar verdi. Yerel Ubuntu ortamında PHP 8.1’i kurdu, mevcut kod tabanını yeni sürüme uyarladı ve testler yaptı. Sonuçlar şaşırtıcıydı: Ödeme süreçleri %15 daha hızlı tamamlanıyor, ürün listeleme sayfaları %20 daha hızlı yükleniyor ve genel sunucu yanıt süreleri iyileşiyordu. Ayrıca, 8.1’in sunduğu Enums gibi özellikler sayesinde, sipariş durumlarını yöneten kod daha okunabilir ve hata yapmaya daha az meyilli hale geldi. Bu geçiş, sadece performans artışı sağlamakla kalmadı, aynı zamanda Ali’nin kod kalitesini artırmasına ve gelecekteki geliştirmeler için daha sağlam bir temel oluşturmasına da yardımcı oldu.
Özetle, PHP 8.1, modern web geliştirme için gerekli olan hız, güvenlik ve geliştirici deneyimi iyileştirmelerini sunar. Ubuntu üzerinde kurulu bir yerel ortam ise bu potansiyeli tam anlamıyla kullanmanızı sağlayarak, projelerinizi daha hızlı, daha güvenli ve daha verimli bir şekilde hayata geçirmenize olanak tanır. Bu rehberin geri kalanında, bu güçlü ortamı adım adım nasıl kuracağınızı öğreneceksiniz.
Ubuntu’da PHP 8.1 Kurulumuna Başlamadan Önce Bilinmesi Gerekenler Nelerdir?
Herhangi bir yazılım kurulumuna başlamadan önce, sisteminizin hazır olduğundan ve gerekli ön koşulları karşıladığından emin olmak kritik önem taşır. Ubuntu üzerinde PHP 8.1 ve bir yerel geliştirme ortamı kurarken de bu durum farklı değildir. Bu bölümde, kurulum sürecine başlamadan önce bilmeniz gereken temel bilgileri ve yapmanız gereken hazırlıkları detaylıca ele alacağız. Bu adımlar, sorunsuz bir kurulum deneyimi ve gelecekte yaşanabilecek olası uyumluluk sorunlarının önüne geçmek için hayati öneme sahiptir.
Öncelikle, sistem gereksinimleri konusuna değinelim. PHP 8.1, modern bir sistem üzerinde sorunsuz çalışacak şekilde tasarlanmıştır. Minimum olarak 2 GB RAM ve 20 GB boş disk alanı önerilir; ancak eğer birden fazla proje üzerinde çalışacak, veritabanları kuracak ve çeşitli geliştirme araçları kullanacaksanız, bu değerlerin üzerinde bir kapasiteye sahip olmanız, geliştirme deneyiminizi çok daha akıcı hale getirecektir. Özellikle sanal makineler (VM) veya konteynerler (Docker) kullanmayı düşünüyorsanız, bu kaynakları doğru bir şekilde ayırmak performans açısından büyük fark yaratacaktır. İşlemci gücü de elbette önemlidir; modern bir çok çekirdekli işlemci, derleme ve test süreçlerini hızlandıracaktır.
İkinci olarak, güncel bir Ubuntu sürümü kullanmak oldukça önemlidir. Ubuntu’nun LTS (Long Term Support) sürümleri (örneğin Ubuntu 20.04 LTS veya 22.04 LTS), uzun süreli destek sundukları için genellikle geliştirme ortamları için tercih edilir. Bu sürümler, kararlılık ve güvenlik güncellemeleri açısından daha güvenilirdir. Eski bir Ubuntu sürümü kullanıyorsanız, bazı paketlerin uyumluluk sorunları çıkarması veya güncel PHP sürümünü doğrudan depolardan kuramamanız olasıdır. Bu nedenle, kurulum öncesinde sisteminizi güncel bir LTS sürümüne yükseltmeniz şiddetle tavsiye edilir.
Üçüncü olarak, terminal kullanımı temellerine hakim olmak bu süreçte vazgeçilmezdir. Ubuntu’da birçok kurulum ve yapılandırma işlemi komut satırı aracılığıyla yapılır. Temel komutlar olan sudo (yönetici ayrıcalıkları), apt update (paket listelerini güncelleme), apt upgrade (yüklü paketleri güncelleme), apt install (paket yükleme), cd (dizin değiştirme), ls (dizin içeriğini listeleme) ve nano veya vim gibi metin düzenleyicileriyle dosya düzenleme bilgisi, tüm bu adımları başarıyla tamamlamanız için yeterli olacaktır. Eğer terminal kullanımına yabancıysanız, bu temel komutlara kısa bir göz atmanız faydalı olacaktır.
Dördüncü olarak, güvenlik güncellemeleri ve sistemin hazırlanması. Herhangi bir yeni yazılım yüklemeden önce, sisteminizin güncel ve güvenli olduğundan emin olmalısınız. Aşağıdaki komutları çalıştırarak paket listelerinizi güncelleyebilir ve mevcut paketlerinizi yükseltebilirsiniz. Bu, olası bağımlılık sorunlarını önler ve sisteminizin en son güvenlik yamalarına sahip olmasını sağlar.
sudo apt update
sudo apt upgrade -y
Beşinci ve önemli bir nokta ise PPA (Personal Package Archive) kavramıdır. Ubuntu’nun resmi depoları genellikle kararlı ve iyi test edilmiş paketler içerir, ancak bazen en son yazılım sürümlerini (tıpkı PHP 8.1 gibi) içermeyebilirler. Bu gibi durumlarda, üçüncü taraf geliştiricilerin oluşturduğu PPA’lar devreye girer. PHP’nin en güncel sürümlerini Ubuntu’ya kurmak için genellikle Ondrej PPA’sı kullanılır. Bu PPA, Debian ve Ubuntu için PHP’nin çeşitli sürümlerini ve ilgili modüllerini sunan güvenilir bir kaynaktır. Bu PPA’yı sisteminize ekleyerek, PHP 8.1’i kolayca kurabilirsiniz. Ancak, herhangi bir PPA eklerken, kaynağın güvenilirliğini araştırmanız önemlidir.
Son olarak, planlama. Hangi web sunucusunu (Apache veya Nginx), hangi veritabanını (MySQL veya PostgreSQL) kullanacağınıza karar vermek, kurulum sürecini daha düzenli hale getirecektir. Bu seçimler, projenizin gereksinimlerine ve kişisel tercihlerinize göre değişebilir. Bu rehberde her iki popüler seçeneği de ele alacağız, böylece projenize en uygun olanı seçme esnekliğine sahip olacaksınız. Bu ön hazırlıklar, PHP 8.1’in Ubuntu’ya sorunsuz bir şekilde entegre olmasını sağlayacak ve geliştirme sürecinizi çok daha keyifli hale getirecektir.
Adım Adım PHP 8.1 Ubuntu’ya Nasıl Kurulur?
Artık sistemimizin hazır olduğunu varsayarak, PHP 8.1’i Ubuntu’ya kurma sürecine geçebiliriz. Bu bölüm, PHP’nin temel bileşenlerini ve web geliştirme için gerekli olan popüler modülleri adım adım nasıl kuracağınızı detaylandıracaktır. Sürecin her aşaması, komut satırı üzerinden gerçekleştirilecek ve her bir komutun ne anlama geldiği açıklanacaktır. Unutmayın, bu adımları dikkatlice takip etmek, sorunsuz bir kurulum için anahtardır.
3.1: Sisteminizi Güncelleme ve Ondrej PPA’yı Ekleme
Daha önce de belirttiğimiz gibi, herhangi bir büyük kurulumdan önce sisteminizin güncel olması önemlidir. Bu, bağımlılık sorunlarını önler ve en son güvenlik yamalarına sahip olmanızı sağlar. Terminali açın (Ctrl+Alt+T) ve aşağıdaki komutları çalıştırın:
sudo apt update
sudo apt upgrade -y
sudo apt install software-properties-common -y
software-properties-common paketi, PPA’ları kolayca yönetmenizi sağlayan araçları içerir. Şimdi, PHP’nin en güncel sürümlerini sağlayan popüler Ondrej PPA’sını ekleyelim. Bu PPA, Debian ve Ubuntu için PHP’nin farklı sürümlerini ve ilgili modüllerini güvenilir bir şekilde sunar:
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
İlk komut, PPA’yı sisteminizin yazılım kaynaklarına ekler. İkinci sudo apt update komutu ise, yeni eklenen PPA’daki paket bilgilerini sisteminize indirerek, PHP 8.1 paketlerinin artık kurulum için erişilebilir olmasını sağlar.
3.2: PHP 8.1 ve Gerekli Modülleri Kurma
PPA’yı ekledikten ve paket listelerinizi güncelledikten sonra, PHP 8.1’i ve web geliştirme için sıklıkla ihtiyaç duyulan modülleri kurmaya başlayabiliriz. Modern PHP uygulamaları genellikle PHP-FPM (FastCGI Process Manager) ile çalışır. Bu, web sunucusunun (Apache veya Nginx) PHP kodunu ayrı bir işlem olarak çalıştırmasını sağlar, bu da performans ve kararlılık açısından avantajlıdır. Ayrıca, komut satırı (CLI) uygulamaları için de PHP’ye ihtiyacımız olacak.
Aşağıdaki komut, PHP 8.1’in temel bileşenlerini ve yaygın olarak kullanılan modüllerini kuracaktır:
sudo apt install php8.1-cli php8.1-fpm php8.1-mysql php8.1-gd php8.1-curl php8.1-mbstring php8.1-xml php8.1-zip php8.1-intl php8.1-common php8.1-opcache -y
Bu komutta kurduğumuz bazı önemli modüllerin ne işe yaradığına kısaca göz atalım:
php8.1-cli: Komut satırı arayüzünden PHP betiklerini çalıştırmak için gereklidir.php8.1-fpm: Web sunucuları ile PHP arasında iletişim kuran FastCGI Process Manager’ı sağlar. Yüksek performanslı web uygulamaları için kritik öneme sahiptir.php8.1-mysql: MySQL ve MariaDB veritabanlarına bağlanmak için kullanılır.php8.1-gd: Görüntü işleme fonksiyonları (küçük resim oluşturma, filigran ekleme vb.) sağlar.php8.1-curl: Çeşitli protokoller (HTTP, FTP vb.) üzerinden veri transferi yapmak için kullanılır. API çağrıları için vazgeçilmezdir.php8.1-mbstring: Çok baytlı karakter dizileriyle (UTF-8 gibi) çalışmak için gereklidir. Uluslararası uygulamalar için önemlidir.php8.1-xml: XML verilerini ayrıştırmak ve oluşturmak için kullanılır.php8.1-zip: Zip dosyalarını oluşturmak ve çıkarmak için fonksiyonlar sağlar.php8.1-intl: Uluslararasılaştırma ve yerelleştirme (dil, para birimi, tarih formatları) işlevleri için kullanılır.php8.1-common: PHP’nin temel fonksiyonları ve yardımcı programları için ortak dosyaları içerir.php8.1-opcache: PHP kodunu önbelleğe alarak performansı artıran bir modüldür.
3.3: Kurulumu Doğrulama ve PHP Sürümünü Kontrol Etme
Kurulum tamamlandıktan sonra, PHP’nin doğru bir şekilde kurulup kurulmadığını ve hangi sürümün aktif olduğunu doğrulamak önemlidir. Terminalde aşağıdaki komutu çalıştırın:
php -v
Bu komutun çıktısı, sisteminizde kurulu olan PHP sürümünü gösterecektir. Şuna benzer bir çıktı görmelisiniz:
PHP 8.1.x (cli) (built: ...) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.x, with Zend OPcache v8.1.x
Eğer çıktı PHP 8.1’i gösteriyorsa, CLI sürümü başarıyla kurulmuş demektir. PHP-FPM servisinin çalışıp çalışmadığını kontrol etmek için ise aşağıdaki komutu kullanabilirsiniz:
sudo systemctl status php8.1-fpm
Çıktıda “active (running)” ifadesini görmelisiniz. Eğer çalışmıyorsa, aşağıdaki komutla başlatabilirsiniz:
sudo systemctl start php8.1-fpm
sudo systemctl enable php8.1-fpm
enable komutu, sistem başlangıcında PHP-FPM servisinin otomatik olarak başlamasını sağlar. Bu adımlarla, PHP 8.1’in temel kurulumunu başarıyla tamamlamış oldunuz. Şimdi sıra, bu PHP kurulumunu bir web sunucusu ile entegre etmeye geldi.
sudo update-alternatives --config php komutu ile varsayılan CLI PHP sürümünü seçebilirsiniz.
Bu bölüm, PHP 8.1’in Ubuntu üzerindeki temel kurulumunu ve doğrulamasını kapsamaktadır. Kurulum sırasında herhangi bir sorunla karşılaşırsanız, genellikle hata mesajları sorunun nerede olduğunu anlamanıza yardımcı olacaktır. İnternet üzerindeki forumlar ve dokümantasyonlar da bu tür durumlarda iyi birer kaynak olabilir. Şimdi, bu PHP kurulumunu web sunucularımızla nasıl entegre edeceğimize bakalım.
Web Sunucusu Entegrasyonu: Apache veya Nginx ile PHP-FPM Nasıl Yapılandırılır?
PHP 8.1’i başarıyla kurduktan sonra, web uygulamalarınızın tarayıcı üzerinden erişilebilir olması için bir web sunucusu ile entegre etmeniz gerekir. En popüler iki web sunucusu Apache ve Nginx’tir. Her ikisi de PHP-FPM ile mükemmel bir şekilde çalışır ve farklı kullanım senaryolarına göre avantajlar sunar. Bu bölümde, her iki web sunucusuyla da PHP 8.1’i nasıl yapılandıracağınızı ve sanal hostlar (Virtual Hosts) oluşturarak birden fazla projenizi nasıl yöneteceğinizi adım adım açıklayacağız.
Apache ile PHP 8.1 (PHP-FPM) Nasıl Yapılandırılır?
Apache, uzun yıllardır web sunucusu pazarında lider konumda olan, esnek ve güçlü bir sunucudur. PHP-FPM ile entegrasyonu, Apache’nin geleneksel mod_php modülüne göre daha iyi performans ve izolasyon sağlar.
- Apache Kurulumu:
Eğer Apache sisteminizde kurulu değilse, aşağıdaki komutla kurabilirsiniz:sudo apt install apache2 -yKurulum tamamlandıktan sonra Apache servisinin çalıştığından emin olun:
sudo systemctl status apache2“active (running)” çıktısını görmelisiniz.
- PHP-FPM Modülünü Etkinleştirme:
Apache’nin PHP-FPM ile konuşabilmesi içinmod_proxy_fcgivemod_rewritemodüllerini etkinleştirmemiz gerekir:sudo a2enmod proxy_fcgi setenvif rewrite sudo a2enconf php8.1-fpm sudo systemctl restart apache2a2enmodkomutu, Apache modüllerini etkinleştirir.a2enconf php8.1-fpmise, PHP-FPM yapılandırma dosyasını etkinleştirir. Son olarak, Apache’yi yeniden başlatarak değişiklikleri uyguluyoruz. - Sanal Host (Virtual Host) Oluşturma:
Her projeniz için ayrı bir sanal host oluşturmak, projelerinizi birbirinden izole etmenizi ve farklı domainler üzerinden erişmenizi sağlar. Örnek olarakbenimprojem.localadında bir proje için sanal host oluşturalım.
Öncelikle proje dizinimizi oluşturalım:sudo mkdir -p /var/www/html/benimprojem sudo chown -R $USER:$USER /var/www/html/benimprojemArdından, yeni bir Apache yapılandırma dosyası oluşturalım:
sudo nano /etc/apache2/sites-available/benimprojem.local.confDosyanın içine aşağıdaki içeriği yapıştırın:
<VirtualHost *:80> ServerAdmin webmaster@localhost ServerName benimprojem.local DocumentRoot /var/www/html/benimprojem <Directory /var/www/html/benimprojem> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/benimprojem.local_error.log CustomLog ${APACHE_LOG_DIR}/benimprojem.local_access.log combined <FilesMatch \.php$> SetHandler "proxy:unix:/run/php/php8.1-fpm.sock|fcgi://localhost/" </FilesMatch> </VirtualHost>Bu yapılandırma, Apache’ye
benimprojem.localadresine gelen istekleri/var/www/html/benimprojemdizinine yönlendirmesini ve PHP dosyalarını PHP 8.1 FPM soketi aracılığıyla işlemesini söyler.
Sanal host’u etkinleştirin ve Apache’yi yeniden başlatın:sudo a2ensite benimprojem.local.conf sudo systemctl reload apache2 - Hosts Dosyasını Düzenleme:
Yerel ortamınızdabenimprojem.localadresini kullanabilmek için/etc/hostsdosyanızı düzenlemeniz gerekir:sudo nano /etc/hostsDosyanın sonuna aşağıdaki satırı ekleyin:
127.0.0.1 benimprojem.localKaydedip kapatın.
- Test Etme:
/var/www/html/benimprojemdizinine birindex.phpdosyası oluşturun:echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/benimprojem/index.phpTarayıcınızda
http://benimprojem.localadresine gidin. PHP 8.1 bilgi sayfasını görmelisiniz.
Nginx ile PHP 8.1 (PHP-FPM) Nasıl Yapılandırılır?
Nginx, özellikle yüksek performans ve eşzamanlı bağlantıları yönetme yeteneği ile bilinen hafif ve güçlü bir web sunucusudur. Genellikle statik içerik sunumunda ve ters proxy olarak kullanılır, dinamik içerik için PHP-FPM ile entegre edilir.
- Nginx Kurulumu:
Eğer Nginx sisteminizde kurulu değilse:sudo apt install nginx -yNginx servisinin çalıştığından emin olun:
sudo systemctl status nginx - Sanal Host (Server Block) Oluşturma:
Apache’deki sanal hostlara benzer şekilde, Nginx’te “server block”lar oluştururuz.
Proje dizinimizi oluşturalım:sudo mkdir -p /var/www/html/benimprojem_nginx sudo chown -R $USER:$USER /var/www/html/benimprojem_nginxYeni bir Nginx yapılandırma dosyası oluşturalım:
sudo nano /etc/nginx/sites-available/benimprojem_nginx.localDosyanın içine aşağıdaki içeriği yapıştırın:
server { listen 80; server_name benimprojem_nginx.local; root /var/www/html/benimprojem_nginx; index index.php index.html index.htm; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.1-fpm.sock; } error_log /var/log/nginx/benimprojem_nginx_error.log; access_log /var/log/nginx/benimprojem_nginx_access.log; }Bu yapılandırma, Nginx’e
benimprojem_nginx.localadresine gelen istekleri/var/www/html/benimprojem_nginxdizinine yönlendirmesini ve PHP dosyalarını PHP 8.1 FPM soketi aracılığıyla işlemesini söyler. - Server Block’u Etkinleştirme ve Nginx’i Yeniden Başlatma:
Yapılandırma dosyasınısites-enableddizinine sembolik link oluşturarak etkinleştirin ve Nginx yapılandırmasını test edip yeniden yükleyin:sudo ln -s /etc/nginx/sites-available/benimprojem_nginx.local /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx - Hosts Dosyasını Düzenleme:
/etc/hostsdosyanıza Nginx projeniz için de bir giriş ekleyin:sudo nano /etc/hostsDosyanın sonuna aşağıdaki satırı ekleyin:
127.0.0.1 benimprojem_nginx.localKaydedip kapatın.
- Test Etme:
/var/www/html/benimprojem_nginxdizinine birindex.phpdosyası oluşturun:echo "<?php phpinfo(); ?>" | sudo tee /var/www/html/benimprojem_nginx/index.phpTarayıcınızda
http://benimprojem_nginx.localadresine gidin. PHP 8.1 bilgi sayfasını görmelisiniz.
.htaccess dosyaları aracılığıyla daha esnek dizin bazlı yapılandırma imkanları sunar. Projenizin ihtiyaçlarına göre doğru sunucuyu seçmek performansı etkileyebilir.
Bu adımlarla, seçtiğiniz web sunucusu ile PHP 8.1’i başarıyla entegre etmiş oldunuz. Artık yerel ortamınızda PHP uygulamaları geliştirmeye hazırsınız. Her iki sunucu için de sanal hostlar oluşturarak, aynı Ubuntu sistemi üzerinde birden fazla PHP projesini izole bir şekilde çalıştırabilirsiniz. Bu esneklik, özellikle birden fazla proje üzerinde çalışan geliştiriciler için paha biçilmezdir.
Veritabanı Yönetimi: MySQL veya PostgreSQL Kurulumu ve PHP ile Bağlantı Nasıl Sağlanır?
Her dinamik web uygulamasının kalbinde bir veritabanı bulunur. Kullanıcı bilgileri, ürün katalogları, sipariş detayları ve daha fazlası gibi tüm kritik veriler veritabanlarında saklanır. PHP ile geliştirme yaparken en sık kullanılan veritabanları MySQL (veya onun açık kaynaklı bir çatalı olan MariaDB) ve PostgreSQL’dir. Her ikisi de güçlü ve güvenilirdir, ancak farklı senaryolar için farklı avantajlar sunarlar. Bu bölümde, her iki veritabanını da Ubuntu’ya nasıl kuracağınızı ve PHP uygulamalarınızla nasıl bağlantı kuracağınızı adım adım inceleyeceğiz.
MySQL/MariaDB Kurulumu ve Yapılandırması
MySQL, web uygulamaları için en popüler ilişkisel veritabanı yönetim sistemlerinden biridir. Genellikle LAMP (Linux, Apache, MySQL, PHP) veya LEMP (Linux, Nginx, MySQL, PHP) yığınlarının temel bileşenidir. Ubuntu’da MySQL’i kurmak oldukça basittir.
- MySQL Kurulumu:
Aşağıdaki komutla MySQL sunucusunu kurun:sudo apt install mysql-server -yKurulum sırasında sizden bir root şifresi belirlemeniz istenebilir veya kurulum sonrası güvenlik betiği aracılığıyla bu işlemi yapabilirsiniz.
- MySQL Güvenlik Betiğini Çalıştırma:
MySQL kurulumundan sonra, varsayılan güvenlik ayarlarını iyileştirmek için bir güvenlik betiği çalıştırmak iyi bir uygulamadır:sudo mysql_secure_installationBu betik size bir dizi soru soracaktır:
VALIDATE PASSWORD COMPONENT: Şifre gücü politikası. Yerel ortamda “No” diyebilirsiniz.- Root şifresi belirleme veya değiştirme.
- Anonim kullanıcıları kaldırma.
- Root kullanıcısının uzaktan giriş yapmasını engelleme (güvenlik için “Yes”).
- Test veritabanını kaldırma.
- Ayrıcalık tablolarını yeniden yükleme.
Genellikle tüm sorulara “Yes” (Y) yanıtını vermek, daha güvenli bir kurulum sağlayacaktır.
- Veritabanı ve Kullanıcı Oluşturma:
Yeni bir PHP projesi için genellikle ayrı bir veritabanı ve o veritabanına erişebilecek bir kullanıcı oluşturmak en iyi uygulamadır. MySQL kabuğuna root olarak giriş yapın:sudo mysql -u root -pŞifrenizi girin. Ardından, aşağıdaki komutları kullanarak bir veritabanı ve kullanıcı oluşturun. Kendi proje adınıza, kullanıcı adınıza ve güçlü bir şifreye göre uyarlamayı unutmayın:
CREATE DATABASEbenim_proje_dbCHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'benim_proje_user'@'localhost' IDENTIFIED BY 'GucluSifre123!'; GRANT ALL PRIVILEGES ONbenim_proje_db.* TO 'benim_proje_user'@'localhost'; FLUSH PRIVILEGES; EXIT;Bu komutlar,
benim_proje_dbadında bir veritabanı oluşturur,benim_proje_useradında bir kullanıcı tanımlar ve bu kullanıcıya yalnızcabenim_proje_dbüzerindeki tüm yetkileri verir.
PostgreSQL Kurulumu ve Yapılandırması
PostgreSQL, gelişmiş özellik setleri, ACID uyumluluğu ve yüksek performansıyla bilinen, açık kaynaklı, nesne-ilişkisel bir veritabanı yönetim sistemidir. Özellikle karmaşık veri yapıları ve yüksek veri bütünlüğü gerektiren uygulamalar için tercih edilir.
- PostgreSQL Kurulumu:
PostgreSQL sunucusunu ve gerekli istemci araçlarını kurun:sudo apt install postgresql postgresql-contrib -yKurulum tamamlandıktan sonra PostgreSQL servisinin çalıştığından emin olun:
sudo systemctl status postgresql - PostgreSQL Veritabanı ve Kullanıcı Oluşturma:
PostgreSQL, varsayılan olarakpostgresadında bir süper kullanıcı ve aynı isimde bir Linux kullanıcısı oluşturur. Bu kullanıcıyla veritabanı işlemlerini gerçekleştirebilirsiniz.
postgreskullanıcısına geçiş yapın:sudo -i -u postgresPostgreSQL kabuğuna girin:
psqlYeni bir veritabanı ve kullanıcı oluşturun:
CREATE DATABASE benim_proje_pg_db; CREATE USER benim_proje_pg_user WITH PASSWORD 'GucluPgSifre123!'; GRANT ALL PRIVILEGES ON DATABASE benim_proje_pg_db TO benim_proje_pg_user; \qpostgreskullanıcısından çıkış yapın:exitBu komutlar,
benim_proje_pg_dbadında bir veritabanı oluşturur vebenim_proje_pg_useradında bir kullanıcı tanımlayıp ona ilgili veritabanı üzerinde yetki verir.
PHP ile Veritabanı Bağlantısı Nasıl Sağlanır?
Veritabanlarını kurduktan sonra, PHP uygulamanızın bu veritabanlarına bağlanabilmesi için gerekli PHP modüllerini kurmanız ve bağlantı kodunu yazmanız gerekir.
- Gerekli PHP Modüllerini Kurma:
MySQL içinphp8.1-mysqlmodülünü zaten kurmuştuk. PostgreSQL için isephp8.1-pgsqlmodülünü kurmalıyız:sudo apt install php8.1-pgsql -y sudo systemctl restart php8.1-fpm apache2 # veya nginxModülü kurduktan sonra PHP-FPM ve web sunucusunu yeniden başlatmayı unutmayın.
- PHP Bağlantı Kodu Örnekleri:
MySQL (PDO ile):
<?php $host = 'localhost'; $db = 'benim_proje_db'; $user = 'benim_proje_user'; $pass = 'GucluSifre123!'; $charset = 'utf8mb4'; $dsn = "mysql:host=$host;dbname=$db;charset=$charset"; $options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]; try { $pdo = new PDO($dsn, $user, $pass, $options); echo "MySQL veritabanına başarıyla bağlanıldı!<br>"; // Örnek sorgu $stmt = $pdo->query('SELECT VERSION()'); $version = $stmt->fetchColumn(); echo "MySQL Sürümü: " . $version; } catch (\PDOException $e) { throw new \PDOException($e->getMessage(), (int)$e->getCode()); } ?>PostgreSQL (PDO ile):
<?php $host = 'localhost'; $db = 'benim_proje_pg_db'; $user = 'benim_proje_pg_user'; $pass = 'GucluPgSifre123!'; $dsn = "pgsql:host=$host;dbname=$db"; $options = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_EMULATE_PREPARES => false, ]; try { $pdo = new PDO($dsn, $user, $pass, $options); echo "PostgreSQL veritabanına başarıyla bağlanıldı!<br>"; // Örnek sorgu $stmt = $pdo->query('SELECT version()'); $version = $stmt->fetchColumn(); echo "PostgreSQL Sürümü: " . $version; } catch (\PDOException $e) { throw new \PDOException($e->getMessage(), (int)$e->getCode()); } ?>Bu kod bloklarını web sunucunuzun erişebileceği bir PHP dosyasına (örneğin
db_test.php) kaydedip tarayıcınızdan çağırarak bağlantıyı test edebilirsiniz. Başarılı bir bağlantıda, ilgili veritabanı sürümünü görmelisiniz.
Vaka Analizi: Büyük Bir Veri Setine Sahip Uygulamanın Performans Optimizasyonunda Doğru Veritabanı Seçimi
Bir finansal analiz platformu geliştiren takım, başlangıçta MySQL kullanıyordu. Ancak, platform büyüdükçe ve milyarlarca finansal işlem verisi depolamaya başladıkça, karmaşık analitik sorguların performansı düşmeye başladı. Özellikle büyük veri setleri üzerinde yapılan birleşim (join) işlemleri ve gelişmiş indeksleme ihtiyaçları, MySQL’in zayıf kaldığı noktalar haline geldi. Takım, PostgreSQL’in daha gelişmiş indeksleme seçenekleri (örneğin, kısmi indeksler, ifade indeksleri) ve daha sofistike sorgu optimizasyon yetenekleri nedeniyle PostgreSQL’e geçiş yapmaya karar verdi. Geçiş sonrası, özellikle zaman serisi verileri ve çok boyutlu analizler içeren sorgularda %30-40’lık bir performans artışı gözlemlediler. Bu durum, projenin ölçeği ve veri yapısı göz önüne alındığında, doğru veritabanı seçiminin sadece kurulumdan ibaret olmadığını, aynı zamanda uzun vadeli performans ve sürdürülebilirlik açısından kritik olduğunu gösterdi.
Bu bölümle birlikte, PHP 8.1 geliştirme ortamınızın temel taşları olan web sunucusu ve veritabanı kurulumlarını tamamlamış oldunuz. Artık dinamik web uygulamaları geliştirmek için sağlam bir altyapıya sahipsiniz. Bir sonraki adımda, geliştirme sürecinizi daha verimli hale getirecek araçlara odaklanacağız.
Geliştirme Ortamını Zenginleştirme: Composer, Xdebug ve Diğer Araçlar Nelerdir?
Temel PHP 8.1, web sunucusu ve veritabanı kurulumlarını tamamladık. Ancak modern PHP geliştirme, sadece bu temel bileşenlerden ibaret değildir. Geliştirme sürecini hızlandırmak, kod kalitesini artırmak ve hata ayıklama süreçlerini kolaylaştırmak için bir dizi yardımcı araca ihtiyacımız var. Bu bölümde, PHP ekosisteminin vazgeçilmezleri olan Composer ve Xdebug’ı nasıl kurup yapılandıracağınızı, ayrıca geliştirme deneyiminizi daha da zenginleştirecek diğer araçları ele alacağız.
Composer Kurulumu ve Kullanımı: Bağımlılık Yönetimi
Composer, PHP için bir bağımlılık yöneticisidir. Projenizin ihtiyaç duyduğu kütüphaneleri ve paketleri indirmenizi, güncellemenizi ve yönetmenizi sağlar. Modern PHP çerçeveleri (Laravel, Symfony) ve birçok kütüphane Composer olmadan kullanılamaz. Bu nedenle, Composer’ın kurulumu ve kullanımı, günümüz PHP geliştirme pratiğinin temel bir parçasıdır.
- Composer Kurulumu:
Composer’ı Ubuntu’ya kurmanın en güvenli yolu, resmi web sitesinden indirilen bir betik kullanmaktır. Terminalde aşağıdaki komutları çalıştırın:php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php composer-setup.php php -r "unlink('composer-setup.php');" sudo mv composer.phar /usr/local/bin/composerBu komutlar sırasıyla:
- Composer yükleyici betiğini indirir.
- İndirilen betiği çalıştırarak
composer.phardosyasını oluşturur. - Yükleyici betiğini siler.
composer.phardosyasını sisteminize genel olarak erişilebilir hale getirmek için/usr/local/bin/composerkonumuna taşır.
- Composer Kurulumunu Doğrulama:
Composer’ın doğru bir şekilde kurulup kurulmadığını kontrol etmek için aşağıdaki komutu çalıştırın:composer -vÇıktıda Composer sürümünü görmelisiniz.
- Composer Kullanımı (Örnek):
Yeni bir proje dizini oluşturup içine popüler bir kütüphane olan Monolog’u (bir loglama kütüphanesi) ekleyelim:mkdir benim_composer_projem cd benim_composer_projem composer require monolog/monologBu komut,
monolog/monologpaketini projenize indirir,vendor/dizinini oluşturur vecomposer.jsonilecomposer.lockdosyalarını günceller. Daha sonra PHP kodunuzdarequire 'vendor/autoload.php';satırını ekleyerek bu kütüphaneyi kullanabilirsiniz.
Xdebug Kurulumu ve Yapılandırması: Hata Ayıklama ve Profil Oluşturma
Xdebug, PHP geliştiricileri için vazgeçilmez bir hata ayıklama ve profil oluşturma aracıdır. Kodunuzdaki hataları adım adım izlemenizi, değişkenlerin değerlerini incelemenizi ve performans darboğazlarını tespit etmenizi sağlar. Bu, özellikle karmaşık uygulamalarda zaman tasarrufu sağlar.
- Xdebug Kurulumu:
Xdebug’ı PHP 8.1 için aşağıdaki komutla kurabilirsiniz:sudo apt install php8.1-xdebug -y sudo systemctl restart php8.1-fpm apache2 # veya nginxKurulumdan sonra web sunucunuzu yeniden başlatmayı unutmayın.
- Xdebug Yapılandırması:
Xdebug’ın çalışması içinphp.inidosyasında yapılandırma yapmamız gerekir. PHP 8.1 için bu dosya genellikle/etc/php/8.1/mods-available/xdebug.inikonumundadır.sudo nano /etc/php/8.1/mods-available/xdebug.iniDosyanın içine aşağıdaki satırları ekleyin veya mevcut satırları düzenleyin:
zend_extension=xdebug.so xdebug.mode=develop,debug xdebug.start_with_request=yes xdebug.client_host=127.0.0.1 xdebug.client_port=9003 xdebug.log=/tmp/xdebug.logAçıklamalar:
zend_extension=xdebug.so: Xdebug modülünü etkinleştirir.xdebug.mode=develop,debug: Geliştirme ve hata ayıklama modlarını açar. Diğer modlar arasındaprofile(performans analizi için) vetrace(fonksiyon çağrı izi için) bulunur.xdebug.start_with_request=yes: Her istekte Xdebug’ın otomatik olarak başlamasını sağlar. Alternatif olarak, tarayıcı eklentileriyle (Xdebug Helper) belirli isteklerde başlatabilirsiniz.xdebug.client_hostvexdebug.client_port: Xdebug’ın IDE’nizle iletişim kuracağı IP adresi ve portu belirler. Genellikle varsayılan değerler yeterlidir.xdebug.log: Xdebug’ın hata ayıklama günlüklerini kaydettiği yer. Sorun giderme için faydalıdır.
Değişiklikleri kaydedip çıktıktan sonra, PHP-FPM ve web sunucunuzu tekrar yeniden başlatın:
sudo systemctl restart php8.1-fpm apache2 # veya nginx - IDE Entegrasyonu (VS Code Örneği):
Xdebug’ı kullanabilmek için bir IDE (Entegre Geliştirme Ortamı) gerekir. VS Code, popüler ve ücretsiz bir seçenektir.- VS Code’a “PHP Debug” eklentisini kurun.
- Projenizin kök dizininde bir
.vscode/launch.jsondosyası oluşturun. launch.jsoniçine aşağıdaki yapılandırmayı ekleyin:{ "version": "0.2.0", "configurations": [ { "name": "Listen for Xdebug", "type": "php", "request": "launch", "port": 9003 }, { "name": "Launch currently open script", "type": "php", "request": "launch", "program": "${file}", "cwd": "${workspaceRoot}", "port": 9003 } ] }- VS Code’da Hata Ayıklama (Debug) görünümüne geçin (Ctrl+Shift+D). “Listen for Xdebug” seçeneğini seçip başlatın (yeşil üçgen ikon).
- PHP kodunuzda bir kesme noktası (breakpoint) belirleyin ve tarayıcınızdan uygulamanıza erişin. Kodunuzun kesme noktasında durduğunu ve değişkenleri inceleyebildiğinizi görmelisiniz.
Diğer Faydalı Araçlar
- phpMyAdmin/Adminer: Veritabanlarınızı web arayüzü üzerinden yönetmek için phpMyAdmin (daha kapsamlı) veya Adminer (daha hafif) kurabilirsiniz. Bu araçlar, veritabanı tablolarını görüntüleme, sorgu çalıştırma ve veri girişi gibi işlemleri kolaylaştırır.
- Git: Versiyon kontrol sistemi olarak Git, her geliştiricinin olmazsa olmazıdır. Kod değişikliklerini takip etmek, farklı sürümler arasında geçiş yapmak ve takım halinde çalışmak için kullanılır. Ubuntu’da
sudo apt install git -ykomutuyla kolayca kurulabilir. - IDE/Metin Düzenleyici: VS Code’un yanı sıra PhpStorm (ücretli, profesyonel) veya Sublime Text gibi güçlü IDE’ler veya metin düzenleyiciler, kod yazma deneyiminizi geliştiren özellikler (otomatik tamamlama, sözdizimi vurgulama, kod analizi) sunar.
xdebug.mode=off ile kapatıp gerektiğinde debug veya profile moduna alabilirsiniz.
Bu araçlar, PHP geliştirme ortamınızı sadece işlevsel değil, aynı zamanda verimli ve keyifli hale getirecektir. Composer ile bağımlılıklarınızı kolayca yönetirken, Xdebug ile hataları hızla ayıklayabilir ve performans sorunlarını tespit edebilirsiniz. Diğer yardımcı araçlar ise genel geliştirme akışınızı optimize etmenize yardımcı olacaktır. Artık modern bir PHP geliştirme ortamına tam anlamıyla sahipsiniz.
Performans ve Güvenlik İpuçları: Yerel Ortamınızı Nasıl Optimize Edersiniz?
Yerel geliştirme ortamınızı kurmak harika bir başlangıçtır, ancak en iyi performansı ve güvenliği sağlamak için bazı ek optimizasyonlar ve iyi uygulamalar uygulamak önemlidir. Bu bölümde, PHP 8.1 kurulumunuzu daha hızlı ve daha güvenli hale getirmek için kullanabileceğiniz ipuçlarını ve püf noktalarını inceleyeceğiz. Bu optimizasyonlar, canlı sunucu ortamlarında da benzer faydalar sağlayacak prensiplere dayanır, bu nedenle yerel ortamınızda pratik yapmak, gelecekteki dağıtımlarınız için de size yol gösterecektir.
OPcache Kullanımı ve Yapılandırması
OPcache, PHP’nin performansını önemli ölçüde artıran bir modüldür. PHP betikleri her istekte derlenmek yerine, derlenmiş kodu bellekte önbelleğe alarak sonraki isteklerde doğrudan bu önbelleği kullanır. Bu, özellikle büyük ve karmaşık PHP uygulamalarında sayfa yükleme sürelerini ve sunucu yükünü azaltır.
PHP 8.1 ile OPcache genellikle varsayılan olarak etkindir ve yukarıdaki kurulum adımlarında php8.1-opcache paketini zaten kurmuştuk. Ancak, performansını daha da optimize etmek için yapılandırma ayarlarını kontrol edebilir ve değiştirebilirsiniz. OPcache yapılandırma dosyası genellikle /etc/php/8.1/fpm/conf.d/10-opcache.ini veya /etc/php/8.1/cli/conf.d/10-opcache.ini (CLI için) konumundadır.
sudo nano /etc/php/8.1/fpm/conf.d/10-opcache.ini
İşte bazı önerilen OPcache ayarları:
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=0
opcache.validate_timestamps=0
opcache.fast_shutdown=1
opcache.enable=1: OPcache’i etkinleştirir.opcache.memory_consumption=128: Önbellek için ayrılan belleği (MB cinsinden) ayarlar. Projenizin büyüklüğüne göre bu değeri artırabilirsiniz.opcache.interned_strings_buffer=8: Dahili dizeler için kullanılan belleği ayarlar.opcache.max_accelerated_files=10000: Önbelleğe alınabilecek maksimum dosya sayısını belirler. Büyük projeler için bu değeri artırmak faydalı olabilir.opcache.revalidate_freq=0veopcache.validate_timestamps=0: Bu ayarlar, OPcache’in dosyalardaki değişiklikleri kontrol etme sıklığını belirler. Geliştirme ortamında, kod değişikliklerinizin anında yansıması içinrevalidate_freqdeğerini1veya2(saniye cinsinden) olarak ayarlayabilirsiniz. Canlı ortamda ise performansı artırmak için0olarak bırakmak ve kod dağıtımı sonrası OPcache’i manuel olarak temizlemek daha iyidir.opcache.fast_shutdown=1: Hızlı kapanma dizisi kullanarak performansı artırır.
Değişiklikleri yaptıktan sonra PHP-FPM servisini yeniden başlatmayı unutmayın:
sudo systemctl restart php8.1-fpm
PHP-FPM Ayarlarını Optimize Etme
PHP-FPM, PHP betiklerini çalıştıran bir işlem yöneticisidir. Performansını optimize etmek için bazı ayarlarını düzenleyebilirsiniz. Bu ayarlar, genellikle /etc/php/8.1/fpm/pool.d/www.conf dosyasında bulunur.
sudo nano /etc/php/8.1/fpm/pool.d/www.conf
Önemli ayarlar şunlardır:
pm = dynamic: İşlem yöneticisi modunu belirler.dynamic(dinamik) veyaondemand(isteğe bağlı) çoğu geliştirme ortamı için uygundur.static(statik) ise yüksek trafikli canlı sunucular için daha iyidir.pm.max_children: Oluşturulabilecek maksimum çocuk işlem sayısı.pm.start_servers: Başlangıçta oluşturulan sunucu işlem sayısı.pm.min_spare_servers: Minimum boşta bekleyen sunucu işlem sayısı.pm.max_spare_servers: Maksimum boşta bekleyen sunucu işlem sayısı.
Bu değerleri, sisteminizin kaynaklarına (RAM) ve aynı anda kaç isteği işlemeniz gerektiğine göre ayarlamalısınız. Aşırıya kaçmak bellek tüketimine yol açabilir, çok düşük tutmak ise performansı düşürebilir. Yerel ortamda, genellikle varsayılan değerler yeterlidir, ancak performans sorunları yaşıyorsanız bu değerleri artırmayı düşünebilirsiniz.
sudo systemctl restart php8.1-fpm
Güvenlik Best Practices: İzinler ve Şifreler
Yerel geliştirme ortamı olsa bile güvenlik her zaman önemlidir. Özellikle ileride canlıya almayı düşündüğünüz bir proje üzerinde çalışıyorsanız, güvenli alışkanlıklar edinmek faydalıdır.
- Dosya ve Dizin İzinleri: Web sunucunuzun sadece ihtiyaç duyduğu dosyalara yazma izni olduğundan emin olun. Genellikle, web dizinlerinin sahibi web sunucusu kullanıcısı (örneğin
www-data) olmalı ve izinler755(dizinler) ve644(dosyalar) şeklinde ayarlanmalıdır. Yükleme dizinleri veya cache dizinleri gibi yazma izni gerektiren yerler için775veya777(sadece yerel ortamda ve dikkatlice) kullanılabilir, ancak canlı ortamda775ve doğru kullanıcı/grup sahipliği tercih edilmelidir.sudo chown -R www-data:www-data /var/www/html/benimprojem sudo find /var/www/html/benimprojem -type d -exec chmod 755 {} \; sudo find /var/www/html/benimprojem -type f -exec chmod 644 {} \; - Güçlü Şifreler: Veritabanı kullanıcılarınız, SSH erişiminiz ve diğer hizmetleriniz için her zaman güçlü ve benzersiz şifreler kullanın. Yerel ortamda bile “password” veya “123456” gibi zayıf şifrelerden kaçının.
- Gereksiz Servisleri Kapatma: Kullanmadığınız servisleri (örneğin, birden fazla veritabanı sunucusu) kapatarak sistem kaynaklarını serbest bırakın ve potansiyel güvenlik açıklarını azaltın.
HTTPS Yerel Ortamda Nasıl Kurulur (Self-Signed Sertifika)
Modern web uygulamaları genellikle HTTPS üzerinden çalışır. Yerel ortamınızda da HTTPS kullanarak, canlı ortamdaki davranışları daha doğru bir şekilde taklit edebilir ve güvenlik sorunlarını önceden tespit edebilirsiniz. Yerel ortamda genellikle “self-signed” (kendinden imzalı) sertifikalar kullanılır.
Aşağıdaki adımlar, Apache için self-signed bir SSL sertifikası oluşturmayı ve yapılandırmayı gösterir:
- SSL Modülünü Etkinleştirme:
sudo a2enmod ssl sudo systemctl restart apache2 - Kendinden İmzalı Sertifika Oluşturma:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/apache-selfsigned.key -out /etc/ssl/certs/apache-selfsigned.crtBu komut, size bir dizi soru soracaktır (ülke, şehir, organizasyon adı vb.).
Common Name(Ortak Ad) alanına sanal host’unuzun adını (örn.benimprojem.local) girmeniz önemlidir. - Sanal Host’u HTTPS için Yapılandırma:
Mevcut sanal host yapılandırma dosyanızı (örneğin/etc/apache2/sites-available/benimprojem.local.conf) düzenleyin ve<VirtualHost *:443>bloğunu ekleyin:<VirtualHost *:80> ServerName benimprojem.local Redirect permanent / https://benimprojem.local/ </VirtualHost> <VirtualHost *:443> ServerAdmin webmaster@localhost ServerName benimprojem.local DocumentRoot /var/www/html/benimprojem <Directory /var/www/html/benimprojem> Options Indexes FollowSymLinks AllowOverride All Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/benimprojem.local_error.log CustomLog ${APACHE_LOG_DIR}/benimprojem.local_access.log combined <FilesMatch \.php$> SetHandler "proxy:unix:/run/php/php8.1-fpm.sock|fcgi://localhost/" </FilesMatch> SSLEngine on SSLCertificateFile /etc/ssl/certs/apache-selfsigned.crt SSLCertificateKeyFile /etc/ssl/private/apache-selfsigned.key </VirtualHost>Bu yapılandırma, HTTP isteklerini HTTPS’ye yönlendirir ve HTTPS için gerekli sertifika yollarını belirtir.
- Apache’yi Yeniden Başlatma:
sudo systemctl reload apache2Tarayıcınızda
https://benimprojem.localadresine gittiğinizde, tarayıcınız sertifikayı güvenilir bulmadığı için bir uyarı gösterecektir. Bu normaldir, çünkü sertifika kendiniz tarafından imzalanmıştır. Güvenliği kabul ederek devam edebilirsiniz.
opcache.revalidate_freq=0) ve Xdebug’ı devre dışı bırakın. Bu, canlı ortamdaki performansı daha doğru bir şekilde taklit etmenizi sağlar.
Bu performans ve güvenlik ipuçları, yerel geliştirme ortamınızın sadece çalışır durumda olmasını değil, aynı zamanda verimli ve güvenli olmasını sağlar. Bu uygulamaları benimseyerek, daha sağlam ve yüksek performanslı PHP uygulamaları geliştirebilirsiniz.
Sonuç ve Sıkça Sorulan Sorular
Bu kapsamlı rehber boyunca, Ubuntu işletim sistemi üzerinde modern bir PHP 8.1 geliştirme ortamını sıfırdan nasıl kuracağınızı adım adım öğrendik. PHP 8.1’in getirdiği yeniliklerden ve performans artışlarından başlayarak, web sunucusu (Apache veya Nginx) entegrasyonuna, veritabanı kurulumuna (MySQL veya PostgreSQL), bağımlılık yönetimi için Composer’a ve hata ayıklama için Xdebug’a kadar birçok önemli konuyu ele aldık. Ayrıca, performans ve güvenlik ipuçlarıyla ortamınızı daha da optimize etme yollarını da keşfettik.
Artık güçlü, güncel ve verimli bir yerel PHP geliştirme ortamına sahipsiniz. Bu ortam, web uygulamalarınızı daha hızlı geliştirmek, hataları daha etkin bir şekilde ayıklamak ve en son PHP özelliklerini kullanarak daha sağlam ve modern çözümler üretmek için size zemin hazırlayacaktır. Unutmayın ki, geliştirme ortamınızı güncel tutmak ve yeni araçları keşfetmek, sürekli öğrenme yolculuğunuzun önemli bir parçasıdır. Bu rehberdeki bilgileri temel alarak, kendi özel ihtiyaçlarınıza göre ortamınızı daha da kişiselleştirebilir ve geliştirebilirsiniz.
Geliştirme dünyası sürekli değişiyor ve gelişiyor. PHP 8.1 ile gelen yenilikler, dilin ne kadar dinamik ve geleceğe yönelik olduğunu bir kez daha kanıtlıyor. Bu güçlü araçları doğru bir şekilde kullanarak, projelerinizi bir sonraki seviyeye taşıyabilir ve yaratıcılığınızı sınırsızca ortaya koyabilirsiniz. Başarılar dileriz!
Sıkça Sorulan Sorular
1. PHP 8.1’den önceki bir sürümü aynı anda kullanabilir miyim?
Evet, Ondrej PPA sayesinde Ubuntu’da birden fazla PHP sürümünü aynı anda kurabilir ve yönetebilirsiniz. Örneğin, PHP 7.4 ve PHP 8.1’i aynı anda kurmak mümkündür. Web sunucunuzu (Apache veya Nginx) farklı sanal hostlar için farklı PHP-FPM sürümlerini kullanacak şekilde yapılandırabilirsiniz. CLI (komut satırı) için ise sudo update-alternatives --config php komutunu kullanarak varsayılan PHP sürümünü seçebilirsiniz. Örneğin, bir proje PHP 7.4 gerektirirken, yeni bir proje PHP 8.1 ile çalışabilir.
2. Xdebug neden çalışmıyor?
Xdebug’ın çalışmamasının birkaç yaygın nedeni olabilir:
php.iniyapılandırması yanlış:xdebug.iniveya anaphp.inidosyasındaki ayarları doğru yaptığınızdan emin olun. Özelliklezend_extension=xdebug.sosatırının doğru yolu gösterdiğinden vexdebug.mode=debugayarının etkin olduğundan emin olun.- Web sunucusu yeniden başlatılmadı: Yapılandırma değişikliklerinden sonra PHP-FPM ve web sunucunuzu (Apache/Nginx) yeniden başlatmayı unutmayın (
sudo systemctl restart php8.1-fpm apache2). - IDE yapılandırması yanlış: IDE’nizin (örneğin VS Code) Xdebug için doğru portu (genellikle 9003) dinlediğinden ve hata ayıklama oturumunu başlattığınızdan emin olun.
- Güvenlik duvarı: Ubuntu’nuzda bir güvenlik duvarı (UFW gibi) etkinse, Xdebug portunun (9003) gelen bağlantılara açık olduğundan emin olun (
sudo ufw allow 9003). - Tarayıcı eklentisi: Eğer
xdebug.start_with_request=yeskullanmıyorsanız, tarayıcı Xdebug Helper eklentinizin etkin olduğundan ve doğru IDE key’i ile yapılandırıldığından emin olun.
3. Yerel ortamımı internete açabilir miyim?
Teorik olarak evet, ancak kesinlikle tavsiye edilmez. Yerel geliştirme ortamları güvenlik açısından canlı sunucular kadar sıkı yapılandırılmaz ve birçok güvenlik açığı içerebilir. Eğer projenizi başkalarıyla paylaşmanız gerekiyorsa, bunun yerine bir test sunucusu (staging environment) kullanmak veya Ngrok gibi araçlarla geçici ve güvenli tüneller oluşturmak daha güvenlidir. Ngrok, yerel sunucunuzu güvenli bir şekilde internete açmanıza olanak tanır, ancak bu da sadece kısa süreli gösterimler veya testler için kullanılmalıdır.
4. Composer nedir ve neden kullanmalıyım?
Composer, PHP için bir bağımlılık yöneticisidir. Projenizin ihtiyaç duyduğu kütüphaneleri (paketleri) indirmenizi, güncellemenizi ve yönetmenizi sağlar. PHP ekosistemindeki neredeyse tüm modern çerçeveler (Laravel, Symfony) ve kütüphaneler Composer aracılığıyla kurulur. Kullanımının temel nedenleri şunlardır:
- Bağımlılık Çözümleme: Bir kütüphane başka kütüphanelere bağımlıysa, Composer bunları otomatik olarak indirir.
- Kolay Kurulum: Tek bir komutla karmaşık kütüphaneleri projenize ekleyebilirsiniz.
- Otomatik Yükleme (Autoloading):
vendor/autoload.phpdosyası sayesinde, kütüphane sınıflarını manuel olarakrequireetmenize gerek kalmaz. - Sürüm Kontrolü:
composer.jsonvecomposer.lockdosyaları, projenizin hangi kütüphanenin hangi sürümünü kullandığını kesin olarak belirtir, bu da farklı geliştirme ortamlarında tutarlılık sağlar.
5. PHP-FPM nedir ve neden Apache mod_php yerine tercih edilmeli?
PHP-FPM (FastCGI Process Manager), PHP betiklerini web sunucusundan (Apache veya Nginx) ayrı bir işlem olarak çalıştıran bir FastCGI uygulamasıdır. Geleneksel mod_php (Apache modülü) ise PHP yorumlayıcısını doğrudan Apache sürecine entegre eder. PHP-FPM’in tercih edilmesinin başlıca nedenleri:
- Performans: PHP-FPM, her Apache çocuk sürecinin PHP yorumlayıcısını yüklemesini gerektirmediği için daha az bellek tüketir ve daha hızlı yanıt süreleri sunar. Özellikle yoğun trafikli sitelerde avantajlıdır.
- İzolasyon: Her PHP-FPM havuzu (pool) farklı bir kullanıcı altında çalışabilir, bu da birden fazla site barındırırken güvenlik ve izolasyon sağlar. Bir sitenin çökmesi diğerlerini etkilemez.
- Esneklik: Apache ve Nginx gibi farklı web sunucularıyla sorunsuz bir şekilde entegre olabilir. Ayrıca, farklı PHP sürümlerini farklı havuzlarda çalıştırabilir.
- Kararlılık: PHP-FPM, PHP süreçlerini yönetir, çöken süreçleri yeniden başlatır ve kaynak kullanımını optimize eder, bu da genel sistem kararlılığını artırır.