Bilgi Bankası / Sunucu & VPS

Ubuntu'ya Nginx + PHP + MySQL Kurulumu (LEMP Stack)

Son güncelleme: 23 Eylül 2026

LEMP = Linux + Engine-X (Nginx) + MariaDB/MySQL + PHP. Bu rehber, sıfır bir Ubuntu 22.04/24.04 sunucusuna bir PHP sitesi çalıştıracak tam yığını kurar: Nginx, PHP-FPM, MariaDB, bir sanal sunucu (server block) ve Let's Encrypt SSL.

Önce İlk VPS Kurulumu ve Ubuntu Sunucu Güvenliği adımlarını tamamlayın (sudo kullanıcı, UFW, SSH). Komutları sudo yetkili normal kullanıcıyla çalıştırın.

1. Nginx

sudo apt update
sudo apt install nginx -y
sudo systemctl enable --now nginx

UFW zaten 80,443/tcp'ye izin veriyorsa sunucunun IP adresine tarayıcıdan girince Nginx karşılama sayfasını görürsünüz.

2. MariaDB

sudo apt install mariadb-server -y
sudo systemctl enable --now mariadb
sudo mysql_secure_installation

mysql_secure_installation sorularında: root için unix_socket doğrulamasına Y, anonim kullanıcıları sil, uzaktan root girişini kapat, test veritabanını sil, yetki tablolarını yeniden yükle.

Uygulama için veritabanı ve kullanıcı

sudo mysql
CREATE DATABASE app_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'GUCLU_BIR_PAROLA';
GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

3. PHP-FPM

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

Sürümü kontrol edin (Ubuntu 24.04'te tipik olarak 8.3):

php -v
systemctl status php8.3-fpm
Belirli bir PHP sürümü gerekiyorsa ondrej/php PPA'sını ekleyin: sudo add-apt-repository ppa:ondrej/php ardından sudo apt install php8.2-fpm ...

4. Site için server block

sudo mkdir -p /var/www/siteniz.com/public
sudo chown -R $USER:www-data /var/www/siteniz.com

/etc/nginx/sites-available/siteniz.com:

server {
    listen 80;
    server_name siteniz.com www.siteniz.com;
    root /var/www/siteniz.com/public;
    index index.php index.html;

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

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

    location ~ /\.(?!well-known).* {
        deny all;
    }
}
sudo ln -s /etc/nginx/sites-available/siteniz.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Test

echo "<?php phpinfo();" | sudo tee /var/www/siteniz.com/public/info.php

http://siteniz.com/info.php PHP bilgi sayfasını göstermeli. Testten sonra silin: sudo rm /var/www/siteniz.com/public/info.php

5. DNS

Alan adınızın A kaydını sunucunun IP adresine yönlendirin:

siteniz.com.      A     203.0.113.10
www.siteniz.com.  A     203.0.113.10

Yayılmayı bekleyin (dig siteniz.com +short IP'yi dönene kadar).

6. Ücretsiz SSL (Let's Encrypt)

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

Certbot sertifikayı alır, Nginx yapılandırmasını HTTPS'e günceller ve yönlendirme ekler. Otomatik yenileme certbot.timer ile kurulur; test:

sudo certbot renew --dry-run

Ayrıntı: SSL Sertifikası Nedir?

7. Ayarları güçlendirin

/etc/php/8.3/fpm/php.ini içinde tipik ayarlar:

upload_max_filesize = 32M
post_max_size = 32M
memory_limit = 256M
max_execution_time = 60
date.timezone = Europe/Istanbul
sudo systemctl restart php8.3-fpm

Sık karşılaşılan sorunlar

  • 502 Bad Gateway: fastcgi_pass yolundaki PHP sürümü kurulu sürümle uyuşmuyor. ls /run/php/ ile doğru soketi görün.
  • 403 Forbidden: root dizini yanlış ya da izinler hatalı. www-data okuyabilmeli.
  • PHP dosyası indiriliyor: location ~ \.php$ bloğu eksik veya nginx -t hatalı.
  • certbot "DNS problem": A kaydı henüz yayılmadı; dig ile doğrulayıp tekrar deneyin.
Arcnar'da: Sunucu yönetimiyle uğraşmak istemiyorsanız Web Hosting kategorisi (yakında) bu yığını hazır sunar. Compute paketinde ise tam kontrol sizde — bu rehberdeki adımlar doğrudan uygulanır.

Sık sorulan sorular

LEMP ile LAMP arasındaki fark nedir?
LAMP'ta web sunucusu Apache, LEMP'te ise Nginx (Engine-X) kullanılır. Nginx statik içerik ve yüksek eşzamanlı bağlantıda daha verimlidir ve PHP'yi PHP-FPM üzerinden çalıştırır. İkisi de aynı işi yapar; modern kurulumlarda LEMP daha yaygındır.
Nginx'te 502 Bad Gateway hatası neden olur?
Neredeyse her zaman PHP-FPM ile ilgili: server block'taki fastcgi_pass soket yolundaki PHP sürümü, kurulu sürümle uyuşmuyor ya da php-fpm servisi çalışmıyor. ls /run/php/ ile doğru soket adını görüp yapılandırmayı güncelleyin.
Belirli bir PHP sürümünü nasıl kurarım?
Ubuntu deposu genelde tek bir sürüm sunar. Farklı sürüm için ondrej/php PPA'sını ekleyin: sudo add-apt-repository ppa:ondrej/php ardından sudo apt install php8.2-fpm php8.2-mysql gibi. Birden çok sürüm yan yana kurulabilir.
phpinfo() test dosyasını silmem şart mı?
Evet. phpinfo() çıktısı PHP sürümünüzü, yüklü eklentileri, dosya yollarını ve yapılandırma detaylarını herkese açık gösterir; bu bir saldırgan için değerli keşif bilgisidir. Test biter bitmez dosyayı silin.

Bu makale yardımcı oldu mu?