Debian 8 Üzerine LEMP Stack (Linux, Nginx, MySQL, PHP) Kurulumu: Kapsamlı Bir Rehber
Debian 8 (Jessie), sunucu ortamları için kararlılığı ve güvenilirliği ile bilinen popüler bir işletim sistemidir. Web uygulamalarını barındırmak için güçlü ve verimli bir yapılandırma arayanlar için LEMP (Linux, Nginx, MySQL, PHP) stack’i ideal bir çözümdür. LEMP, geleneksel LAMP (Linux, Apache, MySQL, PHP) stack’ine modern ve yüksek performanslı bir alternatif sunar. Bu kapsamlı rehberde, Debian 8 sunucunuz üzerine LEMP stack’ini adım adım nasıl kuracağınızı, yapılandıracağınızı ve optimize edeceğinizi öğreneceksiniz.
LEMP stack’i, web sunucusu olarak Nginx’i kullanır. Nginx, eşzamanlı bağlantıları yüksek verimlilikle işleme yeteneği, düşük kaynak tüketimi ve statik içerik sunumundaki üstün performansı ile öne çıkar. Veritabanı yönetim sistemi olarak MySQL (veya genellikle Debian’da varsayılan olarak gelen MariaDB) kullanılırken, dinamik içerik işleme PHP-FPM (FastCGI Process Manager) aracılığıyla gerçekleştirilir. Bu bileşenlerin birleşimi, hızlı, ölçeklenebilir ve güvenli web uygulamaları için sağlam bir temel oluşturur.
Bu rehber, Debian 8 sunucunuzda temel Linux komutlarına aşina olduğunuzu varsaymaktadır. Tüm adımlar, root kullanıcısı olarak veya sudo yetkilerine sahip bir kullanıcı ile gerçekleştirilecektir.
Ön Gereksinimler
Debian 8 sunucunuzda LEMP stack kurulumuna başlamadan önce aşağıdaki ön gereksinimleri karşıladığınızdan emin olun:
* Debian 8 (Jessie) Sunucusu: Temiz bir Debian 8 kurulumuna sahip bir sanal özel sunucu (VPS) veya fiziksel sunucu.
* Root Erişimi veya Sudo Yetkileri: Kurulum komutlarını çalıştırmak için root kullanıcısı olarak oturum açmış olmanız veya sudo grubuna dahil edilmiş bir kullanıcı hesabınızın olması gerekmektedir.
* İnternet Bağlantısı: Sunucuya paket indirmek için aktif bir internet bağlantısı zorunludur.
* Temel Linux Bilgisi: Komut satırı arayüzünde (CLI) gezinme ve temel komutları kullanma becerisi.
Kuruluma başlamadan önce sunucunuzun paket listesini güncelleyerek ve mevcut paketleri yükselterek en iyi başlangıcı yapmanızı öneririz. Bu, olası bağımlılık sorunlarını önleyecektir.
Sistem Güncelleme ve Temel Bileşenlerin Kurulumu
LEMP kurulumuna başlamadan önce, Debian 8 sunucunuzun paket listesini güncelleyerek ve tüm yüklü paketleri en son sürümlerine yükselterek sisteminizi hazır hale getirmelisiniz. Bu adım, güvenlik açıklarını kapatmaya ve kararlılığı artırmaya yardımcı olur.
Sistem Güncellemesi
İlk olarak, sunucunuzdaki paket listesini güncelleyin:
sudo apt-get update
Ardından, mevcut yüklü paketleri yükseltin:
sudo apt-get upgrade
Bu işlem biraz zaman alabilir. Yükseltme sırasında herhangi bir soru sorulursa, genellikle varsayılan seçeneği (Y veya Evet) kabul edebilirsiniz. Tüm yükseltmeler tamamlandıktan sonra, bazı durumlarda çekirdek veya sistem bağımlılıklarında önemli değişiklikler olabileceğinden, dağıtım yükseltmesi yapmak da faydalı olabilir:
sudo apt-get dist-upgrade
Bu komut, yeni bağımlılıkları yükler ve eski, gereksiz bağımlılıkları kaldırır.
Temel Yardımcı Programların Kurulumu
LEMP stack’inin kurulumu ve yönetimi sırasında ihtiyaç duyabileceğiniz bazı yaygın yardımcı programları yüklemek iyi bir uygulamadır. Bu programlar arasında sudo (eğer root kullanıcısı değilseniz), curl, wget ve git gibi araçlar bulunur:
sudo apt-get install sudo curl wget git unzip -y
Bu adımları tamamladığınızda, Debian 8 sunucunuz LEMP stack’ini kurmaya hazır hale gelecektir.
Nginx Web Sunucusunun Kurulumu
Nginx (engine-x olarak okunur) yüksek performanslı, hafif ve güçlü bir web sunucusudur. Özellikle yüksek trafikli siteler ve eşzamanlı bağlantılar için optimize edilmiştir. Apache’ye kıyasla daha az bellek kullanır ve statik içerik sunumunda daha hızlıdır.
Nginx Nedir?
Nginx, asenkron, olay tabanlı bir mimariye sahip, ters proxy, yük dengeleyici ve HTTP önbelleği olarak da işlev görebilen bir web sunucusudur. Modüler yapısı ve esnek konfigürasyon seçenekleri sayesinde modern web uygulamalarının ihtiyaçlarını karşılamak için idealdir. LEMP stack’inin “E” harfini temsil eder ve PHP-FPM ile birlikte çalışarak dinamik içeriği etkin bir şekilde sunar.
Nginx Kurulumu
Nginx’i Debian 8 sunucunuza kurmak oldukça basittir. Debian’ın resmi depolarında Nginx paketi bulunur.
sudo apt-get install nginx -y
Kurulum tamamlandığında, Nginx servisi otomatik olarak başlayacaktır.
Nginx Servisini Başlatma ve Kontrol Etme
Nginx servisinin düzgün çalışıp çalışmadığını kontrol etmek ve sistem başlangıcında otomatik olarak başlamasını sağlamak önemlidir.
Nginx servisini başlatmak için (eğer otomatik başlamadıysa):
sudo systemctl start nginx
Sistemin yeniden başlatılması durumunda Nginx’in otomatik olarak başlamasını sağlamak için:
sudo systemctl enable nginx
Nginx servisinin durumunu kontrol etmek için:
sudo systemctl status nginx
Çıktıda Active: active (running) ifadesini görmeniz, Nginx’in başarılı bir şekilde çalıştığını gösterir.
Nginx’in doğru bir şekilde çalıştığını doğrulamak için, web tarayıcınızdan sunucunuzun IP adresini ziyaret edebilirsiniz. Eğer her şey yolundaysa, “Welcome to nginx!” yazan varsayılan Nginx karşılama sayfasını görmelisiniz.
Nginx Temel Konfigürasyonu
Nginx’in ana konfigürasyon dosyası /etc/nginx/nginx.conf adresinde bulunur. Ancak, her site için ayrı konfigürasyon dosyaları oluşturmak ve bunları sites-available ile sites-enabled dizinleri aracılığıyla yönetmek daha yaygın ve düzenli bir yaklaşımdır.
* /etc/nginx/sites-available/: Bu dizin, sunucunuzda yapılandırdığınız tüm web sitelerinin konfigürasyon dosyalarını içerir.
* /etc/nginx/sites-enabled/: Bu dizin, aktif olan web sitelerinin konfigürasyon dosyalarına sembolik bağlantılar (symlink) içerir. Nginx yalnızca bu dizindeki dosyaları yükler.
Varsayılan olarak, /etc/nginx/sites-available/default adında bir varsayılan konfigürasyon dosyası bulunur. Bu dosyayı düzenleyebilir veya kendi alan adınız için yeni bir dosya oluşturabilirsiniz. Kendi alan adınız için bir sanal host (server block) oluşturalım. Örneğin, example.com için:
sudo nano /etc/nginx/sites-available/example.com
Dosyanın içine aşağıdaki temel konfigürasyonu yapıştırın:
server {
listen 80;
listen [::]:80;
root /var/www/example.com/html;
index index.php index.html index.htm;
server_name example.com www.example.com;
location / {
try_files $uri $uri/ =404;
}
# PHP-FPM entegrasyonu daha sonra eklenecek
# location ~ \.php$ {
# include snippets/fastcgi-php.conf;
# fastcgi_pass unix:/var/run/php5-fpm.sock;
# }
# Hata sayfaları
error_page 404 /404.html;
location = /404.html {
internal;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
internal;
}
}
Bu konfigürasyonda:
* listen 80;: Nginx’in 80 numaralı porttan gelen HTTP isteklerini dinlemesini sağlar.
* root /var/www/example.com/html;: Web sitenizin kök dizinini belirtir. Bu dizini oluşturmanız gerekecek.
* index index.php index.html index.htm;: Dizin istendiğinde Nginx’in hangi dosyaları arayacağını belirtir.
* server_name example.com www.example.com;: Bu sanal host’un hangi alan adları için geçerli olduğunu belirtir.
* location / { try_files $uri $uri/ =404; }: Gelen isteklerin nasıl işleneceğini belirler. Önce dosya, sonra dizin olarak arar, bulunamazsa 404 hatası döndürür.
Şimdi web sitenizin kök dizinini oluşturalım:
sudo mkdir -p /var/www/example.com/html
sudo chown -R www-data:www-data /var/www/example.com/html
sudo chmod -R 755 /var/www/example.com/html
Test amaçlı olarak bu dizine basit bir index.html dosyası oluşturabilirsiniz:
echo "" | sudo tee /var/www/example.com/html/index.html
Yeni sanal host dosyasını etkinleştirmek için, sites-enabled dizinine bir sembolik bağlantı oluşturun ve varsayılan konfigürasyonu devre dışı bırakın (isteğe bağlı, ama genellikle daha temiz bir yaklaşımdır):
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default
Nginx konfigürasyonunuzda sözdizimi hatası olup olmadığını kontrol edin:
sudo nginx -t
Eğer test is successful mesajını görürseniz, konfigürasyonunuz doğru demektir. Son olarak, Nginx’i yeni konfigürasyonu yüklemesi için yeniden başlatın:
sudo systemctl restart nginx
Artık example.com (veya sunucunuzun IP adresi) üzerinden web sitenize eriştiğinizde, oluşturduğunuz index.html dosyasının içeriğini görmelisiniz.
MySQL (MariaDB) Veritabanı Sunucusunun Kurulumu
MySQL, dünyanın en popüler açık kaynaklı ilişkisel veritabanı yönetim sistemidir. Web uygulamaları için veri depolama ve yönetimi konusunda endüstri standardı haline gelmiştir. Debian 8’de, MySQL’in topluluk tarafından geliştirilen bir çatalı olan MariaDB, varsayılan veritabanı sunucusu olarak gelir. MariaDB, MySQL ile yüksek uyumluluğa sahiptir ve genellikle daha iyi performans ve ek özellikler sunar.
MySQL/MariaDB Nedir?
MariaDB, MySQL ile aynı komutları, arayüzleri ve protokolleri kullanan, tamamen uyumlu bir veritabanı sunucusudur. Çoğu durumda, MySQL ile çalışan bir uygulama, MariaDB ile de sorunsuz bir şekilde çalışacaktır. Verilerin yapılandırılmış bir şekilde saklanmasını, sorgulanmasını ve yönetilmesini sağlar. Web uygulamalarında kullanıcı bilgileri, içerik, ayarlar ve diğer dinamik veriler genellikle bir veritabanında tutulur.
MariaDB Kurulumu
MariaDB’yi Debian 8 sunucunuza kurmak için aşağıdaki komutu kullanın:
sudo apt-get install mariadb-server mariadb-client -y
Bu komut, MariaDB sunucu paketini ve istemci araçlarını yükleyecektir. Kurulum sırasında sizden bir root şifresi belirlemeniz istenebilir. Eğer istenmezse, kurulum sonrası güvenlik betiği aracılığıyla belirleyebilirsiniz.
MariaDB Güvenlik Yapılandırması
MariaDB kurulumundan hemen sonra, veritabanı sunucunuzun güvenliğini sağlamak için mysql_secure_installation betiğini çalıştırmanız önemlidir. Bu betik, varsayılan güvenlik açıklarını kapatmaya yardımcı olur.
sudo mysql_secure_installation
Betik size bir dizi soru soracaktır:
1. Enter current password for root (enter for none): Eğer kurulum sırasında bir şifre belirlemediyseniz, doğrudan Enter tuşuna basın. Belirlediyseniz, o şifreyi girin.
2. Set root password? [Y/n]: Y tuşuna basarak root kullanıcısı için güçlü bir şifre belirleyin. Bu şifreyi unutmayın, çünkü veritabanı yönetimi için gereklidir.
3. Remove anonymous users? [Y/n]: Y tuşuna basarak anonim kullanıcıları kaldırın. Bu, veritabanınıza yetkisiz erişimi engeller.
4. Disallow root login remotely? [Y/n]: Y tuşuna basarak root kullanıcısının uzaktan bağlanmasını engelleyin. Bu, güvenlik için kritik öneme sahiptir. Veritabanına uzaktan erişim gerektiğinde, bunun için özel bir kullanıcı oluşturmanız önerilir.
5. Remove test database and access to it? [Y/n]: Y tuşuna basarak varsayılan “test” veritabanını kaldırın. Bu veritabanı, test amaçlıdır ve üretim ortamında güvenlik riski oluşturabilir.
6. Reload privilege tables now? [Y/n]: Y tuşuna basarak ayrıcalık tablolarını yeniden yükleyin. Bu, yaptığınız tüm değişikliklerin hemen uygulanmasını sağlar.
Bu adımları tamamladığınızda, MariaDB veritabanı sunucunuz daha güvenli bir yapılandırmaya sahip olacaktır.
MariaDB Servisini Kontrol Etme
MariaDB servisinin düzgün çalışıp çalışmadığını kontrol etmek ve sistem başlangıcında otomatik olarak başlamasını sağlamak önemlidir.
MariaDB servisini başlatmak için (eğer otomatik başlamadıysa):
sudo systemctl start mariadb
Sistemin yeniden başlatılması durumunda MariaDB’nin otomatik olarak başlamasını sağlamak için:
sudo systemctl enable mariadb
MariaDB servisinin durumunu kontrol etmek için:
sudo systemctl status mariadb
Çıktıda Active: active (running) ifadesini görmeniz, MariaDB’nin başarılı bir şekilde çalıştığını gösterir.
MariaDB’ye root kullanıcısı olarak bağlanarak kurulumu test edebilirsiniz:
mysql -u root -p
İstendiğinde, mysql_secure_installation betiğinde belirlediğiniz root şifresini girin. Başarılı bir şekilde bağlanırsanız, MySQL komut istemini göreceksiniz. Çıkmak için exit; yazıp Enter tuşuna basın.
PHP ve PHP-FPM Kurulumu
PHP (Hypertext Preprocessor), web geliştirme için özel olarak tasarlanmış, sunucu taraflı bir betik dilidir. Dinamik web siteleri ve web uygulamaları oluşturmak için yaygın olarak kullanılır. Nginx ile PHP’yi kullanmak için PHP-FPM (FastCGI Process Manager) gereklidir. PHP-FPM, PHP yorumlayıcısını yöneten ve Nginx ile iletişim kurmasını sağlayan bir FastCGI uygulamasıdır.
PHP Nedir?
PHP, HTML içine gömülebilen veya bir betik dosyası olarak çalıştırılabilen açık kaynaklı bir betik dilidir. Veritabanlarıyla etkileşime geçebilir, sunucu tarafında form verilerini işleyebilir, oturumları yönetebilir ve dinamik içerik oluşturabilir. PHP-FPM ise, PHP betiklerinin Nginx gibi web sunucuları tarafından nasıl işlendiğini yöneten gelişmiş bir FastCGI yöneticisidir. Her bir PHP isteği için ayrı bir işlem (process) havuzu oluşturarak performans ve kararlılık sağlar.
PHP-FPM ve Gerekli Modüllerin Kurulumu
Debian 8, PHP 5.x sürümünü kullanır. PHP-FPM’yi ve temel PHP modüllerini kurmak için aşağıdaki komutu kullanın:
sudo apt-get install php5-fpm php5-mysql php5-cli -y
* php5-fpm: Nginx ile PHP etkileşimi için FastCGI işlem yöneticisi.
* php5-mysql: PHP’nin MySQL/MariaDB veritabanlarıyla iletişim kurmasını sağlayan modül.
* php5-cli: Komut satırından PHP betiklerini çalıştırmak için PHP yorumlayıcısı.
Web uygulamalarınızın ihtiyaç duyabileceği diğer yaygın PHP modüllerini de kurmanız önerilir. İşte bazı örnekler:
sudo apt-get install php5-curl php5-gd php5-mcrypt php5-mbstring php5-xmlrpc php5-soap php5-intl php5-json -y
* php5-curl: HTTP istekleri yapmak için cURL kütüphanesini kullanır.
* php5-gd: Görüntü işleme (thumbnail oluşturma, boyutlandırma vb.) için GD kütüphanesini kullanır.
* php5-mcrypt: Şifreleme işlevleri sağlar (bazı eski uygulamalar için gerekli olabilir).
* php5-mbstring: Çok baytlı karakter dizileriyle çalışmak için.
* php5-xmlrpc: XML-RPC işlevselliği sağlar.
* php5-soap: SOAP servisleriyle iletişim kurmak için.
* php5-intl: Uluslararasılaştırma (internationalization) işlevleri için.
* php5-json: JSON verilerini işlemek için.
Uygulamanızın gereksinimlerine göre bu listeyi genişletebilirsiniz.
PHP-FPM Konfigürasyonu
PHP-FPM’nin ana konfigürasyon dosyası /etc/php5/fpm/php.ini adresinde bulunur. Nginx ile düzgün çalışması ve güvenlik için bu dosyada bazı ayarları yapmanız önemlidir.
sudo nano /etc/php5/fpm/php.ini
Aşağıdaki satırı bulun ve değerini 0 olarak ayarlayın. Bu ayar, PHP’nin Nginx ile birlikte kullanıldığında güvenlik açığı oluşturmasını engeller:
;cgi.fix_pathinfo=1
Değiştirilmesi gereken satır:
cgi.fix_pathinfo=0
Noktalı virgülü kaldırarak ve değeri 0 yaparak bu değişikliği kaydedin.
Ayrıca, uygulamanızın ihtiyaçlarına göre aşağıdaki gibi diğer ayarları da düzenleyebilirsiniz:
* upload_max_filesize: Yüklenebilecek maksimum dosya boyutu.
* post_max_size: POST isteklerinin maksimum boyutu.
* memory_limit: Bir PHP betiğinin kullanabileceği maksimum bellek miktarı.
* max_execution_time: Bir PHP betiğinin çalışmasına izin verilen maksimum süre.
Örneğin, daha büyük dosyaların yüklenmesine izin vermek için:
upload_max_filesize = 64M
post_max_size = 64M
PHP-FPM, varsayılan olarak /etc/php5/fpm/pool.d/www.conf dosyasında tanımlanan bir www havuzu kullanır. Bu havuz, Nginx’in PHP-FPM ile nasıl iletişim kuracağını belirler. Genellikle, Unix soketi üzerinden iletişim kurulur. Bu dosyayı kontrol etmeniz gerekebilir:
sudo nano /etc/php5/fpm/pool.d/www.conf
listen yönergesinin aşağıdaki gibi ayarlandığından emin olun (bu, varsayılan ayar olmalıdır):
listen = /var/run/php5-fpm.sock
Eğer bu satırın başında noktalı virgül varsa kaldırın. Alternatif olarak, listen = 127.0.0.1:9000 şeklinde bir TCP portu da kullanabilirsiniz, ancak Unix soketleri genellikle yerel iletişim için daha hızlı ve güvenlidir.
PHP-FPM Servisini Başlatma ve Kontrol Etme
PHP-FPM servisini başlatın ve sistem başlangıcında otomatik olarak başlamasını sağlayın:
sudo systemctl start php5-fpm
sudo systemctl enable php5-fpm
PHP-FPM servisinin durumunu kontrol edin:
sudo systemctl status php5-fpm
Active: active (running) çıktısını görmeniz gerekmektedir.
Nginx’i PHP-FPM ile Entegre Etme
PHP-FPM kurulduktan ve yapılandırıldıktan sonra, Nginx’in PHP betiklerini işlemek için PHP-FPM’ye istekleri nasıl ileteceğini belirtmeniz gerekir. Bu, daha önce oluşturduğumuz Nginx sanal host konfigürasyon dosyasında yapılır.
Nginx Sanal Host Dosyasını Güncelleme
Daha önce oluşturduğunuz /etc/nginx/sites-available/example.com dosyasını tekrar açın:
sudo nano /etc/nginx/sites-available/example.com
Dosyada, PHP dosyalarını işlemek için yorum satırı olarak bıraktığımız location ~ \.php$ bloğunu bulun ve aşağıdaki gibi güncelleyin:
server {
listen 80;
listen [::]:80;
root /var/www/example.com/html;
index index.php index.html index.htm;
server_name example.com www.example.com;
location / {
try_files $uri $uri/ =404;
}
# PHP-FPM entegrasyonu
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php5-fpm.sock; # PHP-FPM'nin dinlediği soket veya port
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# Hata sayfaları
error_page 404 /404.html;
location = /404.html {
internal;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
internal;
}
}
Bu location ~ \.php$ bloğu:
* location ~ \.php$: URL’nin .php ile biten tüm istekleri yakalar.
* include snippets/fastcgi-php.conf;: PHP-FPM ile FastCGI bağlantısı için gerekli bazı genel ayarları içerir. Debian 8’de bu dosya genellikle mevcuttur.
* fastcgi_pass unix:/var/run/php5-fpm.sock;: İstekleri PHP-FPM’nin dinlediği Unix soketine iletir. Eğer PHP-FPM’yi bir TCP portunda (örneğin 127.0.0.1:9000) dinleyecek şekilde yapılandırdıysanız, bu satırı buna göre değiştirmelisiniz.
* fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;: PHP-FPM’ye çalıştırılması gereken betiğin tam yolunu bildirir.
* include fastcgi_params;: FastCGI protokolü için gerekli diğer parametreleri içerir.
index yönergesinde index.php‘nin index.html‘den önce geldiğinden emin olun, böylece bir dizine erişildiğinde PHP dosyaları öncelikli olarak işlenir.
Nginx Konfigürasyonunu Test Etme ve Yeniden Yükleme
Değişiklikleri kaydettikten sonra, Nginx konfigürasyonunuzda sözdizimi hatası olup olmadığını tekrar kontrol edin:
sudo nginx -t
Eğer test is successful mesajını alırsanız, Nginx’i yeni konfigürasyonu yüklemesi için yeniden başlatın:
sudo systemctl restart nginx
Bu adımla birlikte Nginx, PHP-FPM ile entegre edilmiş ve PHP betiklerini işleyebilecek duruma gelmiştir.
PHP İşlevselliğini Test Etme
LEMP stack’inin tüm bileşenleri kurulup yapılandırıldığına göre, PHP’nin Nginx aracılığıyla düzgün çalıştığını doğrulamak için basit bir PHP dosyası oluşturabiliriz.
Test PHP Dosyası Oluşturma
Web sitenizin kök dizinine (/var/www/example.com/html/) info.php adında bir dosya oluşturalım:
sudo nano /var/www/example.com/html/info.php
Dosyanın içine aşağıdaki PHP kodunu yapıştırın:
Bu kod, PHP’nin tüm konfigürasyon bilgilerini ve yüklü modüllerini gösteren bir sayfa oluşturacaktır.
Tarayıcıdan Erişim
Web tarayıcınızı açın ve sunucunuzun IP adresini veya alan adınızı takip eden /info.php yolunu ziyaret edin:
http://your_server_ip/info.php veya http://your_domain/info.php
Eğer her şey doğru yapılandırıldıysa, PHP’nin detaylı konfigürasyon bilgilerini içeren bir sayfa görmelisiniz. Bu sayfa, PHP’nin Nginx tarafından başarıyla işlendiğini gösterir. Sayfada Nginx ve FPM ile ilgili bölümleri de görebilirsiniz.
Güvenlik Notu
phpinfo() sayfası, sunucunuz hakkında çok fazla hassas bilgi içerir. Testi tamamladıktan sonra, bu dosyayı hemen silmeniz kesinlikle önerilir.
sudo rm /var/www/example.com/html/info.php
Bu, potansiyel güvenlik açıklarını önleyecektir.
Ek Güvenlik ve Optimizasyon Önerileri
LEMP stack’iniz artık çalışır durumda. Ancak, üretim ortamında kullanmadan önce güvenlik ve performans iyileştirmeleri yapmak önemlidir.
Güvenlik Duvarı Yapılandırması
Sunucunuzu dışarıdan gelebilecek yetkisiz erişimlere karşı korumak için bir güvenlik duvarı yapılandırmak kritik öneme sahiptir. Debian 8’de iptables varsayılan olarak bulunur, ancak kullanımı biraz karmaşık olabilir. Daha basit bir alternatif olarak UFW (Uncomplicated Firewall) kullanabilirsiniz. Eğer UFW yüklü değilse:
sudo apt-get install ufw -y
Ardından, gerekli portları açın (SSH için 22, HTTP için 80, HTTPS için 443):
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx HTTP'
sudo ufw allow 'Nginx HTTPS' # Eğer SSL kuracaksanız
sudo ufw enable
sudo ufw status
Bu komutlar, yalnızca belirtilen portlardan gelen bağlantılara izin verir ve diğer tüm bağlantıları engeller.
SSL/TLS Kurulumu (Let’s Encrypt)
Web sitenizin güvenliğini artırmak ve SEO sıralamanızı iyileştirmek için HTTPS kullanmak şarttır. Let’s Encrypt, ücretsiz SSL/TLS sertifikaları sağlayan popüler bir servistir. Certbot aracı ile Nginx için kolayca sertifika alabilir ve otomatik yenileme ayarlayabilirsiniz.
sudo apt-get install certbot python-certbot-nginx -t jessie-backports -y
Daha sonra sertifika almak için:
sudo certbot --nginx -d example.com -d www.example.com
Certbot, Nginx konfigürasyonunuzu otomatik olarak güncelleyecek ve sertifikayı ayarlayacaktır.
MySQL Güvenliği
* Güçlü Şifreler: Veritabanı kullanıcıları için her zaman güçlü ve karmaşık şifreler kullanın.
* Ayrıcalıklı Kullanıcılar: Her uygulama veya web sitesi için root kullanıcısı yerine ayrı, minimum ayrıcalıklara sahip veritabanı kullanıcıları oluşturun.
* Uzak Erişim: mysql_secure_installation betiği ile root kullanıcısının uzaktan erişimini zaten engelledik. Diğer kullanıcılar için de uzaktan erişimi yalnızca ihtiyaç duyulduğunda ve güvenli IP adreslerinden kısıtlayın.
PHP Optimizasyonu
* OPcache: PHP betiklerinin derlenmiş hallerini bellekte önbelleğe alarak performansı önemli ölçüde artıran OPcache modülünü etkinleştirin. Debian 8’de php5-opcache olarak bulunur:
sudo apt-get install php5-opcache -y
sudo systemctl restart php5-fpm
php.ini dosyasında (genellikle /etc/php5/fpm/php.ini) opcache.enable=1 olduğundan emin olun.
* PHP-FPM Havuz Ayarları: /etc/php5/fpm/pool.d/www.conf dosyasındaki pm (process manager) ayarlarını sunucunuzun kaynaklarına göre optimize edin. pm = dynamic veya pm = ondemand kullanmak, bellek kullanımını dengelemeye yardımcı olabilir. pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers gibi değerleri sunucunuzun RAM miktarına ve beklenen trafik yüküne göre ayarlayın.
Nginx Optimizasyonu
* Worker Processes ve Connections: /etc/nginx/nginx.conf dosyasındaki worker_processes (genellikle CPU çekirdek sayınıza eşit veya 2 katı) ve worker_connections (genellikle 1024 veya daha yüksek) ayarlarını sunucunuzun donanımına ve trafik beklentisine göre ayarlayın.
* Gzip Sıkıştırma: Nginx’in gzip modülünü etkinleştirerek web sayfalarının ve diğer metin tabanlı dosyaların sıkıştırılmasını sağlayın. Bu, bant genişliği kullanımını azaltır ve yükleme sürelerini hızlandırır. nginx.conf içinde gzip on; ve ilgili diğer gzip_ yönergelerini ekleyin.
* Önbellekleme: Statik dosyalar için tarayıcı önbelleklemesini etkinleştirin. Bu, istemcilerin sık erişilen dosyaları tekrar indirmesini engeller.
Log Yönetimi
Nginx, PHP-FPM ve MariaDB’nin hata ve erişim loglarını düzenli olarak kontrol etmek, sorunları tespit etmek ve güvenlik olaylarını izlemek için önemlidir.
* Nginx logları: /var/log/nginx/
* PHP-FPM logları: /var/log/php5-fpm.log
* MariaDB logları: /var/log/mysql/
Bu logları düzenli olarak gözden geçirin ve gerekirse log rotasyonu (logrotate) araçlarını kullanarak disk alanının dolmasını engelleyin.
Sonuç
Bu kapsamlı rehberde, Debian 8 (Jessie) sunucunuz üzerine LEMP stack’ini (Linux, Nginx, MySQL/MariaDB, PHP-FPM) adım adım başarıyla kurdunuz ve temel yapılandırmalarını gerçekleştirdiniz. Nginx’i web sunucusu olarak kurdunuz, MariaDB’yi veritabanı yönetim sistemi olarak yapılandırdınız ve PHP-FPM’yi Nginx ile entegre ederek dinamik içerik işleme yeteneği kazandırdınız. Ayrıca, sisteminizin güvenliğini ve performansını artırmak için bazı ek önerilerde bulunduk.
Artık Debian 8 sunucunuz, modern ve yüksek performanslı web uygulamalarını barındırmak için sağlam bir temele sahiptir. Bir sonraki adım, WordPress, Laravel, Symfony gibi bir içerik yönetim sistemi (CMS) veya özel bir web uygulamasını bu LEMP stack’i üzerine dağıtmaktır. Unutmayın ki, sunucu yönetimi sürekli bir süreçtir; düzenli güncellemeler, güvenlik kontrolleri ve performans izleme, web uygulamanızın sorunsuz ve güvenli bir şekilde çalışmasını sağlamak için hayati öneme sahiptir.
Bu rehber, LEMP kurulumunun temelini atmıştır. İhtiyaçlarınıza göre daha fazla optimizasyon ve güvenlik önlemleri alarak sunucunuzu daha da güçlendirebilirsiniz.