Ubuntu’da Linux, Nginx, MySQL, PHP (LEMP) Stack Kurulumu: Tam Rehber
LEMP stack — Linux, Nginx, MySQL ve PHP için bir kısaltma — dinamik web siteleri ve yüksek performanslı web uygulamalarını çalıştırmak için en yaygın olarak benimsenen web sunucusu yapılandırmalarından biridir. Linux’un sağlam istikrarı, Nginx’in yıldırım hızı, MySQL’in güçlü veri yönetimi yetenekleri ve PHP’nin çok yönlülüğünü birleştirerek, LEMP stack güçlü, ölçeklenebilir ve kaynak açısından verimli bir barındırma ortamı sunar.
Kişisel bir blog, bir işletme web sitesi veya karmaşık bir kurumsal uygulama dağıtıyor olsanız da, düzgün şekilde yapılandırılmış bir LEMP stack size daha iyi ölçeklenebilirlik, daha hızlı sayfa yükleme süreleri ve verimli bellek yönetimi sağlar — özellikle yüksek trafik koşullarında.
Bu stack’i çalıştırmak için güvenilir bir temel gerekiyorsa, AlexHost’un VPS Barındırması tam kök erişimi ile yüksek performanslı Linux tabanlı sanal sunucular sağlayarak, LEMP ortamınızın her bileşeni üzerinde tam kontrol verir. Bunu ilk günden uygulamanızı güvenli hale getirmek için bir SSL Sertifikası ile eşleştirin.
Bu kapsamlı kılavuzda, bir Ubuntu sunucusunda tam LEMP stack’i yükleme ve yapılandırmanın her adımında size rehberlik edeceğiz — ilk sistem hazırlığından canlı PHP ortamınızı test etmeye kadar.
1. Ön Koşullar
Başlamadan önce, aşağıdakilerin yerinde olduğundan emin olun:
- Ubuntu 18.04, 20.04 veya 22.04 LTS çalıştıran bir sunucu
- sudo ayrıcalıklarına sahip bir kullanıcı hesabı
- Sunucunuza SSH erişimi veya doğrudan terminal erişimi
- Kayıtlı bir alan adı (üretim dağıtımları için isteğe bağlı ancak önerilir — AlexHost Alan Adı Kaydı aracılığıyla bir tane kaydedebilirsiniz)
> Pro İpucu: Temiz, izole bir ortam ve garantili kaynaklar için, bir VPS Hosting planı herhangi bir LEMP dağıtımı için ideal başlangıç noktasıdır.
2. Sisteminizi Güncelleyin
Herhangi bir paket kurmadan önce, paket dizininizi yenilemek ve tüm bekleyen güncellemeleri uygulamak kritik önem taşır. Bu, en son ve en güvenli yazılım sürümleriyle çalıştığınızdan emin olmanızı sağlar.
Terminalinizi açın ve şunu çalıştırın:
sudo apt update && sudo apt upgrade -yBu komut yerel paket veritabanını günceller ve tüm yüklü paketleri en son kullanılabilir sürümlerine yükseltir.
3. Nginx Yükleyin
Nginx (“engine-x” olarak telaffuz edilir), yüksek performanslı, olay odaklı bir web sunucusu ve ters proxy’dir. Apache’nin aksine, Nginx eş zamanlı bağlantıları minimal bellek tüketimi ile yönetir, bu da onu yüksek trafikli ortamlar için tercih edilen seçim haline getirir.
Adım 1: Nginx Yükleyin
sudo apt install nginx -yAdım 2: Nginx’i Başlatın ve Etkinleştirin
Yüklemeden sonra, Nginx hizmetini başlatın ve sistem önyüklemesinde otomatik olarak başlaması için yapılandırın:
sudo systemctl start nginx
sudo systemctl enable nginxAdım 3: Nginx’in Çalıştığını Doğrulayın
Nginx’in etkin olduğunu doğrulamak için hizmet durumunu kontrol edin:
sudo systemctl status nginxHizmetin etkin (çalışıyor) olduğunu gösteren bir çıktı görmelisiniz. Ayrıca bir web tarayıcısı açabilir ve sunucunuzun IP adresine gidebilirsiniz:
http://your_server_ipNginx doğru şekilde çalışıyorsa, varsayılan “Welcome to nginx!” sayfasıyla karşılanacaksınız.
Adım 4: Güvenlik Duvarını Yapılandırın (Uygulanabilirse)
UFW (Uncomplicated Firewall) etkinse, HTTP ve HTTPS trafiğine izin verin:
sudo ufw allow 'Nginx Full'
sudo ufw status4. MySQL Yükleyin
MySQL, WordPress, Joomla ve özel PHP uygulamaları dahil olmak üzere çoğu dinamik web uygulamasının veri omurgası olarak hizmet veren güçlü, açık kaynaklı bir ilişkisel veritabanı yönetim sistemidir (RDBMS).
Adım 1: MySQL Server Yükleyin
sudo apt install mysql-server -yAdım 2: MySQL Kurulumunu Güvenli Hale Getirin
Yüklendikten sonra, yerleşik güvenlik sağlamlaştırma komut dosyasını çalıştırın. Bu komut dosyası, güçlü bir kök parolası ayarlamanıza, anonim kullanıcıları kaldırmanıza, uzaktan kök girişini devre dışı bırakmanıza ve test veritabanını silmenize yardımcı olur:
sudo mysql_secure_installationSize bir dizi soru sorulacaktır. Bir üretim sunucusu için önerilen yanıtlar şunlardır:
| İstem | Önerilen Yanıt |
|---|---|
| VALIDATE PASSWORD bileşeni ayarlansin mi? | Evet |
| Parola doğrulama politikası seviyesi | 2 (GÜÇLÜ) |
| Anonim kullanıcılar kaldırılsin mı? | Evet |
| Kök girişi uzaktan yasaklansin mı? | Evet |
| Test veritabanı silinsin mi? | Evet |
| Ayrıcalık tabloları yeniden yüklensin mi? | Evet |
Adım 3: MySQL’in Çalışıp Çalışmadığını Doğrulayın
sudo systemctl status mysqlAdım 4: MySQL’e Giriş Yapın (İsteğe Bağlı Doğrulama)
sudo mysql -u root -pİstendiğinde kök parolanızı girin. MySQL kabuğundan çıkmak için exit yazın.
5. PHP Yükleyin
PHP (Hypertext Preprocessor), dinamik içeriği işleyen ve veri odaklı web sayfalarını sunmak için MySQL ile iletişim kuran sunucu tarafı komut dosyası dilidir. Nginx kullanırken, PHP, web sunucusundan bağımsız olarak PHP isteklerini işleyen PHP-FPM (FastCGI Process Manager) aracılığıyla işlenir ve bu da performansı artırır.
Adım 1: PHP-FPM ve MySQL Uzantısını Yükleyin
sudo apt install php-fpm php-mysql -yDaha geniş uygulama uyumluluğu için yaygın olarak kullanılan PHP uzantılarını da yüklemek isteyebilirsiniz:
sudo apt install php-curl php-gd php-mbstring php-xml php-xmlrpc php-zip -yAdım 2: PHP-FPM’i Güvenlik için Yapılandırın
PHP-FPM yapılandırma dosyasını açın. 8.1 yerine yüklü PHP sürümünüzü yazın (php -v ile kontrol edin):
sudo nano /etc/php/8.1/fpm/php.inicgi.fix_pathinfo yönergesini bulun ve kritik bir güvenlik açığını önlemek için 0 olarak ayarlayın:
cgi.fix_pathinfo=0> Neden önemlidir: cgi.fix_pathinfo değeri 1 olarak ayarlanırsa, istenen PHP dosyası mevcut değilse PHP bulabileceği en yakın dosyayı yürütmeye çalışacaktır. Bu davranış, saldırganlar tarafından rastgele kod yürütmek için istismar edilebilir.
Dosyayı kaydedin ve kapatın (Ctrl+X, ardından Y, ardından Enter).
Adım 3: PHP-FPM’i Yeniden Başlatın
Yapılandırma değişikliklerini uygulayarak PHP-FPM hizmetini yeniden başlatın:
sudo systemctl restart php8.1-fpm6. Nginx’i PHP İşlemek İçin Yapılandırın
Varsayılan olarak, Nginx PHP dosyalarını nasıl işleyeceğini bilmez. Nginx’e PHP isteklerini işlenmesi için PHP-FPM’ye iletmesini söyleyen bir sunucu bloğu (Apache sanal ana bilgisayarının Nginx eşdeğeri) oluşturmanız gerekir.
Adım 1: Web Kök Dizinini Oluşturun
Web sitesi dosyalarınızın depolanacağı dizini oluşturun:
sudo mkdir -p /var/www/your_domain
sudo chown -R www-data:www-data /var/www/your_domain
sudo chmod -R 755 /var/www/your_domainyour_domain yerine gerçek alan adınızı veya açıklayıcı bir proje adını yazın.
Adım 2: Yeni Bir Nginx Sunucu Bloğu Oluşturun
Siteniz için yeni bir Nginx yapılandırma dosyası oluşturun:
sudo nano /etc/nginx/sites-available/your_domainAşağıdaki yapılandırma bloğunu ekleyin. Satır içi yorumları dikkatle okuyun — her yönergenin ne yaptığını açıklarlar:
server {
listen 80;
listen [::]:80;
server_name your_domain www.your_domain; # Replace with your domain or server IP
root /var/www/your_domain; # Document root — where your files live
index index.php index.html index.htm; # Default files to serve
# Handle all requests; return 404 if file not found
location / {
try_files $uri $uri/ =404;
}
# Pass PHP scripts to PHP-FPM for processing
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; # Adjust PHP version as needed
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# Deny access to hidden files (e.g., .htaccess)
location ~ /.ht {
deny all;
}
}> Önemli: your_domain yerine gerçek alan adınızı yazın ve php8.1-fpm.sock öğesini yüklü PHP sürümünüzle eşleşecek şekilde ayarlayın.
Adım 3: Sunucu Bloğunu Etkinleştirin
Yapılandırmayı etkinleştirmek için sites-available öğesinden sites-enabled öğesine sembolik bir bağlantı oluşturun:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/Olası bir hash bucket bellek sorununu önlemek için, ana Nginx yapılandırmasını açmak ve server_names_hash_bucket_size yönergesinin açıklamasının kaldırıldığından emin olmak da iyi bir uygulamadır:
sudo nano /etc/nginx/nginx.confBulun ve açıklamasını kaldırın:
server_names_hash_bucket_size 64;Adım 4: Nginx Yapılandırmasını Test Edin
Nginx’i yeniden başlatmadan önce, yapılandırmayı sözdizimi hataları açısından her zaman test edin:
sudo nginx -tÇıktı şunu gösterirse:
nginx: configuration file /etc/nginx/nginx.conf test is successfulDevam etmeye hazırsınız.
Adım 5: Nginx’i Yeniden Başlatın
Tüm değişiklikleri Nginx hizmetini yeniden başlatarak uygulayın:
sudo systemctl restart nginx7. PHP Info Dosyası Oluşturun ve Test Edin
Nginx’in PHP isteklerini PHP-FPM’ye doğru şekilde ilettiğini doğrulamak için, belge kökünüzde basit bir PHP test dosyası oluşturun.
Adım 1: PHP Info Dosyasını Oluşturun
sudo nano /var/www/your_domain/info.phpAşağıdaki içeriği ekleyin:
<?php
phpinfo();
?>Dosyayı kaydedin ve kapatın.
Adım 2: PHP Info Sayfasına Erişin
Web tarayıcınızı açın ve şu adrese gidin:
http://your_domain/info.phpVeya henüz bir alan adı yapılandırmadıysanız:
http://your_server_ip/info.phpPHP bilgi sayfasını görmelisiniz — PHP kurulumunuzun, yüklü modüllerin, yapılandırma değerlerinin ve ortam değişkenlerinin ayrıntılı bir özeti. Bu, üç bileşenin (Nginx, PHP-FPM ve MySQL) birlikte doğru şekilde çalıştığını doğrular.
Adım 3: PHP Info Dosyasını Kaldırın (Kritik Güvenlik Adımı)
Her şeyin çalıştığını doğruladıktan sonra, info.php dosyasını hemen silin. Bu dosya, kötü niyetli kişiler tarafından istismar edilebilecek hassas sunucu yapılandırma ayrıntılarını ortaya çıkarır:
sudo rm /var/www/your_domain/info.php8. Sonraki Adımlar: LEMP Stack’inizi Sertleştirin ve Optimize Edin
LEMP stack’iniz çalışır durumda olduğuna göre, sunucunuzu üretime hazırlamak için aşağıdaki ek adımları göz önünde bulundurun:
Ücretsiz SSL Sertifikası ile HTTPS’i Etkinleştirin
Certbot ve Let’s Encrypt kullanarak sitenizi TLS/SSL şifrelemesiyle güvenli hale getirin:
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your_domain -d www.your_domainAlternatif olarak, işletme ve e-ticaret uygulamaları için daha yüksek güven seviyeleri sağlayan ticari olarak doğrulanmış premium sertifikalar için AlexHost SSL Sertifikaları‘nı keşfedin.
Nginx Performansını Optimize Edin
Performansı iyileştirmek için Nginx yapılandırmanıza aşağıdaki yönergeleri ekleyin:
# Enable Gzip compression
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
# Enable browser caching for static assets
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}Adanmış MySQL Kullanıcısı Ayarlayın
Uygulamalarınız için root MySQL hesabını kullanmaktan kaçının. Sınırlı ayrıcalıklara sahip adanmış bir veritabanı kullanıcısı oluşturun:
CREATE DATABASE your_app_db;
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON your_app_db.* TO 'app_user'@'localhost';
FLUSH PRIVILEGES;Daha Kolay Yönetim için Kontrol Paneli Kullanmayı Düşünün
LEMP stack’inizi, Nginx sanal konakları, veritabanlarını ve e-posta hesaplarını yönetmek için grafik bir arayüz tercih ediyorsanız, bir kontrol paneli dağıtmayı düşünün. AlexHost, sunucu yönetimini basitleştirmek için cPanel VPS ve performans veya kontrolü feda etmeden bir dizi başka VPS Kontrol Panelleri sunmaktadır.
9. Sonuç
Ubuntu sunucunuzda başarıyla bir LEMP stack (Linux, Nginx, MySQL, PHP) yüklediniz ve yapılandırdınız. İşte başardığınız şeylerin hızlı bir özeti:
- ✅ Nginx yüklenmiş, başlatılmış ve web sunucunuz olarak yapılandırılmış
- ✅ MySQL yüklenmiş ve sertleştirme betiği ile güvenli hale getirilmiş
- ✅ PHP-FPM güvenlik odaklı yapılandırma ile yüklenmiş
- ✅ Nginx server block PHP isteklerini PHP-FPM’e yönlendirmek için yapılandırılmış
- ✅ PHP işleme
phpinfo()test sayfası aracılığıyla doğrulanmış
Bu stack, WordPress ve Laravel’den özel olarak oluşturulmuş platformlara kadar hemen hemen her PHP tabanlı uygulamayı barındırmak için üretime hazır bir temel sağlar. Nginx’in olay odaklı mimarisi ve PHP-FPM’in süreç yönetiminin kombinasyonu, özellikle yüksek eşzamanlılık iş yükleri için çok uygundur.
En iyi performans ve güvenilirlik için LEMP stack’inizi amaçlı bir Linux ortamında barındırın. AlexHost’un VPS Hosting planları SSD destekli depolama, garantili RAM, tam root erişimi ve 24/7 teknik destek sunmaktadır — hızlı, güvenli ve ölçeklenebilir bir web uygulaması çalıştırmak için ihtiyacınız olan her şey.
Tüm bileşenleri düzenli olarak güncellenmiş tutmayı, sunucu günlüklerini izlemeyi ve devam eden güvenlik duruşunuzun bir parçası olarak bir güvenlik duvarı ve izinsiz giriş algılama sistemi uygulamayı unutmayın.
tasarruf edin