LAMP Stack Kurulumu: Linux Sunucuda Web Sunucusu Kurma

Ubuntu sunucuda Apache, MySQL ve PHP kurulumundan güvenlik duvarı ayarlarına kadar LAMP stack'i komut satırı örnekleriyle sıfırdan yapılandırmayı anlatıyoruz.

Linux
LAMP Stack Kurulumu: Linux Sunucuda Web Sunucusu Kurma

LAMP kısaltması Linux, Apache, MySQL ve PHP'nin baş harflerinden gelir; otuz yılı aşkın süredir dinamik web uygulamalarının çalıştığı en yaygın altyapılardan biridir. Dört bileşen bir arada iş görür: Linux işletim sistemi sunucuyu ayakta tutar, Apache gelen istekleri karşılar, MySQL veritabanı verileri saklar, PHP ise sunucu tarafındaki mantığı çalıştırır. Bu rehberde Ubuntu tabanlı bir sunucuda LAMP'i sıfırdan kurmayı ve temel güvenlik ayarlarını, komut satırı örnekleriyle adım adım gösteriyoruz.

LAMP Stack'in Bileşenleri Ne İşe Yarar

Bir ziyaretçi siteye girdiğinde istek önce Apache'ye düşer. Dosya statikse Apache onu doğrudan tarayıcıya gönderir; dosya dinamikse, yani .php uzantılıysa, isteği PHP yorumlayıcısına devreder. PHP çalışırken gerektiğinde MySQL'e sorgu yollar, dönen veriyi işler ve sonucu HTML olarak yeniden Apache'ye teslim eder. Bu döngünün tamamı, Linux'un sağladığı dosya sistemi ve süreç yönetimi üzerinde yürür.

Bileşenlerin ayrı ayrı çalışması, her birinin bağımsız güncellenip ölçeklenebilmesini de sağlar. Örneğin veritabanı yükü büyüdüğünde MySQL'i tek başına ayrı bir sunucuya taşımak mümkündür; Apache ve PHP tarafına dokunmaya gerek kalmaz. LAMP'in açık kaynak dokümantasyonuna ve örnek yapılandırmalarına Apache'nin resmi belgelerinden ulaşılabilir; bu kaynak sürüm bazlı yapılandırma farklarını da ayrıntılı biçimde anlatır.

Her bileşenin kendi sürüm döngüsü olduğu için PHP 8.x veya MySQL 8.x gibi güncel sürümlere geçiş, eski sürümlerle yazılmış kodlarla uyumluluk sorunu çıkarabilir. Bir güncelleme yapmadan önce mevcut uygulamanın hangi PHP sürümüyle test edildiğini kontrol etmek, üretim ortamında beklenmedik hatalarla karşılaşma riskini azaltır.

LAMP Nasıl Kurulur

Ubuntu veya Debian tabanlı bir sunucuda kurulum, paket yöneticisi üzerinden birkaç komutla tamamlanır. Önce paket listesini güncelleyip Apache'yi kurun:

Linux terminalinde LAMP bileşenlerini kuran komutları gösteren terminal penceresi
sudo apt update && sudo apt upgrade -y
sudo apt install apache2 -y
sudo systemctl enable apache2
sudo systemctl start apache2

Ardından MySQL sunucusunu kurun ve güvenlik betiğini çalıştırın:

sudo apt install mysql-server -y
sudo mysql_secure_installation

mysql_secure_installation betiği root parolasını belirlemenizi, anonim kullanıcıları kaldırmanızı ve uzaktan root girişini kapatmanızı ister. Bu adımı atlamak, kurulumu güvenlik açısından daha en baştan zayıf bırakır. Son olarak PHP ve Apache arasındaki entegrasyon modülünü kurun:

sudo apt install php libapache2-mod-php php-mysql -y
sudo systemctl restart apache2

Kurulumu doğrulamak için /var/www/html/ altına bir info.php dosyası oluşturup içine yazmak, ardından tarayıcıdan sunucu IP'sine /info.php yoluyla erişmek yeterlidir. Ekranda PHP sürüm bilgisi görünüyorsa kurulum başarıyla tamamlanmıştır. Bu dosyayı testten hemen sonra silmek gerekir; aksi hâlde sunucu yapılandırması hakkında ayrıntılı bilgi dışarıdan görülebilir hâle gelir.

Kurulum sırasında en sık karşılaşılan sorun, Apache'nin PHP dosyalarını yorumlamak yerine tarayıcıya ham kod olarak göndermesidir. Bunun nedeni genelde libapache2-mod-php paketinin eksik kurulması ya da Apache'nin yeniden başlatılmamasıdır. İlk kontrol adımı, sudo systemctl status apache2 komutuyla servisin çalışır durumda olduğunu doğrulamak olmalı.

LAMP Nasıl Yapılandırılır

Apache'nin sanal host (virtual host) yapılandırması, aynı sunucuda birden fazla siteyi barındırmayı mümkün kılar. /etc/apache2/sites-available/ dizini altında yeni bir yapılandırma dosyası açılır:

<VirtualHost *:80>
    ServerName siteadi.com
    DocumentRoot /var/www/siteadi
    ErrorLog ${APACHE_LOG_DIR}/siteadi_error.log
    CustomLog ${APACHE_LOG_DIR}/siteadi_access.log combined
</VirtualHost>

Bu dosyayı etkinleştirmek için şu komutlar çalıştırılır:

sudo a2ensite siteadi.conf
sudo systemctl reload apache2

MySQL tarafında uygulamanın kullanacağı ayrı bir veritabanı ve kullanıcı açmak, root hesabını doğrudan uygulama kodunda kullanmaktan çok daha güvenlidir:

CREATE DATABASE uygulama_db;
CREATE USER 'uygulama_user'@'localhost' IDENTIFIED BY 'guclu_parola';
GRANT ALL PRIVILEGES ON uygulama_db.* TO 'uygulama_user'@'localhost';
FLUSH PRIVILEGES;

PHP tarafında php.ini dosyasındaki upload_max_filesize, memory_limit ve max_execution_time değerleri, uygulamanın ihtiyacına göre ayarlanmalıdır. Varsayılan değerler küçük projelerin çoğunda yeterli kalsa da, dosya yükleme ağırlıklı uygulamalarda genelde artırılması gerekir. Bu dosyanın konumu çoğunlukla /etc/php/8.1/apache2/php.ini gibi sürüm numarasına özgü bir yoldadır ve değişiklikten sonra Apache yeniden başlatılmadan yeni ayarlar devreye girmez.

LAMP Üzerinde Hangi Uygulamalar Çalışır

WordPress, Drupal ve Joomla gibi yaygın içerik yönetim sistemlerinin büyük bölümü LAMP üzerinde çalışacak biçimde tasarlanmıştır. Bu sistemlerin kurulum sihirbazları veritabanı bağlantı bilgilerini (host, kullanıcı adı, parola, veritabanı adı) sorarak başlar; yukarıdaki MySQL komutlarıyla oluşturduğunuz bilgiler doğrudan bu alanlara girilir. Özel geliştirilen PHP uygulamaları da aynı altyapıyı kullanır; Laravel veya Symfony gibi çerçeveler LAMP'in üzerine ek bir katman olarak kurulur.

LAMP yığınının dört bileşeninin isteği işleme sırasını gösteren akış şeması

LAMP'in bu kadar yaygın kanıtlanmış olması, e-ticaret sitelerinden forum platformlarına kadar geniş bir kullanım alanından geliyor. Bu birikim sayesinde karşılaşılan hataların çoğu daha önce belgelenmiş ve çözülmüştür; bir hata mesajını arama motorunda aramak genelde doğrudan çözüme götürür.

Geniş kullanım tabanı, LAMP bilen bir geliştirici bulmayı da kolaylaştırır. Bir ekip büyüdüğünde ya da bir sistem başka birine devredildiğinde, LAMP deneyimi olan birini bulmak niş bir yığına göre çok daha kısa sürer.

LAMP Bakımı ve Performans Ayarları Nasıl Yapılır

Bileşenleri güncel tutmak hem güvenlik hem performans için ortak bir gerekliliktir:

LAMP ile alternatif yazılım yığınlarını karşılaştıran şema
sudo apt update && sudo apt list --upgradable
sudo apt upgrade -y

Bu komutu düzenli, örneğin haftada bir çalıştırmak, keşfedilen güvenlik açıklarının kapatılmasını sağlar. Apache tarafında mod_deflate modülünü etkinleştirmek, sunucudan çıkan veriyi sıkıştırarak sayfa boyutunu küçültür:

sudo a2enmod deflate
sudo systemctl restart apache2

MySQL performansında sık çalışan sorguları EXPLAIN komutuyla incelemek, hangi sorgunun indeks eksikliği yüzünden yavaşladığını gösterir. Önbellekleme katmanı eklemek, örneğin statik sayfa önbelleği veya Redis gibi bellek içi bir depolama kullanmak, sunucu yükünü belirgin biçimde düşürebilir. Yüksek trafikli sitelerde bu, donanım yükseltmekten çok daha ucuz bir performans çözümüdür.

LAMP Yerine Hangi Alternatifler Kullanılabilir

LAMP'in bileşenlerinden biri değiştirilerek türetilen varyasyonlar yaygındır. Apache yerine Nginx kullanmak, yani LEMP, yüksek eşzamanlı bağlantı senaryolarında bazı performans avantajları getirebilir. MySQL yerine PostgreSQL, karmaşık sorgular ve veri bütünlüğü gerektiren projelerde tercih edilebilir. PHP yerine Node.js veya Python kullanan yığınlar da bu ailenin dışında ayrı bir seçenek oluşturur.

Hangi kombinasyonun seçileceği projenin gereksinimlerine bağlıdır. LAMP'in avantajı, dört bileşenin de aynı ekosistemde onlarca yıllık dokümantasyona ve topluluk desteğine sahip olmasıdır. Yeni başlayan biri için LAMP; öğrenme kaynaklarının bolluğu ve kurulum basitliği sayesinde hâlâ makul bir başlangıç noktasıdır. Mevcut bir projeyi LAMP'ten başka bir yığına taşımak ciddi bir yeniden yazma maliyeti getirir; bu yüzden alternatif değerlendirmesi genelde yeni bir projeye başlarken yapılır, çalışan bir sistemi sonradan değiştirirken değil.

LAMP Güvenliği İçin Neler Yapılmalı

Güvenlik duvarı yapılandırması, sunucuyu internete açmadan önce atılması gereken ilk adımdır:

sudo ufw allow OpenSSH
sudo ufw allow 'Apache Full'
sudo ufw enable

Bu komutlar yalnızca SSH ve web trafiğine izin verir, diğer tüm portları kapalı tutar. SSH tarafında parola girişini kapatıp anahtar tabanlı kimlik doğrulamaya geçmek, kaba kuvvet saldırılarının çoğunu baştan etkisiz kılar.

MySQL'in yalnızca localhost'tan bağlantı kabul etmesi, uygulama sunucusu ile veritabanı aynı makinedeyse gereksiz bir dış saldırı yüzeyini kapatır. PHP tarafında display_errors ayarını üretim ortamında Off konumuna almak, hata mesajlarının dosya yollarını ve sorgu detaylarını dışarıya sızdırmasını engeller. Bu ayar php.ini içinde tek satırla değiştirilir; unutulduğunda ciddi bir bilgi ifşasına yol açabilir.

Düzenli günlük (log) incelemesi de gözden kaçmamalı. /var/log/apache2/ altındaki erişim ve hata kayıtlarını takip etmek, olağandışı istek desenlerini erken fark etmenizi sağlar. Bir IP adresinden saniyede onlarca istek geliyorsa bu genelde otomatik bir tarama ya da saldırı denemesidir ve güvenlik duvarı seviyesinde engellenmelidir.

Kaynaklar ve doğrulama

Bilgileri uygulamadan önce güncel ayrıntıları aşağıdaki birincil veya alan otoritesi kaynaklardan kontrol edin.

Celil Uyanikoglu

Yazan Celil Uyanikoglu

25 yıldır bilgi işlem piyasasında farklı dallarda uzmanlaşan bir Bilgisayar Mühendisi

Yorum

Henüz yorum yok.

Sohbete katıl. Yorumlar yayınlanmadan önce moderasyondan geçer.

Yorum yap

E-posta adresin yayınlanmaz. Yorumlar moderasyondan sonra yayınlanır.

Sırada

İlgili notlar