Ubuntu’da LAMP Stack Kurulumu: Apache, MySQL ve PHP Kurulum Rehberi

Yeni bir Ubuntu sunucu kurduğunuzda, web uygulamaları çalıştırabilmek için genellikle ilk yapmanız gereken şey LAMP stack kurmaktır. LAMP; Linux, Apache, MySQL (ya da MariaDB) ve PHP’den oluşan, dünyada en yaygın kullanılan web sunucu ortamıdır. WordPress, Drupal, Laravel gibi onlarca popüler uygulama bu stack üzerinde koşar. Bu yazıda Ubuntu 22.04 LTS üzerinde LAMP kurulumunu adım adım, gerçek dünya senaryolarıyla anlatacağım.

Kuruluma Başlamadan Önce

Sunucunuza root ya da sudo yetkisi olan bir kullanıcıyla bağlandığınızı varsayıyorum. Kuruluma geçmeden önce sistemin paket listesini güncelleyelim. Bu adımı atlarsanız eski sürüm paketler kurulabilir, sonradan gereksiz baş ağrısı yaşarsınız.

sudo apt update && sudo apt upgrade -y

Sunucunuzun hostname’ini de kontrol etmenizi öneririm. Özellikle birden fazla sunucu yönetiyorsanız hangi makinede olduğunuzu bilmek önemlidir.

hostnamectl

Apache Kurulumu

Apache, dünyanın en çok kullanılan web sunucularından biridir. Kurulumu son derece basittir.

sudo apt install apache2 -y

Kurulum tamamlandıktan sonra Apache’nin çalışıp çalışmadığını kontrol edin:

sudo systemctl status apache2

Eğer servis çalışmıyorsa elle başlatın:

sudo systemctl start apache2
sudo systemctl enable apache2

enable komutu, sunucu yeniden başladığında Apache’nin otomatik olarak ayağa kalkmasını sağlar. Bunu unutmak klasik bir hatadır. Sunucu reboot edildiğinde web sitesi neden çalışmıyor diye saatlerce araştırmak zorunda kalmadan önce bu adımı yapmak işinizi kolaylaştırır.

Güvenlik Duvarı Ayarları

Ubuntu’da UFW (Uncomplicated Firewall) kullanılıyorsa Apache için gerekli portları açmanız gerekir.

sudo ufw allow 'Apache Full'
sudo ufw status

Apache Full profili hem HTTP (80) hem de HTTPS (443) portlarını açar. Sadece HTTP trafiğine izin vermek istiyorsanız Apache profilini kullanabilirsiniz.

Tarayıcınızda sunucunuzun IP adresine girdiğinizde “Apache2 Ubuntu Default Page” sayfasını görüyorsanız Apache başarıyla çalışıyor demektir.

Apache Yapılandırması Hakkında Birkaç Not

Apache’nin ana yapılandırma dosyası /etc/apache2/apache2.conf dosyasıdır. Virtual host dosyaları ise /etc/apache2/sites-available/ dizininde tutulur. Web sitenizin dosyaları varsayılan olarak /var/www/html/ altına konur. Ancak birden fazla site barındırıyorsanız her site için ayrı dizin oluşturmanızı öneririm; örneğin /var/www/sirketadi.com/html/ şeklinde.

MySQL Kurulumu

MySQL yerine MariaDB de kullanabilirsiniz. MariaDB, MySQL’in topluluk tarafından geliştirilen bir fork’udur ve Ubuntu’nun resmi repolarında yer alır. Performans açısından küçük-orta ölçekli projeler için aralarında kayda değer bir fark yoktur. Bu yazıda MySQL ile devam edeceğim.

sudo apt install mysql-server -y

Kurulum bittikten sonra MySQL’i güvenli hale getirmek için mysql_secure_installation scriptini çalıştırın. Bu script; root şifresi belirlemenizi, anonim kullanıcıları silmenizi, uzaktan root girişini devre dışı bırakmanızı ve test veritabanını kaldırmanızı sağlar.

sudo mysql_secure_installation

Script sizi adım adım yönlendirir. Sorulara verdiğiniz cevaplar önemlidir:

  • VALIDATE PASSWORD PLUGIN: Güçlü şifre politikası zorunluluğu. Üretim sunucusu için “Yes” seçin.
  • Remove anonymous users: Kesinlikle “Yes” deyin.
  • Disallow root login remotely: Güvenlik için “Yes” deyin.
  • Remove test database: “Yes” deyin, gereksiz bir yük.
  • Reload privilege tables: “Yes” deyin.

MySQL’e bağlandığınızda bir sorunla karşılaşabilirsiniz. Ubuntu 22.04’te MySQL root kullanıcısı varsayılan olarak auth_socket eklentisini kullanır, yani şifre yerine sistem kullanıcısını doğrular. Bu yüzden MySQL konsoluna şöyle girebilirsiniz:

sudo mysql

Veritabanı ve Kullanıcı Oluşturma

Gerçek dünyada root kullanıcısını uygulamalarınız için kullanmamalısınız. Her uygulama için ayrı veritabanı ve kullanıcı oluşturun. Örneğin bir WordPress sitesi kuruyorsunuz:

CREATE DATABASE wordpress_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'GucluBirSifre123!';
GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wp_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

CHARACTER SET utf8mb4 kullanmak önemlidir. Emoji ve özel karakterleri destekler, Türkçe karakterlerde sorun yaşamazsınız. Bunu baştan doğru yapmazsanız daha sonra karakter seti dönüşümü yapmak gerçekten can sıkıcı olur.

PHP Kurulumu

PHP, LAMP stack’in son halkasıdır. Ubuntu 22.04 repolarında PHP 8.1 bulunur. Ancak bazı uygulamalar farklı PHP sürümleri gerektirebilir. Önce standart kurulumu yapalım, ardından sürüm yönetiminden bahsedeceğim.

sudo apt install php libapache2-mod-php php-mysql -y

Bu komut temel PHP kurulumunu yapar. Ancak çoğu web uygulaması ek PHP modülleri gerektirir. Yaygın olarak kullanılan modülleri şöyle kurabilirsiniz:

sudo apt install php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip php-bcmath -y

Her modülün ne işe yaradığını kısaca açıklayayım:

  • php-curl: URL’lerden veri çekme, API istekleri için gereklidir
  • php-gd: Görüntü işleme (resim yeniden boyutlandırma, thumbnail oluşturma)
  • php-mbstring: Çok baytlı karakter dizileri, Türkçe karakter desteği için kritik
  • php-xml: XML dosyalarını okuma/yazma işlemleri
  • php-xmlrpc: XML-RPC protokolü desteği
  • php-soap: SOAP web servisleri
  • php-intl: Uluslararasılaştırma fonksiyonları
  • php-zip: ZIP dosyası oluşturma ve açma
  • php-bcmath: Yüksek hassasiyetli matematik işlemleri

Modülleri kurduktan sonra Apache’yi yeniden başlatın:

sudo systemctl restart apache2

PHP Versiyonunu Doğrulama

php -v

PHP’nin doğru çalıştığını test etmek için basit bir info dosyası oluşturabilirsiniz. Not: Bu dosyayı test sonrası mutlaka silin, sunucu hakkında hassas bilgiler içerir.

sudo nano /var/www/html/info.php

Dosyaya şunu yazın:

<?php phpinfo(); ?>

Tarayıcınızda http://sunucu-ip/info.php adresine gidin. PHP bilgilerini gösteren renkli sayfayı görürseniz PHP çalışıyor demektir. Test bittikten sonra dosyayı silin:

sudo rm /var/www/html/info.php

PHP Yapılandırması

PHP’nin yapılandırma dosyası /etc/php/8.1/apache2/php.ini yolunda bulunur. Bazı temel ayarları production ortamı için değiştirmenizi öneririm:

sudo nano /etc/php/8.1/apache2/php.ini

Değiştirmenizi önerdiğim ayarlar:

  • upload_max_filesize: Varsayılan 2M, büyük dosya yükleyen siteler için artırın (örn: 64M)
  • post_max_size: upload_max_filesize’dan büyük olmalı (örn: 128M)
  • max_execution_time: Varsayılan 30 saniye, uzun süren işlemler için artırabilirsiniz
  • memory_limit: Varsayılan 128M, yoğun uygulamalar için 256M veya daha fazlası gerekebilir
  • display_errors: Production’da mutlaka Off yapın, hata mesajları güvenlik açığı yaratır
  • error_log: Hataları dosyaya kaydedin: /var/log/php_errors.log

Değişikliklerden sonra Apache’yi yeniden başlatmayı unutmayın.

Virtual Host Yapılandırması

Tek IP üzerinde birden fazla web sitesi çalıştırmak istiyorsanız Apache Virtual Host kullanmanız gerekir. Bu, gerçek dünya senaryolarında neredeyse her zaman karşılaştığınız bir durumdur.

Örnek olarak sirketim.com adında bir site için yapılandırma yapalım. Önce dizin yapısını oluşturun:

sudo mkdir -p /var/www/sirketim.com/html
sudo chown -R $USER:$USER /var/www/sirketim.com/html
sudo chmod -R 755 /var/www/sirketim.com

Basit bir index sayfası oluşturun:

echo '<h1>Sirketim.com Calisiyor!</h1>' | sudo tee /var/www/sirketim.com/html/index.html

Şimdi Virtual Host yapılandırma dosyasını oluşturun:

sudo nano /etc/apache2/sites-available/sirketim.com.conf
<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName sirketim.com
    ServerAlias www.sirketim.com
    DocumentRoot /var/www/sirketim.com/html
    ErrorLog ${APACHE_LOG_DIR}/sirketim.com_error.log
    CustomLog ${APACHE_LOG_DIR}/sirketim.com_access.log combined

    <Directory /var/www/sirketim.com/html>
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Virtual host’u etkinleştirin ve varsayılan siteyi devre dışı bırakın:

sudo a2ensite sirketim.com.conf
sudo a2dissite 000-default.conf
sudo a2enmod rewrite
sudo systemctl reload apache2

a2enmod rewrite komutu Apache’nin mod_rewrite modülünü etkinleştirir. WordPress ve benzeri uygulamaların .htaccess dosyaları bu modül olmadan çalışmaz. Çok sık karşılaşılan bir sorun olduğu için özellikle belirtmek istedim.

phpMyAdmin Kurulumu (Opsiyonel)

Veritabanlarını komut satırından yönetmek istemiyorsanız phpMyAdmin kullanabilirsiniz. Ancak phpMyAdmin’i sadece ihtiyaç duyduğunuzda kurun ve gerektiğinde erişimi IP ile kısıtlayın.

sudo apt install phpmyadmin php-mbstring -y

Kurulum sırasında web sunucusu seçimi sorulduğunda apache2‘yi seçin ve boşluk tuşuyla işaretleyin, ardından Tab ile OK’e geçin. Veritabanı yapılandırması için dbconfig-common seçeneğini kabul edin.

phpMyAdmin’i Apache’ye bağlamak için:

sudo phpenmod mbstring
sudo systemctl restart apache2

Güvenlik için phpMyAdmin’e .htaccess ile ek şifre koruması eklemenizi öneririm. Public sunucularda phpMyAdmin’i açık bırakmak, brute force saldırılarına davetiye çıkarmaktır.

LAMP Stack’i Test Etme

Tüm bileşenlerin birlikte çalıştığını doğrulamak için veritabanına bağlanan bir PHP scripti yazalım. Bu, entegrasyonun doğru kurulduğunu teyit etmenin en pratik yoludur.

sudo nano /var/www/html/dbtest.php
<?php
$servername = "localhost";
$username = "wp_user";
$password = "GucluBirSifre123!";
$dbname = "wordpress_db";

$conn = new mysqli($servername, $username, $password, $dbname);

if ($conn->connect_error) {
    die("Baglanti hatasi: " . $conn->connect_error);
}

echo "MySQL baglantisi basarili! PHP versiyonu: " . phpversion();
$conn->close();
?>

Tarayıcıda http://sunucu-ip/dbtest.php adresine gidip “MySQL baglantisi basarili!” mesajını görüyorsanız LAMP stack tam anlamıyla çalışıyor demektir. Testi bitirdikten sonra bu dosyayı da silmeyi unutmayın!

sudo rm /var/www/html/dbtest.php

Sık Karşılaşılan Sorunlar ve Çözümleri

Yıllar içinde LAMP kurulumlarında tekrar tekrar gördüğüm sorunları ve çözümlerini paylaşayım.

Apache Başlamıyor

Genellikle yapılandırma dosyasında sözdizimi hatası olduğunda Apache başlamaz. Şu komutla hataları görebilirsiniz:

sudo apache2ctl configtest

“Syntax OK” çıkıyorsa sorun başka bir yerdedir. Log dosyalarına bakın:

sudo tail -f /var/log/apache2/error.log

PHP Modülleri Yüklenmiyor

Bazen modül kurulumundan sonra PHP modülünü ayrıca etkinleştirmeniz gerekir:

sudo phpenmod modul-adi
sudo systemctl restart apache2

MySQL’e Bağlanılamıyor

Eğer uygulamanız MySQL’e bağlanamıyorsa önce MySQL servisinin çalışıp çalışmadığını kontrol edin:

sudo systemctl status mysql

Ardından kullanıcı yetkilerini kontrol edin:

sudo mysql
SHOW GRANTS FOR 'wp_user'@'localhost';

403 Forbidden Hatası

Bu hata genellikle dosya izinleri yanlış ayarlandığında ortaya çıkar. Web sunucusu dosyalarınızı okuyabilmeli:

sudo chown -R www-data:www-data /var/www/sirketim.com/html
sudo chmod -R 755 /var/www/sirketim.com

PHP dosyaları için 644, dizinler için 755 izni standart yaklaşımdır.

SSL Sertifikası Ekleme

Production ortamında HTTP üzerinden çalışmak artık kabul edilebilir değil. Let’s Encrypt ile ücretsiz SSL sertifikası kurmak son derece kolaydır.

sudo apt install certbot python3-certbot-apache -y
sudo certbot --apache -d sirketim.com -d www.sirketim.com

Certbot, Apache yapılandırmanızı otomatik olarak güncelleyecek ve HTTPS yönlendirmesini ayarlayacaktır. Sertifikalar 90 günde bir yenilenir. Otomatik yenilemeyi test etmek için:

sudo certbot renew --dry-run

Certbot kurulumu sırasında otomatik bir cron job oluşturulur. Sertifika yenileme konusunda ayrıca bir şey yapmanıza gerek kalmaz.

Performans İpuçları

LAMP stack kurulumunu tamamladıktan sonra temel performans iyileştirmelerini de uygulamanızı öneririm.

Apache için mod_deflate ve mod_headers modüllerini etkinleştirmek sayfa yükleme hızını ciddi ölçüde artırır:

sudo a2enmod deflate headers expires
sudo systemctl restart apache2

MySQL için innodb_buffer_pool_size ayarını sunucunuzun RAM’ine göre optimize edin. Genellikle toplam RAM’in %50-70’i verilmesi önerilir. 4GB RAM’li bir sunucuda şöyle ayarlayabilirsiniz:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Dosyaya [mysqld] bölümü altına ekleyin:

innodb_buffer_pool_size = 2G
query_cache_type = 1
query_cache_size = 64M

PHP tarafında OPcache kullanmak PHP scriptlerinin çalışma hızını önemli ölçüde artırır. Ubuntu’da genellikle kurulumla birlikte gelir ancak aktif olduğundan emin olun:

php -m | grep opcache

OPcache listelenmiyorsa etkinleştirin:

sudo phpenmod opcache
sudo systemctl restart apache2

Log Yönetimi

Sistem yöneticisi olarak logları takip etmek işin önemli bir parçasıdır. LAMP bileşenlerinin log dosyaları:

  • Apache erişim logları: /var/log/apache2/access.log
  • Apache hata logları: /var/log/apache2/error.log
  • MySQL logları: /var/log/mysql/error.log
  • PHP hata logları: php.ini‘de belirlediğiniz yol

Canlı log takibi için:

sudo tail -f /var/log/apache2/access.log /var/log/apache2/error.log

logrotate Ubuntu’da varsayılan olarak kurulu gelir ve Apache loglarını otomatik rotate eder. Yapılandırmasını görmek için:

cat /etc/logrotate.d/apache2

Sonuç

Ubuntu’da LAMP stack kurulumu görünürde basit gibi görünse de, her adımın neden yapıldığını anlamak ilerleyen süreçte sorunları çok daha hızlı çözmenizi sağlar. Güvenlik duvarı ayarları, veritabanı kullanıcı izinleri, PHP modülleri, Virtual Host yapılandırması ve SSL sertifikası bir bütün olarak düşünülmeli. “Çalışıyor, oldu” demek yerine doğru yapılandırmayı baştan kurmak, ilerideki baş ağrılarını büyük ölçüde azaltır.

Bu yazıda anlattıklarım temel bir LAMP kurulumu için yeterli. Ama iş yoğunlaştıkça Nginx, Redis, Varnish gibi ek araçlara ihtiyaç duyabilirsiniz. Bunların üzerine de ileride yazılar yazacağım. Herhangi bir adımda takılırsanız yorumlarda sorun, elimden geldiğince yardımcı olmaya çalışırım.

Yorum yapın