Ubuntu LEMP Kurulumu: Adım Adım Nginx, MySQL ve PHP Yapılandırma Rehberi (2026)

E-posta Hosting Kampanya

Giriş: Yüksek Performanslı Web Sunucularının Altın Standardı

Modern internet ekosisteminde, bir web sitesinin milisaniyeler içinde açılması ve on binlerce anlık ziyaretçiyi çökmeden kaldırabilmesi, yazılımın kod kalitesi kadar arka planda çalışan sunucu mimarisine de bağlıdır. Yıllar boyunca web dünyasının tartışmasız lideri olan LAMP (Linux, Apache, MySQL, PHP) yığını, günümüzün yüksek trafikli ve asenkron veri akışı gerektiren modern web uygulamaları karşısında performans darboğazları yaşamaya başlamıştır. Bu noktada, sahneye çok daha hafif, çevik ve inanılmaz derecede hızlı bir alternatif olan LEMP yığını çıkmıştır.

LEMP kısaltması; Linux işletim sistemini, Engine-X olarak okunan Nginx web sunucusunu, MySQL (veya MariaDB) veritabanı yönetim sistemini ve PHP (veya Python/Perl) programlama dilini temsil eder. Bu dörtlü kombinasyon, özellikle kaynak tüketimini minimumda tutarak maksimum eşzamanlı bağlantıya (Concurrency) ulaşmak isteyen sistem yöneticilerinin 2026 yılındaki bir numaralı tercihidir.

Eğer elinizde saf (ham) bir Ubuntu sunucu varsa ve bunu yüksek performanslı bir web makinesine dönüştürmek istiyorsanız, doğru yerdesiniz. Bu derinlemesine rehberde; Nginx’in asenkron mimarisinin Apache’den neden üstün olduğunu, PHP-FPM’in nasıl hayat kurtardığını ve sıfırdan bir Ubuntu sunucusu üzerine LEMP yığınının en güvenli şekilde nasıl kurulacağını tüm teknik komutlarıyla birlikte adım adım inceliyoruz.

Bölüm 1: Neden LAMP Yerine LEMP? (Nginx’in Asenkron Büyüsü)

Kurulum adımlarına geçmeden önce, altyapımızı neden Apache yerine Nginx (Engine-X) üzerine kurduğumuzu anlamak, bir sistem yöneticisinin vizyonu açısından hayati önem taşır.

Kıdemli bir DevOps mühendisi olan Ferit, yönettiği ulusal çaplı bir haber sitesinde her akşam saat 20:00’de flaş haberler girildiğinde sunucunun kilitlendiğini (Downtime) fark etmiştir. Ferit’in kullandığı eski Apache sunucusu, siteye giren her bir ziyaretçi için RAM ve işlemci tüketen yeni bir “İşlem” (Process/Thread) yaratmaktadır (Process-driven mimari). Anlık ziyaretçi sayısı 10.000’e ulaştığında, Apache tüm RAM’i tüketip sunucuyu çökertir. Ferit sistemi Nginx (LEMP) mimarisine taşır. Çünkü Nginx, her kullanıcı için yeni bir işlem başlatmak yerine “Olay Odaklı” (Event-driven) ve “Asenkron” (Non-blocking) bir döngü kullanır. Tek bir “Worker” (İşçi) süreci, binlerce bağlantıyı aynı anda tek bir iplikte (Thread) yönetebilir. Ferit’in sunucusu, aynı RAM miktarıyla Apache’nin 4 katı fazla trafiği hiç zorlanmadan taşımaya başlar.

Bölüm 2: Adım 1 – Sunucu Hazırlığı ve Sistem Güncellemeleri

Taze bir Ubuntu sunucusu (Örneğin Ubuntu 24.04 LTS veya güncel bir sürüm) kiraladığınızda, ilk yapmanız gereken şey sistemin paket dizinini tazelemek ve mevcut güvenlik yamalarını kurmaktır.

Veri merkezi uzmanı Ayla, yeni kurduğu bulut sunucusuna SSH protokolü üzerinden (ssh root@sunucu_ip_adresi) bağlantı sağlar. Herhangi bir yazılım kurmadan önce, çakışmaları ve güvenlik açıklarını önlemek için terminale şu iki komutu yazar:

Bash

sudo apt update
sudo apt upgrade -y

Bu komutlar, Ubuntu’nun küresel paket depolarına (Repositories) bağlanarak en son sürümleri listeler ve ardından sistemi tamamen günceller. Sunucunun yeniden başlatılmaya ihtiyacı varsa, temiz bir başlangıç için sudo reboot komutuyla makine yeniden başlatılır.

Bölüm 3: Adım 2 – Nginx (Engine-X) Web Sunucusu Kurulumu

Sistemimiz güncel olduğuna göre, LEMP yığınının “E” harfini temsil eden web sunucumuzu kurmaya başlayabiliriz. Ubuntu’nun resmi depolarında Nginx her zaman stabil bir sürümle yer alır.

Kurulum için şu komutu çalıştırıyoruz:

Bash

sudo apt install nginx -y

İndirme ve kurma işlemi saniyeler içinde tamamlanacaktır. Ubuntu’da Nginx kurulduğu anda arka planda otomatik olarak çalışmaya başlar. Servisin sorunsuz çalışıp çalışmadığını kontrol etmek için:

Bash

sudo systemctl status nginx

Ekranda yeşil renkli “active (running)” ibaresini görüyorsanız, web sunucunuz ayağa kalkmış demektir.

Güvenlik Duvarı (UFW) Ayarları: Dışarıdan gelen ziyaretçilerin web sitemize ulaşabilmesi için Ubuntu’nun güvenlik duvarından HTTP (Port 80) ve HTTPS (Port 443) trafiğine izin vermemiz gerekir.

Bash

sudo ufw allow 'Nginx Full'

Bu komutun ardından tarayıcınızı açıp sunucunuzun IP adresini (http://sizin_ip_adresiniz) yazdığınızda, ekranda meşhur “Welcome to nginx!” karşılama sayfasını göreceksiniz. Nginx artık emrinize amadedir.

Bölüm 4: Adım 3 – MySQL Veritabanı Kurulumu ve Sıkılaştırma

Web sitemizin verilerini (kullanıcı bilgileri, makaleler, ayarlar) güvenle depolayabilmek için LEMP yığınının “M” harfi olan MySQL’i kuruyoruz. (Dileyen kullanıcılar MySQL’in açık kaynaklı çatalı olan MariaDB’yi de tercih edebilir, mimari olarak tamamen aynıdır).

Kurulum komutu:

Bash

sudo apt install mysql-server -y

Kurulum tamamlandığında MySQL çalışmaya başlar ancak varsayılan haliyle hiç güvenli değildir. Siber güvenlik uzmanı Sinan, veritabanına dışarıdan yapılabilecek saldırıları (Brute-force, Injection) engellemek için derhal MySQL’in yerleşik güvenlik komut dosyasını çalıştırır:

Bash

sudo mysql_secure_installation

Bu sihirbaz, Sinan’a sırasıyla şu soruları sorar ve yapılandırmasını ister:

  1. Parola Doğrulama Eklentisi (Validate Password Plugin): Zayıf şifre kullanımını engellemek için aktif edilebilir. (Geliştirme ortamları için genelde Hayır/No seçilir, canlı sunucular için Evet/Yes önerilir).
  2. Root Şifresi Belirleme: MySQL’in tepe yöneticisi (Root) için güçlü bir şifre girilir.
  3. Anonim Kullanıcıları Sil (Remove anonymous users): Kesinlikle Y (Evet) denilerek silinmelidir.
  4. Root Yetkisiyle Uzaktan Girişi Kapat (Disallow root login remotely): Veritabanına dışarıdan (başka bir IP’den) root olarak erişilmesini engeller, Y denilmelidir.
  5. Test Veritabanını Sil (Remove test database): Gereksiz bir güvenlik açığıdır, Y ile silinmelidir.
  6. Ayrıcalık Tablolarını Yeniden Yükle (Reload privilege tables now): Yaptığımız tüm ayarların anında aktif olması için Y denir.

Bu adımların ardından MySQL veritabanınız, dış müdahalelere kapalı ve güvenli bir şekilde veri depolamaya hazırdır.

Bölüm 5: Adım 4 – PHP ve PHP-FPM Entegrasyonu

Eski LAMP sistemlerinde Apache, PHP kodlarını doğrudan kendi içine gömdüğü mod_php modülü ile okurdu. Ancak Nginx mimarisinde süreç çok daha profesyonel ve izole çalışır. Nginx tek başına PHP kodlarını anlayamaz; statik dosyaları (HTML, CSS, görseller) kendisi hızlıca ziyaretçiye gönderirken, karmaşık PHP işlemlerini (örneğin bir WordPress sayfasının veritabanından çekilip derlenmesini) arkada çalışan PHP-FPM (FastCGI Process Manager) adlı özel bir servise paslar (Reverse Proxy).

Bu nedenle, sadece PHP’yi değil, FPM modülünü ve PHP’nin MySQL ile konuşmasını sağlayan veritabanı sürücüsünü de kurmalıyız. (Not: Sürüm numaraları Ubuntu deponuza göre php8.1, php8.3 vb. değişiklik gösterebilir. Sadece php-fpm yazdığınızda Ubuntu en uygun güncel sürümü indirecektir.)

Bash

sudo apt install php-fpm php-mysql -y

Kurulum bittikten sonra PHP-FPM servisinin çalışıp çalışmadığını kontrol edebilirsiniz:

Bash

sudo systemctl status php8.3-fpm

(Yukarıdaki örnekte Ubuntu 24.04 için yaygın olan 8.3 sürümü baz alınmıştır. Kendi sürümünüze göre komutu güncelleyebilirsiniz.)

Bölüm 6: Adım 5 – Nginx Sunucu Blokları (Virtual Hosts) Yapılandırması

Buraya kadar tüm yazılımları kurduk ancak Nginx henüz gelen PHP dosyalarını kime göndereceğini bilmiyor. Bunun için Nginx içinde web sitemize ait bir “Sunucu Bloğu” (Apache’deki adıyla Virtual Host) oluşturmalıyız.

Yazılım geliştirici Meryem, ornekdomain.com adında yeni bir proje yayına alacaktır. Öncelikle web sitesinin dosyalarının barınacağı klasörü oluşturur ve yetkilerini ayarlar:

Bash

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

Ardından Nginx’in sites-available klasörü içinde bu alan adına özel bir yapılandırma dosyası yaratır:

Bash

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

Açılan boş metin düzenleyicisine, Nginx ile PHP-FPM’in köprü kurmasını sağlayan şu hayati kod bloğunu yapıştırır:

Nginx

server {
    listen 80;
    server_name ornekdomain.com www.ornekdomain.com;
    root /var/www/ornekdomain.com/html;

    index index.php index.html index.htm;

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

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }
}

Bu kodda Meryem Nginx’e şu emri vermiştir: “80 portundan (HTTP) gelen ziyaretçileri dinle. Eğer birisi ornekdomain.com adresine girerse, kök dizin olarak belirttiğim klasöre bak. Gelen istek bir .php uzantılı dosyaysa (location ~ .php$), bunu kendin okumaya çalışma; hemen UNIX soketi üzerinden arka planda çalışan php8.3-fpm servisine gönder ve sonucu alıp ziyaretçiye göster.”

Dosyayı kaydedip kapattıktan sonra, bu sitenin Nginx tarafından aktif edilmesi için sites-enabled klasörüne bir kısayol (Symlink) oluşturulur:

Bash

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

Son olarak Nginx yapılandırmasında yazım hatası olup olmadığını test etmek için sudo nginx -t komutu girilir. “Syntax is ok” mesajı alındığında ise sunucu yeniden yüklenir:

Bash

sudo systemctl reload nginx

Bölüm 7: Adım 6 – LEMP Kurulumunu Test Etmek (info.php)

Her şeyin (Nginx ve PHP iletişiminin) kusursuz çalıştığını doğrulamak için web klasörümüzün içine küçük bir PHP dosyası eklemeliyiz.

Bash

nano /var/www/ornekdomain.com/html/info.php

İçine şu PHP kodunu yazıp kaydedin:

PHP

<?php
phpinfo();
?>

Şimdi tarayıcınızı açın ve [http://ornekdomain.com/info.php](http://ornekdomain.com/info.php) (veya sunucu IP adresiniz/info.php) adresine gidin. Ekranda devasa bir tablo eşliğinde PHP sürümünüzü, yüklenen modülleri ve “Server API” satırında FPM/FastCGI yazdığını görüyorsanız, LEMP kurulumunuz %100 başarıyla tamamlanmış demektir.

Önemli Güvenlik Notu: Meryem, sistemin çalıştığını onayladıktan hemen sonra sudo rm /var/www/[ornekdomain.com/html/info.php](https://ornekdomain.com/html/info.php) komutunu kullanarak bu dosyayı sunucudan derhal siler. Çünkü bu dosya; sunucunuzun iç yollarını, sürüm numaralarını ve kurulu olan tüm hassas bileşenleri açıkça gösterdiği için siber korsanlara bulunmaz bir bilgi kaynağı sağlar.

Sonuç: Hız, Güvenlik ve Esnekliğin Merkezi

Ubuntu üzerinde bir LEMP yığını (Stack) kurmak; ilk başta komut satırı ekranına alışkın olmayanlar için ürkütücü görünse de, mimarinin arkasındaki temel mantığı anladığınızda ne kadar modüler ve düzenli bir sistem inşa ettiğinizi göreceksiniz.

Apache’nin tek parça halinde çalışan ağır yapısına karşılık; Nginx’in dosyaları ışık hızında sunan asenkron çevikliği, PHP-FPM’in sadece ihtiyaç duyulduğunda devreye giren işçi süreçleri (Workers) ve MySQL’in sarsılmaz veri saklama becerisi birleştiğinde ortaya çıkan şey kusursuz bir web makinesidir. Bu altyapı; üzerinde WordPress barındırmak, Laravel ile yazılmış devasa otomasyon sistemleri koşturmak veya milyonlarca trafiğe sahip özel projeler (Custom Apps) yayınlamak için 2026 yılındaki en sağlam, en optimize ve en endüstri standardı temeldir. Artık sunucunuz, internetin en sert trafik dalgalarına bile göğüs germeye tamamen hazır!