LEMP Stack Kurulumu: Ubuntu’da Nginx, MariaDB ve PHP-FPM
PHP ile yazılmış web uygulamalarını çalıştırmak için Linux üzerine Nginx, MariaDB/MySQL ve PHP-FPM bileşenlerini kurup birbirine bağlama işine LEMP stack kurulumu denir. Kısaltmadaki E harfi, Nginx’in okunuşu olan “engine-x”ten gelir. WordPress, Laravel ya da kendi PHP yazılımınızı bir VPS sunucuda yayınlayacaksanız bu yığın, paylaşımlı hostingdeki hazır ortamın tamamen sizin denetiminizdeki karşılığıdır.
Adımlar Ubuntu 24.04 LTS içindir ve sudo yetkili bir kullanıcınızın, etkin bir güvenlik duvarınızın olduğunu varsayar. Nginx’in kendi ayrıntıları (server block yapısı, varsayılan site, loglar) Ubuntu Nginx kurulumu rehberinde anlatıldığından bu sayfa PHP ve veritabanı katmanını ele alır. Sunucu yönetmeden PHP sitesi yayınlamak isterseniz PHP sürüm seçimi ve SSH erişimi hazır gelen Linux hosting daha pratik bir seçenektir.
Kısa cevap
LEMP stack kurulumu, Linux bir sunucuya Nginx web sunucusunu, MariaDB (ya da MySQL) veritabanını ve PHP-FPM’i kurup birbirine bağlamaktır. Ubuntu 24.04 LTS’te nginx, mariadb-server ve php8.3-fpm paketleri kurulur, mariadb-secure-installation çalıştırılır ve uygulamaya özel bir veritabanı kullanıcısı açılır. Son olarak Nginx’teki location ~ \.php$ bloğu PHP-FPM soketine yönlendirilir ve kurulum geçici bir info.php dosyasıyla doğrulanır.
LEMP stack nedir, hangi bileşenlerden oluşur?
LEMP stack, bir isteğin karşılanmasından veritabanı sorgusuna kadar tüm işi paylaşan dört katmandan oluşur. Nginx PHP kodunu kendisi çalıştırmaz; .php ile biten istekleri FastCGI protokolüyle PHP-FPM’e iletir, PHP-FPM gerekirse MariaDB’ye bağlanır ve üretilen HTML yine Nginx üzerinden ziyaretçiye döner.
| Harf | Bileşen | Görevi | Ubuntu 24.04 paketi |
|---|---|---|---|
| L | Linux (Ubuntu 24.04 LTS) | İşletim sistemi, servis yönetimi (systemd), güvenlik duvarı | — |
| E | Nginx | HTTP/HTTPS isteklerini karşılar, statik dosyaları sunar, PHP isteklerini iletir | nginx |
| M | MariaDB (ya da MySQL) | Uygulama verisini saklar ve sorgular | mariadb-server |
| P | PHP-FPM | PHP kodunu süreç havuzunda çalıştırır | php8.3-fpm |
PHP-FPM (FastCGI Process Manager), PHP süreçlerini web sunucusundan bağımsız bir havuzda tutar. Bu ayrım sayesinde PHP’yi yeniden başlatmak Nginx’i etkilemez ve her site için farklı kullanıcıyla çalışan ayrı havuzlar tanımlanabilir.
LEMP ile LAMP arasındaki fark nedir?
İki yığın arasındaki temel fark web sunucusudur: LAMP’ta Apache, LEMP’te Nginx kullanılır; veritabanı ve PHP katmanı aynıdır. Apache, dizinlerdeki .htaccess dosyalarını okuyarak kuralların klasör bazında uygulanmasına izin verir ve bu, paylaşımlı hostingde esneklik sağlar. Nginx ise bütün kuralları merkezî server block dosyalarında toplar ve eşzamanlı bağlantı sayısı yükseldiğinde daha az bellek tüketir.
Pratik seçim kuralı: yazılımınız .htaccess kurallarına sıkı sıkıya bağlıysa ya da kullanıcılarınızın kendi kurallarını yazması gerekiyorsa LAMP; yüksek trafik, reverse proxy ihtiyacı ya da tek elden yönetilen bir sunucu söz konusuysa LEMP. Apache kurallarının Nginx’e nasıl çevrileceğini kestirmek için .htaccess kullanımı rehberindeki yönlendirme ve önbellek örneklerine göz atabilirsiniz.
Nginx ve MariaDB nasıl kurulur?
Nginx ve MariaDB tek komutla kurulabilir; iki servis de kurulumdan hemen sonra çalışır ve açılışta otomatik başlar.
sudo apt update
sudo apt install nginx mariadb-server
systemctl status mariadb --no-pager
sudo mariadb-secure-installationSon komut temel güvenlik ayarlarını soru-cevap biçiminde yapar. Ubuntu ve Debian’da MariaDB’nin root hesabı parola yerine unix_socket kimlik doğrulaması kullanır: işletim sisteminde root yetkisiyle çalışan kullanıcı veritabanına parolasız girer, başka hiç kimse root olarak bağlanamaz. Bu yüzden önerilen yanıtlar şunlardır:
- Enter current password for root: boş bırakıp Enter.
- Switch to unix_socket authentication:
n(bu yöntem zaten kullanılıyor). - Change the root password?:
n. - Anonim kullanıcıları silme, root’un uzaktan girişini engelleme,
testveritabanını kaldırma ve yetki tablolarını yenileme sorularınaY.
Yönetici olarak bağlanmak için artık sudo mariadb yeterlidir. Ubuntu paketinde MariaDB yalnızca 127.0.0.1 adresini dinlediğinden 3306 portunu güvenlik duvarında açmanız gerekmez.
PHP-FPM nasıl kurulur, hangi sürüm gelir?
Ubuntu 24.04 LTS depolarındaki varsayılan PHP sürümü 8.3’tür. FPM paketi ve WordPress, Laravel gibi uygulamaların sık istediği eklentiler şu komutla kurulur:
sudo apt install php8.3-fpm php8.3-cli php8.3-mysql php8.3-curl \
php8.3-mbstring php8.3-xml php8.3-zip php8.3-gd php8.3-intl
php -v
ls /run/php/
systemctl status php8.3-fpm --no-pagerphp -v çıktısındaki sürüm ve /run/php/ klasöründeki soket adı (php8.3-fpm.sock), Nginx’e yazacağınız değeri belirler. Debian 12/13 ya da farklı bir Ubuntu sürümünde numara değişir; komutlardaki 8.3 ifadesini kendi sürümünüzle değiştirin. Bilmeniz gereken dosyalar:
/etc/php/8.3/fpm/php.ini: web isteklerine uygulanan ayarlar (memory_limit,upload_max_filesizevb.)./etc/php/8.3/cli/php.ini: yalnızca komut satırına uygulanır, web tarafını etkilemez./etc/php/8.3/fpm/pool.d/www.conf: havuzun kullanıcısı (www-data), soket yolu ve süreç sayısı.
Bu dosyalardan birini değiştirdikten sonra sudo systemctl restart php8.3-fpm çalıştırın. Bellek sınırının nasıl belirleneceği PHP memory limit artırma rehberinde anlatılıyor.
Uygulama için veritabanı ve kullanıcı nasıl oluşturulur?
Her uygulamaya yalnızca kendi veritabanında yetkili ayrı bir kullanıcı açın; uygulama kodunda asla root hesabını kullanmayın. sudo mariadb ile konsola girip şu komutları çalıştırın:
CREATE DATABASE uygulama_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'uygulama_kullanici'@'localhost' IDENTIFIED BY 'GUCLU_PAROLA';
GRANT ALL PRIVILEGES ON uygulama_db.* TO 'uygulama_kullanici'@'localhost';
EXIT;utf8mb4 karakter seti Türkçe karakterleri ve emojileri sorunsuz saklar. GRANT anında etkili olur, ayrıca FLUSH PRIVILEGES çalıştırmanız gerekmez. Bağlantıyı yeni kullanıcıyla sınayın:
mariadb -u uygulama_kullanici -p uygulama_dbParola isteminden sonra MariaDB [uygulama_db]> satırı görünüyorsa kullanıcı doğru tanımlanmıştır. Veritabanı büyüdükçe sorgu yükü web sunucusuyla aynı kaynakları paylaşır. LIONFIN VPS’lerinde bellek ve işlemci sonradan artırılabilir; yük sürekli yüksekse veritabanını ayrılmış kaynaklı bir VDS sunucuya taşımak daha doğru olur. Karar ölçütleri veritabanı sunucusu rehberinde.
Nginx PHP-FPM’e nasıl bağlanır?
Nginx’in PHP dosyalarını PHP-FPM’e iletmesi için server block’a bir location ~ \.php$ bloğu eklenir. /etc/nginx/sites-available/ornek.com dosyasını şöyle düzenleyin:
server {
listen 80;
listen [::]:80;
server_name ornek.com www.ornek.com;
root /var/www/ornek.com/html;
index index.php index.html;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}snippets/fastcgi-php.conf Ubuntu paketiyle gelen hazır bir parçadır: diskte bulunmayan PHP dosyalarını 404 ile reddeder ve SCRIPT_FILENAME gibi gerekli FastCGI değişkenlerini ayarlar. index satırında index.php’nin önde olması, klasör adresi istendiğinde PHP dosyasının açılmasını sağlar. Son blok, Apache’den kalmış .htaccess dosyalarının dışarıdan okunmasını engeller. Kaydettikten sonra:
sudo nginx -t && sudo systemctl reload nginx
LEMP stack kurulumu nasıl test edilir?
PHP’nin Nginx üzerinden çalıştığını görmenin en hızlı yolu geçici bir phpinfo() sayfasıdır:
echo "<?php phpinfo();" | sudo tee /var/www/ornek.com/html/info.phpTarayıcıda ornek.com/info.php adresini açın. Server API satırı FPM/FastCGI gösteriyorsa yığın doğru bağlanmıştır; mysqli ve pdo_mysql bölümlerinin görünmesi veritabanı eklentisinin yüklendiğini kanıtlar. Kontrol biter bitmez dosyayı silin:
sudo rm /var/www/ornek.com/html/info.phpPHP dosyası çalışmak yerine indiriliyor
location ~ \.php$ bloğu eksiktir ya da Nginx yeniden yüklenmemiştir; düzelttikten sonra tarayıcı önbelleğini de temizleyin.
502 Bad Gateway
Nginx, PHP-FPM soketine ulaşamıyordur. systemctl status php8.3-fpm ile servisi, ls /run/php/ ile soket adını kontrol edin; hata kaydındaki connect() to unix:/run/php/... failed satırı çoğunlukla fastcgi_pass değerinde yanlış yazılmış bir sürüm numarasına işaret eder.
“Access denied for user”
Uygulamaya girilen kullanıcı adı, parola ya da veritabanı adı yanlıştır veya yetki başka bir veritabanına verilmiştir.
Yığın hazır olduğunda WordPress için VPS WordPress kurulumu rehberine geçebilirsiniz.
Sık Sorulan Sorular
LEMP stack’te MySQL yerine MariaDB kullanmak sorun çıkarır mı?
Çoğu PHP uygulaması için hayır. MariaDB, MySQL’in çatallanmasıyla doğmuştur; aynı istemci protokolünü ve aynı temel SQL sözdizimini kullanır, WordPress ve Laravel gibi yazılımlar ikisini de destekler. Fark, JSON işlevleri ya da çoğaltma (replication) gibi ileri özelliklerde ortaya çıkabilir. Yazılımınız açıkça MySQL istiyorsa Ubuntu’da mysql-server paketini kurup aynı adımları izleyebilirsiniz.
MariaDB root parolası neden sorulmuyor?
Ubuntu ve Debian’da MariaDB root hesabı unix_socket kimlik doğrulamasıyla gelir. Bu yöntemde veritabanı, bağlanan işletim sistemi kullanıcısının kimliğine bakar: sudo yetkili kullanıcı sudo mariadb komutuyla parolasız girer, diğer herkes reddedilir. Parola tahmin saldırılarına karşı daha güvenli bir düzendir. Uygulamalar için ise parolalı ve yalnızca kendi veritabanında yetkili ayrı kullanıcılar açılmalıdır.
LEMP kurulumunda PHP sürümünü sonradan değiştirebilir miyim?
Evet. Ubuntu depolarında her LTS sürümü için genellikle tek bir PHP sürümü bulunur; farklı bir sürüm gerekiyorsa Ondřej Surý’nin PPA deposu gibi yaygın kullanılan üçüncü taraf kaynaklardan ilgili php-fpm paketini kurarsınız. Ardından Nginx’teki fastcgi_pass satırını yeni soket yoluna çevirip nginx -t ve reload komutlarını çalıştırmanız yeterlidir. Eski sürümü kaldırmadan önce eklentilerin yeni sürümde de kurulu olduğunu doğrulayın.
LEMP stack için ne kadar RAM gerekir?
Yığının kendisi boştayken az bellek kullanır; asıl tüketimi trafik, eşzamanlı PHP-FPM süreç sayısı ve MariaDB önbellek ayarları belirler. Her PHP süreci uygulamaya göre onlarca megabayt tutabildiğinden www.conf içindeki pm.max_children değerini toplam belleğe göre sınırlayın. Gerçek tüketimi free -h ve htop ile ölçüp ihtiyaç arttıkça sunucu kaynaklarını yükseltmek en sağlıklı yoldur.
Nginx ile PHP-FPM arasında Unix soketi mi TCP mi kullanılmalı?
Aynı sunucuda çalışan Nginx ve PHP-FPM için Unix soketi önerilir; ağ yığınını kullanmadığından biraz daha az ek yük getirir ve dışarıya port açmaz. PHP-FPM’i başka bir sunucuya ya da konteynere taşıyacaksanız havuz dosyasındaki listen değerini 127.0.0.1:9000 gibi bir TCP adresine çevirir, fastcgi_pass satırını da buna göre güncellersiniz.
Bu makale yardımcı oldu mu?
Geri bildiriminiz için teşekkürler!
kişi faydalı buldu