X

Lütfen Ülke (Bölge) Seçiniz

Türkiye (Türkçe)Türkiye (Türkçe)
X
X

Lütfen Ülke (Bölge) Seçiniz

Türkiye (Türkçe)Türkiye (Türkçe)
X
🔥 Türkiye Lokasyon VDS & VPS sunucularında %20 indirim! Kupon Kodu: Türkiye'de %20 İndirim! Kod: DATA20
Şirketimizdeki KALİTEYİ Yakından Tanıyın!

VDS'e LEMP (Nginx, MariaDB, PHP) Kurulumu Rehberi

VDS'e LEMP (Nginx, MariaDB, PHP) Kurulumu Rehberi

LEMP kurulumu; Linux, Nginx (Engine-X olarak okunduğu için E harfi), MariaDB ve PHP bileşenlerini aynı sunucuda bir araya getirerek WordPress, Laravel ve benzeri PHP uygulamaları için hızlı bir altyapı oluşturur. Bir VDS üzerinde bu yığını kendiniz kurduğunuzda her bileşenin sürümünü ve ayarını tamamen kontrol edersiniz. Bu rehberde LEMP stack'i Ubuntu 22.04/24.04 ve AlmaLinux 9 üzerinde adım adım kuruyor, dağıtımlar arasındaki yol ve sürüm farklarını da açıkça belirtiyoruz.

LEMP Stack Bileşenleri ve Görevleri

LEMP yığınında her bileşenin net bir görevi vardır. Ziyaretçinin isteği önce Nginx'e gelir. İstek bir resim veya CSS dosyası gibi statikse Nginx doğrudan yanıt verir. PHP dosyası istendiğinde Nginx isteği FastCGI protokolüyle PHP-FPM'e iletir, PHP-FPM kodu çalıştırır, gerekirse MariaDB'den veri çeker ve sonucu Nginx'e geri verir.

Kuruluma geçmeden önce sürüm farklarını bilmek, yanlış dosya yolu yüzünden yaşanacak hataları önler:

BileşenUbuntu 22.04Ubuntu 24.04AlmaLinux 9
Varsayılan PHP8.18.38.0 (modül akışlarıyla daha yeni sürümler)
PHP-FPM soketi/run/php/php8.1-fpm.sock/run/php/php8.3-fpm.sock/run/php-fpm/www.sock
php.ini (FPM)/etc/php/8.1/fpm/php.ini/etc/php/8.3/fpm/php.ini/etc/php.ini
FPM havuz dosyası/etc/php/8.1/fpm/pool.d/www.conf/etc/php/8.3/fpm/pool.d/www.conf/etc/php-fpm.d/www.conf
Varsayılan MariaDB10.610.1110.5 (modül akışıyla 10.11)
Güvenlik duvarıUFWUFWfirewalld

Ubuntu'da LEMP Kurulumu

1. Nginx'i Kurun

sudo apt update
sudo apt install nginx
sudo ufw allow 'Nginx Full'

Nginx'in dizin yapısını ve server block mantığını ayrıntılı öğrenmek için Ubuntu'da Nginx kurulumu yazımıza göz atabilirsiniz.

2. MariaDB'yi Kurun ve Güvenli Hale Getirin

sudo apt install mariadb-server
sudo systemctl enable --now mariadb
sudo mariadb-secure-installation

Eski kaynaklarda geçen mysql_secure_installation komutu da çoğu sürümde hâlâ çalışır, ancak güncel adı mariadb-secure-installation'dır. Sihirbaz sırasında anonim kullanıcıları silin, root'un uzaktan girişini kapatın ve test veritabanını kaldırın. Ubuntu'da MariaDB root kullanıcısı varsayılan olarak unix_socket kimlik doğrulaması kullanır; yani sistemde root iken sudo mariadb ile parolasız bağlanırsınız. Bu güvenli bir yöntemdir ve değiştirmeniz gerekmez.

3. Uygulama İçin Veritabanı ve Kullanıcı Oluşturun

Uygulamanızı asla MariaDB root kullanıcısıyla bağlamayın. Her uygulama için yalnızca kendi veritabanına yetkili ayrı bir kullanıcı açın:

sudo mariadb
CREATE DATABASE uygulama_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'uygulama_kullanici'@'localhost' IDENTIFIED BY 'Guclu-Bir-Parola-Secin';
GRANT ALL PRIVILEGES ON uygulama_db.* TO 'uygulama_kullanici'@'localhost';
FLUSH PRIVILEGES;
EXIT;

utf8mb4 karakter seti Türkçe karakterleri ve emojileri sorunsuz saklar; eski utf8 (utf8mb3) yerine bunu tercih edin.

4. PHP-FPM ve Eklentilerini Kurun

Ubuntu'da sürüm numarası vermeden paket adlarını yazdığınızda dağıtımın varsayılan PHP sürümü kurulur:

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

Kurulan sürümü ve servis adını kontrol edin. Ubuntu 24.04'te servis adı php8.3-fpm, 22.04'te php8.1-fpm olur:

php -v
systemctl status php8.3-fpm
ls /run/php/

Ubuntu'da Nginx paketi ile php-fpm birlikte kurulduğunda Apache kurulmaz. Ancak php meta paketini tek başına kurarsanız bağımlılık olarak Apache gelebilir; bu yüzden doğrudan php-fpm paketini kullanın.

5. Nginx'i PHP-FPM'e Bağlayın

Site dizinini oluşturup server block dosyasını hazırlayın:

sudo mkdir -p /var/www/ornek.com
sudo chown -R www-data:www-data /var/www/ornek.com
sudo nano /etc/nginx/sites-available/ornek.com
server {
    listen 80;
    listen [::]:80;
    server_name ornek.com www.ornek.com;
    root /var/www/ornek.com;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

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

    location ~ /\.(?!well-known) {
        deny all;
    }
}

Ubuntu 22.04 kullanıyorsanız soket satırını php8.1-fpm.sock olarak değiştirin. Son location bloğu .env, .git ve .htaccess gibi gizli dosyaların dışarıya sızmasını engeller; Let's Encrypt doğrulaması için gereken .well-known dizinini ise açık bırakır.

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

AlmaLinux 9'da LEMP Kurulumu

AlmaLinux'ta paket adları, dosya yolları ve PHP-FPM'in çalıştığı kullanıcı farklıdır. Varsayılan PHP 8.0'dan daha yeni bir sürüm istiyorsanız önce mevcut modül akışlarını listeleyin ve birini etkinleştirin:

sudo dnf module list php
sudo dnf module enable php:8.2

Listede görünen akışlar AlmaLinux'un alt sürümüne göre değişir; komuttaki sürümü kendi listenizde gördüğünüz değerle değiştirin. Ardından bileşenleri kurun:

sudo dnf install nginx mariadb-server php-fpm php-mysqlnd php-cli php-gd php-mbstring php-xml php-intl php-bcmath php-opcache
sudo systemctl enable --now nginx mariadb php-fpm
sudo mariadb-secure-installation

AlmaLinux'ta PHP-FPM havuzu (/etc/php-fpm.d/www.conf) varsayılan olarak apache kullanıcısıyla çalışır. Bu, Nginx kullanırken de sorun değildir: aynı dosyadaki listen.acl_users satırı sokete hem apache hem nginx kullanıcısının erişmesine izin verir. Kullanıcıyı nginx olarak değiştirirseniz /var/lib/php/session gibi dizinlerin grup sahipliğini de güncellemeniz gerekir; aksi halde oturumlar kaydedilemez. Bu yüzden varsayılanı korumak ve uygulamanın yazacağı dizinleri (yükleme, önbellek) apache kullanıcısına vermek daha az sürpriz çıkarır:

grep -E '^(user|group|listen)' /etc/php-fpm.d/www.conf
sudo mkdir -p /var/www/ornek.com/uploads
sudo chown -R apache:apache /var/www/ornek.com/uploads

AlmaLinux'ta snippets/fastcgi-php.conf dosyası yoktur. Site dosyasını /etc/nginx/conf.d/ornek.com.conf olarak oluşturup PHP bloğunu şu şekilde yazın:

location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass unix:/run/php-fpm/www.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

Güvenlik duvarında HTTP ve HTTPS servislerini açın:

sudo firewall-cmd --permanent --add-service=http --add-service=https
sudo firewall-cmd --reload

AlmaLinux'ta SELinux varsayılan olarak etkindir. Site dosyalarını /var/www altında tutarsanız doğru güvenlik bağlamı otomatik uygulanır. Farklı bir dizin kullanırsanız semanage fcontext ve restorecon ile bağlam tanımlamanız gerekir; uygulamanız dosya yazacaksa (önbellek, yükleme klasörü) ilgili dizine httpd_sys_rw_content_t bağlamı verin. SELinux'u kapatmak yerine bu kuralları tanımlamak çok daha güvenlidir. SELinux engellemelerini teşhis etmek için /var/log/audit/audit.log dosyasındaki kayıtlara bakabilirsiniz.

Kurulumu Test Etme

PHP'nin Nginx üzerinden çalıştığını doğrulamak için geçici bir test dosyası oluşturun:

echo '<?php phpinfo();' | sudo tee /var/www/ornek.com/info.php

Tarayıcıda http://ornek.com/info.php adresini açın. PHP bilgi sayfasında Server API satırında FPM/FastCGI görmelisiniz. Test bittikten sonra bu dosyayı mutlaka silin, çünkü sunucunuz hakkında saldırganlara değerli bilgiler verir:

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

Veritabanı bağlantısını test etmek için oluşturduğunuz kullanıcıyla bağlanmayı deneyin:

mariadb -u uygulama_kullanici -p uygulama_db

PHP Ayarlarını Uygulamaya Göre Düzenleme

Varsayılan PHP ayarları çoğu modern uygulama için düşük kalır. Sık değiştirilen değerler şunlardır:

  • upload_max_filesize ve post_max_size: Yüklenebilecek en büyük dosya boyutu. post_max_size, upload_max_filesize değerinden büyük veya ona eşit olmalıdır.
  • memory_limit: Tek bir PHP isteğinin kullanabileceği en fazla bellek.
  • max_execution_time: Bir betiğin en uzun çalışma süresi (saniye).

Dosya yükleme sınırını artırdıysanız Nginx tarafında da server block'a client_max_body_size 64M; gibi bir satır eklemeyi unutmayın; aksi halde Nginx isteği PHP'ye ulaşmadan 413 Request Entity Too Large hatasıyla reddeder. PHP ayarlarından sonra FPM servisini yeniden başlatın: Ubuntu'da sudo systemctl restart php8.3-fpm, AlmaLinux'ta sudo systemctl restart php-fpm.

Trafik arttığında PHP-FPM havuzundaki pm.max_children değeri en kritik ayardır. Bu değer, aynı anda çalışabilecek PHP süreci sayısını belirler. Çok düşükse istekler kuyrukta bekler, çok yüksekse sunucu belleği tükenir. Kabaca hesaplamak için PHP'ye ayırabileceğiniz RAM'i, tek bir PHP sürecinin ortalama bellek tüketimine bölün. Veritabanı tarafındaki ayarları ise MySQL ve MariaDB performans ayarları yazımızda anlattık.

OPcache ile PHP Performansını Artırma

OPcache, PHP betiklerinin derlenmiş halini bellekte tutarak her istekte yeniden derlenmesini önler. Ubuntu'da php-fpm kurulumunda genellikle bağımlılık olarak gelir ve kurulduğunda varsayılan olarak etkindir (gelmediyse php-opcache paketini kurun); AlmaLinux'ta yukarıda kurduğumuz php-opcache paketiyle gelir. Durumunu şu komutla kontrol edebilirsiniz:

php -i | grep -i opcache.enable

Komut satırındaki PHP ile FPM farklı ayar dosyaları okuyabildiği için asıl doğrulamayı geçici info.php sayfasındaki OPcache bölümünden yapın. Varsayılan bellek ve dosya sınırları küçük siteler için yeterlidir. Ancak çok sayıda eklenti barındıran WordPress veya WooCommerce kurulumlarında, ya da aynı sunucuda birden fazla site çalıştığında, opcache.memory_consumption ve opcache.max_accelerated_files değerleri yetersiz kalabilir. Önbellek dolduğunda PHP betikleri sürekli yeniden derlenir ve sayfa süreleri belirgin şekilde uzar. Bu değerleri önbelleğin doluluk oranına bakarak artırın ve değişiklikten sonra PHP-FPM'i yeniden başlatın.

Kurulum Sonrası Yapılması Gerekenler

  1. Siteye Let's Encrypt ile ücretsiz SSL ekleyin; adımlar Certbot SSL rehberimizde.
  2. Veritabanı için otomatik yedek planı kurun ve yedekleri sunucu dışına taşıyın.
  3. MariaDB'nin yalnızca localhost'u dinlediğinden emin olun: sudo ss -tlnp | grep 3306 çıktısında 127.0.0.1 görünmelidir.
  4. PHP ve sistem paketlerini düzenli olarak güncelleyin.

Sık Sorulan Sorular

LEMP mi LAMP mı tercih etmeliyim?

Yoğun trafikli ve statik içeriği bol sitelerde Nginx tabanlı LEMP daha az kaynakla daha fazla eşzamanlı bağlantı taşır. .htaccess dosyalarına bağımlı eski uygulamalar ise Apache tabanlı LAMP ile daha kolay çalışır.

MariaDB yerine MySQL kullanabilir miyim?

Evet. Ubuntu'da mysql-server, AlmaLinux'ta mysql-server paketiyle MySQL 8 kurulabilir. Uygulama tarafında çoğu durumda fark yoktur; ikisini aynı sunucuya birlikte kurmayın.

Aynı sunucuda farklı PHP sürümleri çalıştırabilir miyim?

Evet. Ubuntu'da her sürümün kendi FPM servisi ve soketi olur; her siteyi farklı sokete yönlendirebilirsiniz. Resmi depoda tek sürüm bulunduğu için ek sürümler genellikle üçüncü taraf bir PPA ile kurulur.

LEMP kurmak için kaç GB RAM gerekir?

Küçük bir site için 2 GB RAM başlangıç için yeterlidir. WooCommerce gibi veritabanı ağırlıklı uygulamalarda 4 GB ve üzeri daha rahat bir çalışma sağlar. Bellek yetersizliğine karşı bir swap alanı da tanımlamanız önerilir.

PHP-FPM için Unix soketi mi, TCP portu mu kullanmalıyım?

Nginx ile PHP-FPM aynı sunucudaysa Unix soketi daha az ek yük getirir ve ağa açık bir port oluşturmaz; bu rehberdeki yapılandırma bu yüzden soket kullanır. PHP-FPM ayrı bir sunucuda veya konteynerde çalışıyorsa 127.0.0.1:9000 gibi bir TCP adresi tercih edilir. TCP kullanırken portun dışarıya açık olmadığından emin olun.

LEMP kurulumu tamamlandığında PHP uygulamalarınızı paylaşımlı hostingin sınırları olmadan, tam kontrolle çalıştırırsınız. NVMe disk ve özel IP ile gelen Ankara lokasyonlu VDS paketleri bu yığın için sağlam bir temel sunar; yüksek trafikli e-ticaret projelerinde ise yüksek frekanslı Ryzen işlemcili sunucular PHP'nin tek çekirdek performansından tam yararlanmanızı sağlar.

VDS Sanal Sunucu
TÜRKİYE / ANKARA
₺139 /ay'dan başlayan
Paketleri İncele
  •  NVMe SSD Disk
  •  DDoS Koruması Dahil
  •  Limitsiz Trafik
  •  0–15 Dakikada Kurulum
  •  Windows - Linux
  •  7/24 Destek
Top
Destek Hattı0850 840 90 28

DNS Adresleri

ns1.datahost.net.tr
ns2.datahost.net.tr
DataHost Destek Çevrimiçi

Satış öncesi tüm sorularınız için WhatsApp hattımıza yazın; size hızlıca yardımcı olalım.

WhatsApp'tan Yaz