Takip et

Giriş: Neden LEMP Stack’e İhtiyaç Duyarsınız?

Ubuntu’da LEMP Stack Kurulumu: Adım Adım Rehber

Web uygulamalarınızı veya sitelerinizi yayınlamak için güçlü ve esnek bir altyapı mı arıyorsunuz? Ubuntu sunucunuzda Linux, Nginx, MySQL ve PHP (LEMP) stack’ini nasıl kuracağınızı öğrenin. Bu kapsamlı rehber, sıfırdan başlayarak web projelerinizi hızla yayına almanızı sağlayacak, performans ipuçları ve sıkça sorulan sorularla dolu.

Giriş: Neden LEMP Stack’e İhtiyaç Duyarsınız?

Günümüzün dijital dünyasında, hızlı, güvenli ve ölçeklenebilir web uygulamaları geliştirmek ve yayınlamak her zamankinden daha kritik. Bir web sitesi veya dinamik bir uygulama barındırmak istediğinizde, arka planda çalışan bir dizi teknolojiye ihtiyaç duyarsınız. İşte tam da bu noktada LEMP stack devreye giriyor. Peki, nedir bu LEMP ve neden bu kadar popüler? LEMP, Linux işletim sistemi, Nginx web sunucusu, MySQL veritabanı ve PHP programlama dilinin baş harflerinden oluşan bir kısaltmadır. Bu dört bileşen, birlikte çalışarak modern web uygulamaları için sağlam, yüksek performanslı ve güvenilir bir altyapı oluşturur.

LEMP stack, özellikle yüksek trafikli web siteleri ve karmaşık uygulamalar için mükemmel bir seçimdir. Nginx’in olay tabanlı mimarisi sayesinde eş zamanlı bağlantıları Apache’ye göre daha verimli yönetmesi, onu özellikle statik içerik sunumu ve ters proxy (reverse proxy) görevleri için ideal kılar. Bu da web sitenizin yük altında bile hızlı yanıt vermesini sağlar. MySQL, yapısal veri depolama ve sorgulama ihtiyaçlarınız için güçlü ve güvenilir bir çözüm sunarken, PHP dinamik içerik oluşturma ve sunucu tarafı mantık yürütme konusunda geniş bir yetenek yelpazesi sunar. Linux ise tüm bu bileşenlerin üzerinde çalıştığı kararlı ve açık kaynaklı bir temeldir. Bu rehberde, Ubuntu işletim sistemi üzerinde LEMP stack’i adım adım nasıl kuracağınızı, yapılandıracağınızı ve optimize edeceğinizi detaylı bir şekilde öğreneceksiniz. Kendi web sunucunuzu kurarak dijital varlığınızı kontrol altına alma yolculuğunuza hazır olun!

Web geliştiricileri ve sistem yöneticileri için vazgeçilmez bir araç olan LEMP, esnekliği ve geniş topluluk desteği sayesinde sayısız projede tercih edilmektedir. İster kişisel bir blog, ister bir e-ticaret sitesi, ister karmaşık bir SaaS uygulaması olsun, LEMP stack size ihtiyacınız olan gücü ve kontrolü sağlayacaktır. Bu rehber boyunca, her bir bileşenin kurulumu ve birbirleriyle entegrasyonu hakkında pratik bilgiler edinecek, karşılaşabileceğiniz olası sorunlara karşı çözümler bulacak ve sunucunuzu güvenli bir şekilde nasıl yöneteceğinizi öğreneceksiniz. Hadi başlayalım ve Ubuntu sunucunuzu güçlü bir web platformuna dönüştürelim!

Temel Kavramlar: LEMP Stack Bileşenleri Nelerdir?

LEMP stack’in kurulumuna geçmeden önce, bu kısaltmayı oluşturan her bir bileşenin ne anlama geldiğini ve web altyapısındaki rolünü anlamak önemlidir. Bu temel bilgiler, kurulum sürecini daha bilinçli bir şekilde yürütmenize ve olası sorunları daha kolay gidermenize yardımcı olacaktır. LEMP, dört ana teknolojinin bir araya gelmesiyle oluşur ve her biri belirli bir görevi üstlenir.

  • L – Linux: Stack’in temelini oluşturan işletim sistemidir. Açık kaynak kodlu, kararlı ve güvenli yapısıyla sunucu ortamları için en popüler tercihlerden biridir. Ubuntu, Debian tabanlı bir Linux dağıtımı olup, geniş paket deposu ve kolay kullanımı sayesinde LEMP kurulumları için sıklıkla tercih edilir. Sunucunuzun donanım kaynaklarını yönetir, diğer tüm bileşenlerin üzerinde çalışmasını sağlar.
  • E – Nginx (Engine-X): Web sunucusu yazılımıdır. Geleneksel web sunucularına göre daha modern bir mimariye sahip olan Nginx, özellikle yüksek eş zamanlı bağlantı sayılarında ve statik içerik sunumunda üstün performans gösterir. Ters proxy (reverse proxy) ve yük dengeleyici (load balancer) olarak da kullanılabilir. PHP gibi dinamik içeriklerin işlenmesini doğrudan yapmaz; bunun yerine istekleri PHP-FPM’e (FastCGI Process Manager) yönlendirir.
  • M – MySQL: İlişkisel bir veritabanı yönetim sistemidir (RDBMS). Web uygulamalarının kullanıcı bilgileri, ürün katalogları, blog yazıları gibi tüm yapısal verilerini depolamak ve yönetmek için kullanılır. Açık kaynak kodlu yapısı, performansı ve geniş özellikleri sayesinde web projelerinin vazgeçilmez bir parçasıdır. Alternatif olarak MariaDB gibi uyumlu veritabanları da kullanılabilir.
  • P – PHP (Hypertext Preprocessor): Sunucu taraflı bir betik dilidir. Dinamik web sayfaları oluşturmak, veritabanlarıyla etkileşim kurmak ve sunucu tarafı mantığını yürütmek için kullanılır. WordPress, Joomla, Drupal gibi popüler içerik yönetim sistemleri ve Laravel, Symfony gibi web framework’leri PHP ile yazılmıştır. Nginx ile doğrudan entegre olmak yerine, PHP-FPM aracılığıyla çalışır.

Bu bileşenler bir araya geldiğinde, bir kullanıcının tarayıcısından gelen isteği işlemek için aşağıdaki akışı izlerler:

  1. Kullanıcı bir web sitesine erişmek istediğinde, istek Nginx web sunucusuna ulaşır.
  2. Nginx, isteğin statik bir dosya (HTML, CSS, JS, resim vb.) olup olmadığını kontrol eder. Eğer statikse, doğrudan sunar.
  3. Eğer istek dinamik bir PHP sayfasıysa, Nginx bu isteği PHP-FPM’e iletir.
  4. PHP-FPM, PHP kodunu çalıştırır ve gerekirse MySQL veritabanından veri çeker veya oraya veri yazar.
  5. PHP-FPM, işlenmiş PHP çıktısını (genellikle HTML) Nginx’e geri gönderir.
  6. Nginx, bu çıktıyı alarak kullanıcının tarayıcısına iletir.

Bu entegre yapı, web uygulamalarınızın hızlı, güvenilir ve verimli bir şekilde çalışmasını sağlar. Her bir bileşenin doğru şekilde kurulması ve yapılandırılması, LEMP stack’inizin performansını ve güvenliğini doğrudan etkileyecektir. Şimdi, bu güçlü stack’i Ubuntu sunucumuza kurmaya hazırız.

Ubuntu Sunucunuzu Hazırlama: İlk Adımlar

LEMP stack kurulumuna başlamadan önce, Ubuntu sunucunuzun doğru şekilde hazırlandığından emin olmalıyız. Bu ön hazırlık adımları, hem kurulumun sorunsuz ilerlemesini sağlayacak hem de sunucunuzun güvenliğini artıracaktır. İlk olarak, bir Ubuntu sunucusuna SSH aracılığıyla erişiminizin olduğunu varsayıyoruz. Genellikle bir bulut sağlayıcıdan (AWS, DigitalOcean, Vultr vb.) veya kendi fiziksel sunucunuzdan bir Ubuntu örneği başlatmış olursunuz.

1. Sistem Güncellemesi: Herhangi bir yazılım kurulumuna başlamadan önce, sisteminizdeki mevcut paket listesini güncellemek ve kurulu paketleri en son sürümlerine yükseltmek iyi bir uygulamadır. Bu, potansiyel güvenlik açıklarını kapatır ve yeni paketlerin doğru bağımlılıklarla kurulmasını sağlar. Terminalinizde aşağıdaki komutları çalıştırın:


sudo apt update
sudo apt upgrade -y
    

apt update komutu, yerel paket indeksini güncellerken, apt upgrade -y komutu, -y bayrağı sayesinde tüm yükseltmeleri onaylamadan otomatik olarak yapar. Bu işlem biraz zaman alabilir, internet bağlantınızın hızına ve sunucunuzun performansına bağlı olarak değişir.

Uzman İpucu: Sunucunuzu düzenli olarak güncellemek, sadece güvenlik açıklarını kapatmakla kalmaz, aynı zamanda yazılımlarınızın en yeni özelliklere ve performans iyileştirmelerine sahip olmasını sağlar. Bu, uzun vadede sistem kararlılığı için kritik öneme sahiptir.

2. Güvenlik Duvarı (UFW) Yapılandırması: Sunucunuzu dışarıdan gelecek istenmeyen bağlantılara karşı korumak için bir güvenlik duvarı (firewall) kullanmak esastır. Ubuntu’da varsayılan olarak gelen ve kullanımı kolay olan Uncomplicated Firewall (UFW) bu iş için idealdir. İlk olarak UFW’nin durumunu kontrol edelim:


sudo ufw status
    

Eğer güvenlik duvarı etkin değilse, SSH bağlantınızın kesilmemesi için SSH portunu (varsayılan olarak 22) açarak etkinleştirmeniz gerekir. Daha sonra web sunucusu (Nginx) ve veritabanı (MySQL) için gerekli portları da açacağız.


sudo ufw allow OpenSSH # SSH bağlantısı için
sudo ufw enable       # Güvenlik duvarını etkinleştir
sudo ufw status       # Durumu kontrol et
    

Bu adımlarla temel sistem güncellemelerini tamamladık ve sunucumuzun güvenlik duvarını etkinleştirdik. Artık LEMP stack’in bileşenlerini kurmaya başlayabiliriz. Her bir bileşen, ayrı ayrı ele alınacak ve adım adım kurulumu gerçekleştirilecektir. Bu hazırlıklar, sorunsuz bir kurulum süreci için sağlam bir temel oluşturur ve gelecekteki olası güvenlik risklerini minimize etmeye yardımcı olur. Sunucunuzun güvenliği, web uygulamalarınızın başarısı için en önemli faktörlerden biridir, bu nedenle bu adımları asla atlamamalısınız.

3. Gerekli Araçların Kurulumu: Bazı temel araçlar, sunucu yönetimi ve dosya işlemleri için faydalı olabilir. Örneğin, nano veya vim gibi metin editörleri ve curl veya wget gibi ağ araçları genellikle işinize yarar. Çoğu Ubuntu kurulumunda bunlar varsayılan olarak gelir, ancak emin olmak için kontrol edebilir veya kurabilirsiniz:


sudo apt install -y nano curl wget
    

Bu hazırlıkların ardından sunucumuz artık Nginx kurulumuna geçmek için hazır durumda. Her adımda dikkatli olmak ve komutların çıktısını kontrol etmek, olası hataları erkenden fark etmenizi sağlayacaktır.

Nginx Kurulumu ve Temel Yapılandırması: Web Sunucunuzu Ayağa Kaldırma

LEMP stack’in “E”si olan Nginx (Engine-X), modern web sunucularının en popülerlerinden biridir. Yüksek performans, düşük kaynak tüketimi ve eş zamanlı bağlantıları etkin bir şekilde yönetme yeteneği sayesinde özellikle yüksek trafikli siteler için idealdir. Bu bölümde Nginx’i Ubuntu sunucumuza kuracak ve temel bir yapılandırma ile ilk web sayfamızı yayınlayacağız.

1. Nginx Kurulumu: Nginx, Ubuntu’nun varsayılan depolarında mevcuttur. Kurulumu oldukça basittir:


sudo apt install nginx -y
    

Kurulum tamamlandıktan sonra, Nginx servisi otomatik olarak başlayacaktır. Servisin durumunu kontrol ederek çalıştığından emin olabiliriz:


sudo systemctl status nginx
    

Çıktıda “active (running)” ifadesini görmelisiniz. Eğer değilse, servisi manuel olarak başlatabilirsiniz: sudo systemctl start nginx.

Uzman İpucu: Nginx’in otomatik başlamasını sağlamak için sudo systemctl enable nginx komutunu kullanabilirsiniz. Bu, sunucu yeniden başlatıldığında Nginx’in de otomatik olarak başlamasını garanti eder.

2. Güvenlik Duvarı Yapılandırması: Nginx’i kurduktan sonra, web trafiğinin sunucunuza ulaşabilmesi için güvenlik duvarımızda (UFW) HTTP (port 80) ve HTTPS (port 443) portlarını açmamız gerekir. Nginx, UFW ile entegre profillerle gelir:


sudo ufw allow 'Nginx HTTP'
sudo ufw allow 'Nginx HTTPS' # Eğer SSL/TLS kullanacaksanız
sudo ufw reload
sudo ufw status
    

ufw status çıktısında “Nginx HTTP” ve “Nginx HTTPS” profillerinin izin verildiğini görmelisiniz. Artık tarayıcınızdan sunucunuzun IP adresine giderek Nginx’in varsayılan karşılama sayfasını görebilirsiniz. Bu, Nginx’in başarıyla kurulduğunu ve çalıştığını gösterir.

3. Nginx Server Block Yapılandırması (Virtual Host): Gerçek dünya senaryolarında, birden fazla web sitesini aynı sunucuda barındırmak istersiniz. Nginx’te bu, “Server Block” veya diğer web sunucularındaki adıyla “Virtual Host” kavramıyla yapılır. Her bir web sitesi için ayrı bir yapılandırma dosyası oluşturulur. Örneğin, “ornek.com” adında bir web sitesi için bir server block oluşturalım.

Öncelikle web sitemizin dosyalarının bulunacağı bir dizin oluşturalım:


sudo mkdir -p /var/www/ornek.com/html
sudo chown -R $USER:$USER /var/www/ornek.com/html
sudo chmod -R 755 /var/www/ornek.com
    

$USER değişkeni, mevcut kullanıcı adınızı otomatik olarak alacaktır. Ardından, bu dizine basit bir index.html dosyası oluşturalım:


nano /var/www/ornek.com/html/index.html
    

İçine aşağıdaki HTML kodunu yapıştırın:


<!DOCTYPE html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Ornek.com - Nginx ile Başarılı Kurulum</title>
    <style>
        body { font-family: Arial, sans-serif; text-align: center; margin-top: 50px; background-color: #f4f4f4; }
        h1 { color: #333; }
        p { color: #666; }
        .container {
            max-width: 800px;
            margin: 0 auto;
            padding: 20px;
            background-color: #fff;
            border-radius: 8px;
            box-shadow: 0 4px 8px rgba(0,0,0,0.1);
        }
        @media (max-width: 600px) {
            .container {
                margin: 10px;
                padding: 15px;
            }
            h1 { font-size: 1.5em; }
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>Tebrikler! Ornek.com Nginx ile Başarıyla Kuruldu!</h1>
        <p>Bu sayfa, Nginx web sunucunuzun doğru şekilde yapılandırıldığını göstermektedir.</p>
        <p>LEMP stack kurulumuna devam edebilirsiniz.</p>
    </div>
</body>
</html>
    

Kaydedip kapatın (CTRL+X, Y, Enter).

Şimdi bu web sitesi için bir Nginx server block dosyası oluşturalım:


sudo nano /etc/nginx/sites-available/ornek.com
    

İçine aşağıdaki yapılandırmayı yapıştırın:


server {
    listen 80;
    listen [::]:80;

    root /var/www/ornek.com/html;
    index index.html index.htm index.nginx-debian.html;

    server_name ornek.com www.ornek.com;

    location / {
        try_files $uri $uri/ =404;
    }
}
    

Kaydedip kapatın. Bu yapılandırma, Nginx’e “ornek.com” veya “www.ornek.com” alan adına gelen istekleri /var/www/ornek.com/html dizininden sunmasını söyler.

Bu server block dosyasını etkinleştirmek için sites-enabled dizinine sembolik bir bağlantı (symlink) oluşturalım:


sudo ln -s /etc/nginx/sites-available/ornek.com /etc/nginx/sites-enabled/
    

Nginx’in varsayılan yapılandırması (default server block) ile çakışmaları önlemek için onu devre dışı bırakmak iyi bir uygulamadır:


sudo rm /etc/nginx/sites-enabled/default
    

Yapılandırma dosyamızda herhangi bir sözdizimi hatası olup olmadığını kontrol edelim:


sudo nginx -t
    

Eğer “test is successful” mesajını alırsanız, Nginx’i yeniden başlatarak yeni yapılandırmayı uygulayabiliriz:


sudo systemctl restart nginx
    

Şimdi, eğer “ornek.com” alan adını sunucunuzun IP adresine yönlendirdiyseniz (DNS ayarları), tarayıcınızdan http://ornek.com adresine giderek oluşturduğunuz index.html sayfasını görmelisiniz. Eğer alan adınız yoksa, şimdilik sunucunuzun IP adresini kullanarak varsayılan Nginx sayfasını görmeye devam edersiniz. Bu, Nginx’in doğru çalıştığını gösterir ve PHP entegrasyonuna geçiş için sağlam bir temel oluşturur.

MySQL Kurulumu ve Güvenliği: Veritabanı Yönetim Sistemi

Web uygulamalarının çoğu, kullanıcı bilgileri, içerik, ürün detayları gibi dinamik verileri depolamak ve yönetmek için bir veritabanına ihtiyaç duyar. LEMP stack’in “M”si olan MySQL (veya MariaDB), bu görev için en popüler ve güçlü çözümlerden biridir. Bu bölümde MySQL’i Ubuntu sunucumuza kuracak ve temel güvenlik yapılandırmalarını gerçekleştireceğiz.

1. MySQL Kurulumu: MySQL sunucusu ve istemci paketlerini Ubuntu’nun varsayılan depolarından kolayca kurabiliriz:


sudo apt install mysql-server -y
    

Kurulum tamamlandıktan sonra MySQL servisi otomatik olarak başlayacaktır. Servisin durumunu kontrol edelim:


sudo systemctl status mysql
    

Çıktıda “active (running)” ifadesini görmelisiniz. Eğer değilse, sudo systemctl start mysql komutuyla başlatabilirsiniz.

Uzman İpucu: MySQL’in yerine MariaDB kullanmayı düşünebilirsiniz. MariaDB, MySQL’in açık kaynaklı bir fork’udur ve genellikle benzer performans ve özellikler sunar. Kurulum komutu sudo apt install mariadb-server -y şeklinde olacaktır.

2. MySQL Güvenlik Yapılandırması: MySQL’i kurduktan sonra, güvenlik açıklarını kapatmak ve varsayılan ayarları güçlendirmek için mysql_secure_installation betiğini çalıştırmak çok önemlidir. Bu betik, kök (root) parolasını ayarlamanıza, anonim kullanıcıları kaldırmanıza, uzaktan root girişini devre dışı bırakmanıza ve test veritabanını silmenize olanak tanır.


sudo mysql_secure_installation
    

Betik size bir dizi soru soracaktır:

  • VALIDATE PASSWORD COMPONENT: Güçlü parola politikası için bu özelliği etkinleştirebilirsiniz. (Genellikle ‘y’ veya ‘n’ seçeneği ile devam edin, benim önerim ‘y’ ve orta düzey bir parola gücü seçmenizdir.)
  • Set root password? [Y/n]: ‘Y’ tuşuna basarak root parolası belirleyin. Güçlü bir parola seçtiğinizden emin olun.
  • Remove anonymous users? [Y/n]: ‘Y’ tuşuna basarak anonim kullanıcıları kaldırın. Bu, güvenlik için önemlidir.
  • Disallow root login remotely? [Y/n]: ‘Y’ tuşuna basarak root kullanıcısının uzaktan giriş yapmasını engelleyin. Bu, potansiyel saldırı yüzeyini azaltır.
  • Remove test database and access to it? [Y/n]: ‘Y’ tuşuna basarak test veritabanını kaldırın. Bu veritabanı genellikle güvenlik riski oluşturur.
  • Reload privilege tables now? [Y/n]: ‘Y’ tuşuna basarak ayrıcalık tablolarını yeniden yükleyin. Bu, yaptığınız değişikliklerin hemen etkili olmasını sağlar.

Bu adımları tamamladıktan sonra MySQL kurulumunuz daha güvenli hale gelecektir.

3. MySQL ile Veritabanı ve Kullanıcı Oluşturma: Web uygulamalarınız için genellikle özel bir veritabanı ve bu veritabanına erişimi olan ayrı bir kullanıcı oluşturmanız gerekir. Root kullanıcısı ile doğrudan uygulama erişimi sağlamak iyi bir güvenlik uygulaması değildir.

MySQL kabuğuna root kullanıcısı olarak giriş yapalım:


sudo mysql -u root -p
    

Parolanızı girdikten sonra MySQL komut istemine düşeceksiniz. Şimdi yeni bir veritabanı, bir kullanıcı ve bu kullanıcıya veritabanı üzerinde ayrıcalıklar atayalım. Örneğin, “ornek_db” adında bir veritabanı ve “ornek_user” adında bir kullanıcı oluşturalım:


CREATE DATABASE ornek_db DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
CREATE USER 'ornek_user'@'localhost' IDENTIFIED BY 'GucluParolanizBuraya!';
GRANT ALL PRIVILEGES ON ornek_db.* TO 'ornek_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
    

Yukarıdaki komutları açıklayalım:

  • CREATE DATABASE ornek_db ...;: “ornek_db” adında yeni bir veritabanı oluşturur. utf8_unicode_ci karakter seti, Türkçe karakterler de dahil olmak üzere geniş bir dil desteği sağlar.
  • CREATE USER 'ornek_user'@'localhost' ...;: “ornek_user” adında, yalnızca “localhost” üzerinden erişebilecek yeni bir MySQL kullanıcısı oluşturur ve ona bir parola atar. Parolanızı güçlü bir şekilde değiştirdiğinizden emin olun.
  • GRANT ALL PRIVILEGES ON ornek_db.* TO 'ornek_user'@'localhost';: “ornek_user” kullanıcısına “ornek_db” veritabanı üzerindeki tüm ayrıcalıkları verir.
  • FLUSH PRIVILEGES;: Ayrıcalık tablolarını yeniden yükleyerek değişikliklerin hemen etkili olmasını sağlar.
  • EXIT;: MySQL kabuğundan çıkar.

Artık MySQL sunucunuz kurulmuş, güvenliği sağlanmış ve web uygulamanızın kullanabileceği bir veritabanı ve kullanıcı hazır hale getirilmiştir. Bu adımlar, LEMP stack’inizin veritabanı katmanını tamamlar ve dinamik içerikli uygulamalarınız için gerekli altyapıyı sağlar.

PHP Kurulumu ve Nginx ile Entegrasyonu: Dinamik İçerik İşleme

LEMP stack’in “P”si olan PHP, dinamik web sayfaları oluşturmak ve sunucu tarafı mantığını yürütmek için kullanılan güçlü bir betik dilidir. Nginx, PHP kodunu doğrudan çalıştırmaz; bunun yerine PHP-FPM (FastCGI Process Manager) adı verilen bir hizmet aracılığıyla PHP isteklerini işler. Bu bölümde PHP ve PHP-FPM’i kuracak ve Nginx ile entegre edeceğiz.

1. PHP ve PHP-FPM Kurulumu: Ubuntu depolarında PHP’nin çeşitli sürümleri bulunur. Genellikle en son kararlı sürümü kullanmak iyi bir tercihtir. Bu rehberde PHP 8.x sürümünü kuracağız. Ayrıca, MySQL ile iletişim kurmak ve diğer yaygın web uygulaması işlevlerini desteklemek için bazı ek PHP uzantılarına ihtiyacımız olacak:


sudo apt install php-fpm php-mysql php-cli php-gd php-curl php-mbstring php-xml php-zip -y
    

Bu komut, PHP-FPM’i (Nginx ile PHP entegrasyonu için gerekli), MySQL uzantısını ve diğer sık kullanılan uzantıları kurar. Kurulum tamamlandıktan sonra PHP-FPM servisi otomatik olarak başlayacaktır. Servisin durumunu kontrol edelim:


sudo systemctl status php8.x-fpm # 'php8.x-fpm' yerine kurulu PHP sürümünüze göre örn: php8.1-fpm yazın
    

Çıktıda “active (running)” ifadesini görmelisiniz. Eğer değilse, sudo systemctl start php8.x-fpm komutuyla başlatabilirsiniz.

2. Nginx ile PHP-FPM Entegrasyonu: Şimdi Nginx’i, PHP dosyalarına gelen istekleri PHP-FPM’e iletmesi için yapılandırmamız gerekiyor. Daha önce oluşturduğumuz “ornek.com” server block dosyasını düzenleyeceğiz:


sudo nano /etc/nginx/sites-available/ornek.com
    

Mevcut içeriği aşağıdaki gibi güncelleyin. Özellikle index satırına index.php ekleyin ve PHP işleme bloğunu (location ~ \.php$) ekleyin:


server {
    listen 80;
    listen [::]:80;

    root /var/www/ornek.com/html;
    index index.php index.html index.htm index.nginx-debian.html; # index.php'yi ekledik

    server_name ornek.com www.ornek.com;

    location / {
        try_files $uri $uri/ =404;
    }

    # PHP dosyalarını PHP-FPM'e iletmek için blok
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.x-fpm.sock; # PHP sürümünüze göre güncelleyin (örn: php8.1-fpm.sock)
    }

    # .htaccess dosyalarının web üzerinden erişimini engelle
    location ~ /\.ht {
        deny all;
    }
}
    

fastcgi_pass satırındaki soket yolunu, kurduğunuz PHP sürümüne göre güncellediğinizden emin olun (örn: php8.1-fpm.sock veya php8.2-fpm.sock). Kaydedip kapatın.

Yapılandırmada hata olup olmadığını kontrol edelim ve Nginx’i yeniden başlatalım:


sudo nginx -t
sudo systemctl restart nginx
    

3. PHP’nin Çalıştığını Doğrulama (phpinfo): PHP’nin Nginx ile doğru bir şekilde entegre olup olmadığını test etmek için, web dizinimize basit bir PHP dosyası oluşturalım:


sudo nano /var/www/ornek.com/html/info.php
    

İçine aşağıdaki PHP kodunu yapıştırın:


<?php
phpinfo();
?>
    

Kaydedip kapatın. Şimdi tarayıcınızdan http://ornek.com/info.php (veya sunucunuzun IP adresi/info.php) adresine gidin. Karşınıza PHP’nin yapılandırma bilgilerini içeren uzun bir sayfa gelmelidir. Bu sayfa, PHP’nin başarıyla çalıştığını ve Nginx ile entegre olduğunu gösterir.

Önemli Güvenlik Notu: info.php dosyasını test ettikten sonra, güvenlik nedeniyle sunucunuzdan silmeniz şiddetle tavsiye edilir. Bu dosya, sunucunuz hakkında hassas bilgiler içerebilir.


sudo rm /var/www/ornek.com/html/info.php
        

Bu adımlarla birlikte LEMP stack’inizin tüm temel bileşenleri başarıyla kurulmuş ve birbirleriyle entegre edilmiş oldu. Artık Ubuntu sunucunuz, dinamik web uygulamalarını barındırmak için tam teşekküllü bir platform haline geldi. Sırada, bir web uygulamasını dağıtmak ve stack’inizi optimize etmek var.

Vaka Analizi: Yüksek Trafikli Bir E-ticaret Sitesi için LEMP Optimizasyonu

Bir e-ticaret sitesi, yüksek trafik, anlık ürün güncellemeleri, güvenli ödeme işlemleri ve hızlı sayfa yükleme süreleri gibi özel gereksinimlere sahiptir. LEMP stack, bu tür senaryolar için mükemmel bir temel sunar, ancak optimum performans ve güvenilirlik için doğru optimizasyonlar ve güvenlik önlemleri şarttır. Bu vaka analizinde, “TrendSepeti.com” adlı hayali bir e-ticaret sitesinin LEMP stack üzerinde nasıl optimize edildiğini inceleyelim.

Senaryo: TrendSepeti.com’un Performans Sorunları

TrendSepeti.com, popüler bir e-ticaret platformu üzerine kurulu ve LEMP stack üzerinde çalışan orta ölçekli bir sitedir. Başlangıçta her şey yolundayken, site büyüdükçe ve kampanya dönemlerinde trafik arttıkça aşağıdaki sorunlar yaşanmaya başlandı:

  • Yavaş Sayfa Yükleme Süreleri: Özellikle ürün sayfaları ve ödeme adımları yavaş yüklendi.
  • Sunucu Aşırı Yüklenmesi: Yüksek trafik anlarında CPU kullanımı %100’e ulaşıyor, site yanıt veremez hale geliyordu.
  • Veritabanı Kilitlenmeleri: Yoğun yazma/okuma işlemleri sırasında veritabanı bağlantıları düşüyor, hatalar meydana geliyordu.

LEMP Optimizasyon Adımları ve Sonuçları

Bu sorunları gidermek için TrendSepeti.com’un LEMP stack’i üzerinde kapsamlı bir optimizasyon çalışması yapıldı:

1. Nginx Optimizasyonu

  • Önbellekleme (Caching): Statik dosyalar (resimler, CSS, JS) için Nginx önbelleklemesi etkinleştirildi. Ayrıca, sık erişilen dinamik içerikler için de FastCGI cache kullanıldı.
    
    # /etc/nginx/nginx.conf içine eklendi
    proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g
                     inactive=60m use_temp_path=off;
    
    # Server block içinde
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 30d;
        add_header Cache-Control "public, no-transform";
        access_log off;
    }
    location / {
        try_files $uri $uri/ /index.php?$query_string;
        proxy_cache my_cache;
        proxy_cache_valid 200 302 10m;
        proxy_cache_valid 404 1m;
    }
                
  • Gzip Sıkıştırma: Metin tabanlı içeriklerin (HTML, CSS, JS) sıkıştırılarak gönderilmesi sağlandı, bu da bant genişliğini azalttı ve yükleme sürelerini hızlandırdı.
    
    # /etc/nginx/nginx.conf içinde http bloğuna eklendi
    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
                
  • Worker Proses Ayarları: Nginx worker proses sayısı sunucunun CPU çekirdek sayısına göre ayarlandı (worker_processes auto;).

Sonuç: Nginx optimizasyonları sayesinde statik içeriklerin yükleme süresi %60 oranında azaldı. Dinamik içerik önbelleklemesi, sunucunun CPU yükünü %30 düşürdü.

2. MySQL Optimizasyonu

  • Query Optimizasyonu: En yavaş çalışan SQL sorguları (slow queries) tespit edildi ve indeksler eklenerek veya sorgu yapısı değiştirilerek optimize edildi.
    
    # MySQL konsolunda örnek indeks ekleme
    ALTER TABLE products ADD INDEX idx_product_category (category_id);
                
  • Yapılandırma Ayarları (my.cnf): /etc/mysql/mysql.conf.d/mysqld.cnf dosyasında innodb_buffer_pool_size (RAM’in %50-70’i), query_cache_size ve max_connections gibi parametreler sunucu kaynaklarına göre ayarlandı.
    
    # /etc/mysql/mysql.conf.d/mysqld.cnf
    [mysqld]
    innodb_buffer_pool_size = 4G # Örnek: 8GB RAM'li bir sunucu için
    query_cache_size = 64M
    max_connections = 200
                
  • Slow Query Log: Yavaş sorguları tespit etmek için slow query log etkinleştirildi.

Sonuç: Veritabanı sorgu süreleri ortalama %40 kısaldı, kilitlenme sorunları büyük ölçüde azaldı ve sunucu yanıt süreleri iyileşti.

3. PHP-FPM Optimizasyonu

  • Process Yönetimi: PHP-FPM’in process yönetimi (/etc/php/8.x/fpm/pool.d/www.conf) dinamik olarak ayarlandı (pm = dynamic), pm.max_children, pm.start_servers, pm.min_spare_servers ve pm.max_spare_servers değerleri sunucu RAM’ine ve beklenen trafik yüküne göre optimize edildi.
    
    # /etc/php/8.x/fpm/pool.d/www.conf
    pm = dynamic
    pm.max_children = 50
    pm.start_servers = 10
    pm.min_spare_servers = 5
    pm.max_spare_servers = 15
                
  • Opcache: PHP’nin Opcache modülü etkinleştirildi. Bu, derlenmiş PHP kodunu bellekte tutarak her istekte yeniden derleme ihtiyacını ortadan kaldırır.
    
    # /etc/php/8.x/fpm/php.ini içinde
    opcache.enable=1
    opcache.memory_consumption=128
    opcache.interned_strings_buffer=8
    opcache.max_accelerated_files=10000
    opcache.revalidate_freq=60
                

Sonuç: PHP kodlarının işlenme süresi hızlandı, sunucu CPU yükü azaldı ve aynı anda daha fazla isteğin işlenebilmesi sağlandı.

4. Güvenlik ve İzleme

  • SSL/TLS (HTTPS): Tüm site Let’s Encrypt ile ücretsiz SSL sertifikası kullanılarak HTTPS’e geçirildi. Bu, müşteri verilerinin güvenliğini sağladı ve SEO sıralamasına olumlu etki etti.
  • UFW Güvenlik Duvarı: Sadece gerekli portlar (80, 443, 22) açık bırakıldı, diğer tüm portlar engellendi.
  • Fail2ban: SSH ve Nginx için brute-force saldırılarına karşı Fail2ban kuruldu.
  • İzleme Araçları: Prometheus ve Grafana gibi araçlarla sunucu kaynakları (CPU, RAM, Disk I/O) ve Nginx/MySQL/PHP-FPM metrikleri sürekli izlenerek olası darboğazlar anında tespit edildi.

Genel Sonuç: TrendSepeti.com’un sayfa yükleme süreleri ortalama %50 azaldı, sunucu %70 daha fazla eş zamanlı trafiği sorunsuz bir şekilde yönetebilir hale geldi. Güvenlik seviyesi artırıldı ve kampanya dönemlerinde dahi site performansı istikrarlı hale geldi. Bu vaka analizi, LEMP stack’in doğru optimizasyon ve güvenlik önlemleriyle yüksek performanslı ve güvenilir e-ticaret siteleri için ne kadar uygun olduğunu göstermektedir.

Sıkça Sorulan Sorular (SSS)

LEMP stack kurulumu ve yönetimi hakkında sıkça karşılaşılan bazı soruları ve yanıtlarını aşağıda bulabilirsiniz:

  1. LEMP stack nedir ve neden Apache yerine Nginx tercih edilmelidir?

    LEMP, Linux, Nginx, MySQL ve PHP bileşenlerinin bir araya gelmesiyle oluşan bir web sunucusu yığınıdır. Nginx, olay tabanlı (event-driven) mimarisi sayesinde özellikle yüksek eş zamanlı bağlantı sayılarında ve statik içerik sunumunda Apache’ye göre daha verimlidir. Daha az kaynak tüketir ve ters proxy (reverse proxy) olarak mükemmel performans gösterir, bu da onu modern, yüksek trafikli web uygulamaları için ideal bir seçim yapar.

  2. MySQL yerine başka bir veritabanı kullanabilir miyim?

    Evet, kesinlikle. LEMP stack’teki ‘M’ genellikle MySQL’i temsil etse de, MariaDB (MySQL’in açık kaynaklı bir fork’u) veya PostgreSQL gibi diğer ilişkisel veritabanlarını da kullanabilirsiniz. Kurulum adımları ve yapılandırma yöntemleri biraz farklılık gösterebilir, ancak genel entegrasyon mantığı benzerdir. MariaDB, MySQL ile neredeyse tamamen uyumlu olduğu için geçiş yapmak oldukça kolaydır.

  3. PHP-FPM nedir ve neden Nginx ile birlikte kullanılır?

    PHP-FPM (FastCGI Process Manager), PHP kodunu işleyen ve Nginx gibi web sunucularıyla iletişim kuran bir FastCGI uygulamasıdır. Nginx, PHP kodunu doğrudan çalıştıramaz. Bunun yerine, PHP dosyalarına gelen istekleri PHP-FPM’e iletir. PHP-FPM, kodu işler ve sonucu Nginx’e geri gönderir. Bu ayrım, Nginx’in statik içerik sunumunda hızlı kalmasını sağlarken, PHP-FPM’in dinamik içeriği verimli bir şekilde işlemesine olanak tanır, böylece daha iyi performans ve kararlılık elde edilir.

  4. LEMP stack’imi nasıl güncelleyebilirim?

    LEMP stack bileşenlerini güncellemek için Ubuntu’nun paket yöneticisi olan apt‘i kullanmalısınız. Düzenli olarak aşağıdaki komutları çalıştırmak, sisteminizi ve tüm kurulu paketleri güncel tutar:

    
    sudo apt update
    sudo apt upgrade -y
                

    Büyük sürüm yükseltmeleri (örneğin PHP 7.x’ten 8.x’e geçiş) genellikle manuel yapılandırma değişiklikleri ve ek adımlar gerektirebilir.

  5. Web sitem için SSL/TLS (HTTPS) nasıl etkinleştiririm?

    Web siteniz için SSL/TLS sertifikası kurarak HTTPS’i etkinleştirmek güvenlik için çok önemlidir. Let’s Encrypt, ücretsiz SSL sertifikaları sağlayan popüler bir hizmettir ve Certbot aracı ile kolayca kurulabilir. Adımlar genellikle şunları içerir:

    
    sudo apt install certbot python3-certbot-nginx -y
    sudo certbot --nginx -d ornek.com -d www.ornek.com
                

    Certbot, Nginx yapılandırmanızı otomatik olarak güncelleyecek ve sertifikalarınızı yenileyecektir. Bu, web sitenizin güvenliğini artırır ve SEO sıralamanıza olumlu katkı sağlar.

Sonuç: Güçlü ve Esnek Bir Web Altyapısı

Bu kapsamlı rehber boyunca, Ubuntu üzerinde LEMP stack’in her bir bileşenini adım adım nasıl kuracağınızı, yapılandıracağınızı ve optimize edeceğinizi öğrendiniz. Linux’un sağlam temelinden başlayarak, Nginx’in yüksek performanslı web sunuculuğu, MySQL’in güvenilir veritabanı yönetimi ve PHP’nin dinamik içerik işleme yeteneklerini bir araya getirerek kendi güçlü web altyapınızı oluşturdunuz. Artık kişisel projelerinizden yüksek trafikli e-ticaret sitelerine kadar her türlü web uygulamasını barındırabilecek donanıma sahipsiniz.

LEMP stack, esnekliği, performansı ve açık kaynak kodlu yapısıyla modern web geliştirme dünyasında vazgeçilmez bir yer edinmiştir. Kurulumu tamamlamak sadece başlangıçtır; gerçek dünya senaryolarında karşılaşabileceğiniz performans darboğazlarını aşmak ve güvenlik açıklarını kapatmak için sürekli izleme, optimizasyon ve güvenlik pratiklerini uygulamak hayati önem taşır. Sunduğumuz vaka analizi ve sıkça sorulan sorular bölümü, bu süreçte size yol gösterecek ek bilgiler ve ipuçları sağlamıştır.

Unutmayın, web sunucusu yönetimi sürekli öğrenme ve adapte olma gerektiren bir alandır. Bu rehberdeki bilgileri temel alarak, kendi projelerinizin özel ihtiyaçlarına göre LEMP stack’inizi daha da özelleştirebilir ve geliştirebilirsiniz. Kendi sunucunuzun kontrolünü elinize almak, size sadece teknik beceriler kazandırmakla kalmayacak, aynı zamanda dijital dünyadaki varlığınızı daha güvenli ve verimli bir şekilde yönetmenizi sağlayacaktır. 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.