Neden Sanal Sunucuda LEMP Kurulumu?
Ubuntu veya Debian işletim sistemiyle yeni bir sanal sunucu (VPS) aldıysanız, muhtemelen web sitenizi çalıştırmak için ilk adım bir web yazılım yığını kurmaktır. LAMP (Linux, Apache, MySQL, PHP) yıllarca standart olsa da, günümüzde LEMP kurulumu (Linux, Nginx, MySQL, PHP-FPM), Nginx'in eşzamanlı bağlantı yönetimindeki üstün performansı ve daha düşük kaynak tüketimi nedeniyle sınırlı kaynaklara sahip sanal sunucular için daha akıllıca bir seçimdir.
Bu rehberde, Ubuntu 22.04 LTS ve root erişimi veya sudo yetkisine sahip bir kullanıcıya sahip olduğunuzu varsayıyoruz. Tüm komutları sırayla çalıştırabilir ve sonunda PHP ve MySQL desteğiyle tamamen işlevsel bir web sunucusuna sahip olursunuz.
Ön Koşullar ve İlk Hazırlık
LEMP kurulumuna başlamadan önce işletim sisteminin güncel olduğundan ve temel araçların kurulu olduğundan emin olun:
sudo apt update
sudo apt upgrade -y
sudo apt install -y curl wget git unzip
Ayrıca 80 ve 443 numaralı portların açık olduğunu kontrol edin. UFW güvenlik duvarı kullanıyorsanız aşağıdaki komutları çalıştırın:
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
Önemli Not: Sunucuya SSH ile bağlıysanız, güvenlik duvarını etkinleştirmeden önce mutlaka OpenSSH kuralını ekleyin; aksi takdirde bağlantınızı kaybedersiniz.
Adım 1: Nginx Kurulumu
Nginx, LEMP yığınında ana web sunucusu olarak görev yapar. Kurulumu basittir:
sudo apt install -y nginx
Kurulumdan sonra servisi etkinleştirin ve başlatın:
sudo systemctl enable nginx
sudo systemctl start nginx
Doğru çalıştığından emin olmak için tarayıcınıza sunucunuzun IP adresini girin. Nginx'in varsayılan sayfasını görmelisiniz. Sayfa görüntülenmezse servis durumunu kontrol edin:
sudo systemctl status nginx
Hata varsa, logları /var/log/nginx/error.log konumunda inceleyin.
Nginx Temel Güvenlik Ayarları
Güvenliği artırmak için ana yapılandırma dosyasını düzenleyin:
sudo nano /etc/nginx/nginx.conf
http bölümünde aşağıdaki satırları ekleyin veya düzenleyin:
server_tokens off;
client_max_body_size 10M;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
Bu ayarlar Nginx sürüm bilgisini gizler, yükleme boyutunu sınırlar ve önemli güvenlik başlıkları ekler. Değişiklikleri uyguladıktan sonra yapılandırmayı test edin ve servisi yeniden başlatın:
sudo nginx -t
sudo systemctl reload nginx
Adım 2: MySQL Kurulumu
Bu rehberde veritabanı yönetim sistemi olarak MySQL kullanıyoruz. Kurulum:
sudo apt install -y mysql-server
Kurulumdan sonra güvenlik scriptini çalıştırın:
sudo mysql_secure_installation
Bu script birkaç soru sorar: VALIDATE PASSWORD PLUGIN ayarı (seçenek 2'yi seçmeniz önerilir), root şifresini değiştirme, anonim kullanıcıları silme, uzaktan root girişini devre dışı bırakma ve test veritabanlarını silme. Tüm sorulara "Y" yanıtını verin.
Özel Veritabanı Kullanıcısı Oluşturma
Web uygulamaları için root kullanıcısı yerine özel bir kullanıcı oluşturun:
sudo mysql
Ardından MySQL ortamında:
CREATE USER 'wordpress'@'localhost' IDENTIFIED BY 'YourStrongPassword!';
CREATE DATABASE wordpress_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wordpress'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Yaygın Hata: mysql_secure_installation çalıştırırken "Access denied for user root" hatası alırsanız, bunun nedeni yeni MySQL sürümlerinde root kullanıcısının varsayılan olarak auth_socket kimlik doğrulamasıyla çalışmasıdır. Bu sorunu çözmek için önce sudo mysql ile giriş yapın ve ardından:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NewRootPassword';
FLUSH PRIVILEGES;
EXIT;
Adım 3: PHP-FPM Kurulumu
PHP-FPM (FastCGI Process Manager) PHP kodlarının işlenmesinden sorumludur ve Nginx ile iyi çalışır. PHP ve yaygın eklentileri kurmak için:
sudo apt install -y php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip php-intl
Kurulumdan sonra PHP-FPM servisini etkinleştirin:
sudo systemctl enable php8.1-fpm
sudo systemctl start php8.1-fpm
PHP sürümünün işletim sisteminizin depolarına bağlı olarak değişebileceğini unutmayın (örneğin Ubuntu 22.04'te php8.1-fpm). Kesin sürümü şu komutla bulun:
php -v
PHP-FPM Güvenlik Yapılandırması
Ana yapılandırma dosyasını düzenleyin:
sudo nano /etc/php/8.1/fpm/php.ini
Aşağıdaki değerleri bulun ve değiştirin:
upload_max_filesize = 20M
post_max_size = 20M
max_execution_time = 60
memory_limit = 128M
expose_php = Off
expose_php = Off ayarı, PHP sürüm bilgisini HTTP başlıklarından kaldırır. Değişiklikleri uyguladıktan sonra servisi yeniden başlatın:
sudo systemctl restart php8.1-fpm
Adım 4: PHP ile Çalışması için Nginx Yapılandırması
Şimdi web siteniz için bir sunucu bloğu (Server Block) oluşturmalıyız. Önce klasör yapısını oluşturun:
sudo mkdir -p /var/www/example.com/html
sudo chown -R $USER:$USER /var/www/example.com/html
sudo chmod -R 755 /var/www/example.com
Ardından bir test PHP dosyası oluşturun:
echo "<?php phpinfo(); ?>" | sudo tee /var/www/example.com/html/index.php
Şimdi Nginx yapılandırma dosyasını oluşturun:
sudo nano /etc/nginx/sites-available/example.com
Aşağıdaki içeriği girin:
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/example.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.1-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}
Bu yapılandırma, PHP isteklerini PHP-FPM soketine yönlendirir ve .htaccess gibi gizli dosyalara erişimi engeller.
Şimdi sunucu bloğunu etkinleştirin:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Yaygın Hata: PHP Dosyası Çalışmak Yerine İndiriliyor
Tarayıcıda PHP dosyasını açtığınızda indirme başlıyorsa, Nginx isteği PHP-FPM'ye gönderemiyor demektir. Olası nedenler:
- Yapılandırmadaki soket yolu yanlış. Doğru yolu
sudo ls /var/run/php/ile kontrol edin. - PHP-FPM servisi çalışmıyor.
sudo systemctl status php8.1-fpmile durumu kontrol edin. .phpdosya uzantısılocationbloğunda tanımlanmamış.
Adım 5: Let's Encrypt ile SSL Etkinleştirme
Daha fazla güvenlik ve Google'da daha iyi sıralama için mutlaka SSL'i etkinleştirin. Önce Certbot'u kurun:
sudo apt install -y certbot python3-certbot-nginx
Ardından sertifikayı alın:
sudo certbot --nginx -d example.com -d www.example.com
Certbot, Nginx yapılandırmasını otomatik olarak değiştirir ve HTTP'den HTTPS'ye yönlendirmeyi etkinleştirir. Sertifikanın otomatik yenilendiğinden emin olmak için:
sudo certbot renew --dry-run
Not: Alan adınız henüz sunucuya bağlı değilse (DNS ayarlanmamışsa), önce alan adı yönetim panelinize A kayıtlarını ekleyin; aksi takdirde sertifika alma işlemi hatayla karşılaşır.
Adım 6: Son Test ve Optimizasyon
LEMP kurulumunu tamamladıktan sonra test PHP dosyasını silin:
sudo rm /var/www/example.com/html/index.php
Performansı test etmek için ab (Apache Bench) aracını kullanabilirsiniz:
sudo apt install -y apache2-utils
ab -n 1000 -c 100 https://example.com/
Bu komut 1000 eşzamanlı istek gönderir ve yanıt istatistiklerini gösterir. Rakamlar tatmin edici değilse, /etc/nginx/nginx.conf dosyasında aşağıdaki ayarları uygulayın:
worker_processes auto;
worker_connections 1024;
keepalive_timeout 65;
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
Özet
Bu rehberde, LEMP kurulumunun sanal sunucuda güvenlik ve performans odaklı tüm adımlarını tamamladınız. Artık PHP-FPM ve MySQL desteğiyle dinamik web sitelerini, WordPress'i veya özel uygulamaları barındırabilen bir Nginx web sunucunuz var. Projelerinizi barındırmak için istikrarlı bir platform arıyorsanız, özel kaynaklara ve teknik desteğe sahip sanal sunucular iyi bir seçim olabilir; ancak en önemli nokta, kurulu yazılımların düzenli bakımı ve sürekli güncellenmesidir.
Daha fazla öğrenmek için Nginx ve MySQL resmi belgelerini incelemenizi öneririm ve güvenlik duvarı ayarlarını ve düzenli yedeklemeyi unutmayın. Herhangi bir adımda hatayla karşılaşırsanız, /var/log/nginx/ ve /var/log/mysql/ konumlarındaki logları kontrol edin; genellikle çözüm orada bulunur.