SSD Nodes Learn
Rehberler Matt ConnorYazan Matt Connor · Güncellendi 2026-07-24

Ubuntu 24.04 LAMP Stack Kurulum Rehberi

Ubuntu 24.04 üzerinde Apache, MariaDB ve PHP 8.3 PHP-FPM kurulumu yapın. Certbot ile HTTPS ve isim tabanlı vhost yapılandırması için adım adım rehber.

Ne inşa ediyorsunuz

LAMP yığını, bir Ubuntu 24.04 sunucusu üzerinde çalışan dört bileşenden oluşur: temel işletim sistemi olarak Linux, HTTP isteklerini yanıtlayan Apache, verileri saklayan MariaDB ve kodları çalıştıran PHP 8.3. İşlem sonunda; gerçek bir uygulama dizinine hizmet veren isim tabanlı bir sanal host, özel düşük yetkili kullanıcıya sahip bir veritabanı, PHP-FPM aracılığıyla Apache'ye bağlı PHP ve Let's Encrypt ile sağlanmış ücretsiz bir SSL sertifikası elde edilmiş olacaktır.

Kurulum süreci dört apt komutundan ibarettir. Bu kılavuzdaki içeriklerin çoğu, bileşenler arasındaki bağlantıları ve yeni kurulmuş bir yığının boş sayfa döndürmesine, kaynak kodunu tarayıcıya indirme olarak göndermesine veya veritabanına girişi engellemesine neden olan hataları kapsamaktadır. Bu hataların her birinin ayırt edici özellikleri vardır ve aşağıda görülecek tam metinleriyle birlikte listelenmiştir.

Ön Koşullar ve dikkat edilmesi gereken noktalar

Sudo yetkisine sahip bir kullanıcı veya root erişimi olan, halka açık bir IPv4 adresine sahip, yeni kurulmuş bir Ubuntu 24.04 KVM VPS varsayılmaktadır. Minimal bir yapı 1 GB RAM ile çalışabilir; ancak gerçek bir veritabanı destekli uygulama yüklemeden önce 2 GB RAM ayrılmalıdır. MariaDB'nin varsayılan tampon bellekleri ve birkaç PHP-FPM işleyicisi, ilk gigabaytı hızla tüketecektir.

Certbot'un sonunda çalışabilmesi için şu iki koşulun sağlanmış olması gerekir: Bir alan adı (domain name) gereklidir ve bu alan adı bir A kaydı ile VPS'in halka açık IP adresine yönlendirilmelidir; Let's Encrypt, doğrulama işlemini HTTP üzerinden bu isim üzerinden gerçekleştirir ve sadece IP adresi ile sertifika alınamaz. Ayrıca, 80 ve 443 portları internetten erişilebilir olmalıdır. Birçok sağlayıcıda bu durum, portların hem kontrol panelindeki ağ güvenlik duvarında hem de cihaz üzerindeki ufw üzerinde açılması gerektiği anlamına gelir. DNS değişikliklerinin yayılması bir saati bulabilir; bu nedenle A kaydını önceden oluşturun, böylece ihtiyaç duyulduğunda kayıt aktif olacaktır.

Adım 1 - Apache kurulumu ve varsayılan sayfanın doğrulanması

sudo apt update
sudo apt install -y apache2

apt servisi başlatır ve etkinleştirir. Durumu kontrol edin:

systemctl status apache2

active (running) ifadesini içeren bir satır görülmelidir. Şimdi tarayıcıda http://YOUR_SERVER_IP/ adresini açın. Büyük "It works!" banner'ı içeren Apache2 Ubuntu Default Page doğru sonuçtur; bu, Apache'nin çalıştığının kanıtıdır, bir hata değildir. Bu sayfa /var/www/html/index.html adresinde bulunur ve varsayılan olarak gelen 000-default.conf sanal sunucusu tarafından sunulur. Her ikisini de daha sonra devre dışı bırakacaksınız; şu an için varlıkları istenen durumdur.

Sayfa hiç yüklenmiyorsa ancak systemctl sürecinin çalıştığını belirtiyorsa, bir firewall (güvenlik duvarı) engeli mevcuttur. Bir sonraki adım budur.

Adım 2 - HTTP ve HTTPS için güvenlik duvarını açın

apache2 paketi üç adet ufw uygulama profili kaydeder. Bunları listeleyin:

sudo ufw app list

Apache, Apache Full ve Apache Secure göreceksiniz. Apache sadece port 80, Apache Secure sadece 443 ve Apache Full her ikisidir — son aşamada TLS ekleyeceğiniz için ihtiyacınız olan profil budur.

sudo ufw allow OpenSSH
sudo ufw allow "Apache Full"
sudo ufw enable

ufw enable komutunu çalıştırmadan önce OpenSSH profilini etkinleştirin. ufw varsayılan olarak tüm gelen trafiği engeller; SSH kuralı olmadan bu özelliği etkinleştirmek, aktif olduğu anda mevcut bağlantınızı keser — mevcut oturum devam eder ancak tekrar bağlanamazsınız. sudo ufw status ile kontrol edin; OpenSSH, Apache Full ve bunların v6 karşılıklarının tamamının ALLOW durumunda olması gerekir.

Step 3 - MariaDB kurulumu ve güvenli hale getirilmesi

sudo apt install -y mariadb-server
systemctl status mariadb

Ubuntu 24.04, uzun süreli destek (LTS) sürümü olan MariaDB 10.11 ile birlikte gelir; bu nedenle harici bir depoya ihtiyaç duyulmaz. Servis çalışırken sistemi güvenli hale getirin:

sudo mysql_secure_installation

Soruları rastgele geçmek yerine okumak önemlidir. current root password sorulduğunda Enter tuşuna basın; henüz bir şifre tanımlanmamıştır. "Switch to unix_socket authentication?" sorusu için cevap bir şeyi değiştirmez çünkü bu özellik bu pakette zaten etkindir, bu nedenle n tuşuna basın. Bir sonraki paragraftaki nedenden dolayı "Change the root password?" sorusuna n yanıtını verin, ardından diğer soruları Y şeklinde yanıtlayın: anonim kullanıcıları kaldırın, uzaktan root girişini engelleyin, test veritabanını silin ve yetki tablolarını yeniden yükleyin.

Herkesin kafasını karıştıran kısım burasıdır. Ubuntu üzerindeki MariaDB'de root veritabanı hesabı şifre yerine unix_socket kimlik doğrulaması kullanır. Bu, veritabanının halihazırda kimlik doğrulaması yapılmış olan işletim sistemi kullanıcısına güvendiği anlamına gelir. Bu sayede bir root kabuğundan şu işlem gerçekleştirilebilir:

sudo mysql

...ve sistem şifre sormadan sizi bir MariaDB [(none)]> istemine yönlendirir. Aynı komut yetkisiz bir kullanıcı ile çalıştırıldığında reddedilir; asıl amaç budur: veritabanı root erişimi sistemdeki sudo ile ilişkilendirilmiştir ve çalınacak, oltalama yapılacak veya kaba kuvvet saldırısına uğrayacak bir şifre yoktur. Bu yöntem şifreden daha güvenlidir, bu yüzden ayarları değiştirmeyin. Buradan çıkan kural şudur: bir uygulamayı asla root hesabına yönlendirmeyin. Her uygulama için özel bir kullanıcı oluşturun (Step 7); çünkü kullanıcı adı ve şifre ile TCP üzerinden bağlanan bir uygulama socket kimlik doğrulaması kullanamaz ve her uygulamanın kendi veritabanıyla sınırlı olması istenir.

Step 4 - PHP 8.3 ve PHP-FPM Kurulumu

Ubuntu 24.04 varsayılan PHP sürümü 8.3'tür. FPM süreç yöneticisini ve tipik bir uygulamanın ihtiyaç duyduğu eklentileri kurun:

sudo apt install -y php8.3-fpm php8.3-mysql php8.3-cli \
  php8.3-curl php8.3-xml php8.3-mbstring php8.3-zip

Listede olmayan öğeye dikkat edin: libapache2-mod-php. Bu eski paket, her Apache sürecinin içine bir PHP yorumlayıcısı yerleştirir. Kullanımı basittir ancak her işçi süreç, ister bir betik ister statik bir görsel sunsun, bir PHP kopyası taşır; her iki süreç aynı yaşam döngüsünü paylaşır ve yalnızca Apache'nin en az verimli olan prefork MPM modülü ile çalışır. PHP-FPM ise PHP'yi Apache'nin bir soket üzerinden iletişim kurduğu kendi süreç havuzu olarak çalıştırır. Apache, statik dosyalar için threaded event MPM modülünü kullanabilir ve yalnızca PHP isteklerini iletebilir; havuz, web sunucusundan bağımsız olarak optimize edilebilir ve ileride önüne nginx koyarsanız aynı FPM kurulumu çalışmaya devam eder. Mevcut varsayılan olmasının haklı sebepleri vardır.

Apache, FPM'e proxy_fcgi modülü aracılığıyla erişir. Modülü etkinleştirin, FPM paketinin yüklediği yapılandırmayı etkinleştirin ve yeniden başlatın:

sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.3-fpm
sudo systemctl restart apache2

a2enconf php8.3-fpm, PHP dosyalarını FPM soketine yönlendiren kuralı içeren /etc/apache2/conf-available/php8.3-fpm.conf modülünü etkinleştirir. Sistemin merkezinde, her .php dosyasını eşleştiren ve dosyayı /run/php/php8.3-fpm.sock adresindeki sokete ileten yapı bulunur:

<FilesMatch ".+\.ph(ar|p|tml)$">
    SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost"
</FilesMatch>

Bu dosya düzenlenmez; varsayılan haliyle doğru yapılandırılmıştır. Ancak soket yolunu bilmek, ileride karşılaşabileceğiniz "PHP çalışmak yerine indiriliyor" ve "Primary script unknown" hatalarını teşhis etmenizi sağlar; her iki hata da Apache ve FPM'in bu soket veya arkasındaki dosya konusunda uyuşmazlık yaşamasından kaynaklanır.

Step 5 - Uygulamanız için isme dayalı bir virtual host

İsme dayalı virtual hosting, tek bir IP üzerinden birçok sitenin hizmet verilmesini sağlar; Apache, istekteki Host: başlığına göre siteyi seçer. Uygulama için varsayılan /var/www/html dizininden uzak bir konumda bir dizin oluşturun:

sudo mkdir -p /var/www/testapp
sudo chown -R www-data:www-data /var/www/testapp
sudo chmod -R 755 /var/www/testapp

Dosya sahipliği önemlidir. Ubuntu üzerinde hem Apache hem de PHP-FPM www-data kullanıcısı olarak çalışır; bu nedenle web sunucusunun okuması gereken dosyalar —ve bir uploads klasörü gibi uygulamanın yazması gereken dizinler— www-data kullanıcısına ait olmalıdır. Dosyaları kendi kullanıcı oturumunuzla düzenleyecekseniz, yaygın yöntem dosyaların sahibi olmanız ve kullanıcınızı www-data grubuna eklemenizdir; basit bir kurulum için www-data:www-data en sorunsuz yöntemdir.

/etc/apache2/sites-available/testapp.conf konumunda virtual host oluşturun:

<VirtualHost *:80>
    ServerName app.example.com
    DocumentRoot /var/www/testapp

    <Directory /var/www/testapp>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/testapp-error.log
    CustomLog ${APACHE_LOG_DIR}/testapp-access.log combined
</VirtualHost>

ServerName değerini gerçek alan adınız olarak ayarlayın. Options -Indexes, bir index dosyası bulunmadığında Apache'nin dizini listelemesini engeller; aksi takdirde ziyaretçiler kaynak kod dizininizi görüntüleyebilir. AllowOverride All, çoğu PHP uygulamasının temiz URL'ler için beklediği .htaccess dosyasının çalışmasını sağlar; uygulamanız buna ihtiyaç duymuyorsa, küçük bir hız kazanımı için None dizinine bırakın. Bu siteyi etkinleştirin, varsayılan siteyi devre dışı bırakın, konfigürasyonu kontrol edin ve yeniden yükleyin:

sudo a2ensite testapp
sudo a2dissite 000-default
sudo apache2ctl configtest
sudo systemctl reload apache2

apache2ctl configtest çıktısı Syntax OK değerini vermelidir. a2dissite 000-default satırı genellikle unutulan satırdır ve varsayılan sayfanın takılı kalmış gibi görünmesine neden olan durum budur — bu konu hatalar bölümünde ele alınmıştır.

Step 6 - PHP'nin çalıştığını doğrulayın, ardından kanıtı silin

Uygulama kök dizinine tek satırlık bir PHP dosyası oluşturun:

echo "<?php phpinfo();" | sudo tee /var/www/testapp/info.php

http://app.example.com/info.php adresini ziyaret edin. Doğru sonuç, yüklü modülleri listeleyen mor ve gri renkli uzun PHP Version 8.3.x tablosudur; Server API satırı FPM/FastCGI değerini göstermelidir. Bu son satır, isteklerin mod_php yerine PHP-FPM üzerinden iletildiğini doğrular.

Dosyayı hemen silin:

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

phpinfo() dosyası; PHP sürümünüzü, yüklü tüm eklentileri, dosya yollarını ve ortam ayrıntılarını ifşa eder. Bu bilgiler, bilinen açığı olan bir sürümü arayan kişiler için risk oluşturur. Bu bir test aşamasıdır, bir özellik değildir. Sayfayı gördüğünüz anda dosyayı silin. Eğer tarayıcınız tablo yerine info.php dosyasını indirmeyi teklif ederse, PHP Apache ile düzgün yapılandırılmamış demektir; başka bir işlem yapmadan önce hata giderme bölümüne geçin.

Step 7 - Uygulama veritabanını ve en düşük yetkili kullanıcıyı oluşturun

Veritabanını socket-authenticated root ile açın:

sudo mysql

Ardından, yalnızca o veritabanına kapsamlandırılmış bir veritabanı ve bir kullanıcı oluşturun:

CREATE DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'a-long-random-password';
GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Burada üç bilinçli seçim yapılmıştır. utf8mb4 gerçek dört baytlı UTF-8 formatıdır; eski utf8 takma adı emojileri ve bazı CJK karakterlerini sessizce kırpar, bu nedenle her zaman utf8mb4 kullanın. Yetki appdb.* üzerindedir, *.* değil: bu kullanıcı yalnızca kendi veritabanına erişebilir, başka hiçbir şeye erişemez; böylece uygulamadaki bir SQL-injection açığı diğer tüm sitelerin tablolarını okuyamaz. Ayrıca 'appuser'@'localhost', hesabı yalnızca yerel makineden gelen bağlantılarla sınırlandırır.

Bu kullanıcı ile test edin:

mysql -u appuser -p appdb

Şifre istenir ve sizi bir MariaDB [appdb]> istemine yönlendirir. -h bayrağının olmadığını fark edin; bu bayrağı kullanmazsanız istemci yerel Unix socket üzerinden bağlanır, bu da MariaDB tarafından localhost olarak kabul edilir. Bilinmesi gereken önemli bir nokta: MySQL ve MariaDB için localhost Unix socket anlamına gelirken, 127.0.0.1 bir TCP bağlantısı anlamına gelir. Standart bir Ubuntu 24.04 MariaDB kurulumunda sunucu, 127.0.0.1 üzerinden gelen bir TCP bağlantısını hala localhost olarak çözer, bu nedenle her ikisi de hesapla eşleşir; ancak skip-name-resolve etkinleştirilmiş sunucularda (yaygın bir performans iyileştirmesi ve birçok konteyner imajında standarttır), ikisi farklı hostlar olarak eşleştirilir ve 127.0.0.1 üzerinden bağlanmaya çalışan bir uygulama, şifre doğru olsa bile ERROR 1045 (28000): Access denied for user 'appuser'@'127.0.0.1' (using password: YES) hatasıyla reddedilir.

Bu nedenle uygulamanızı host localhost, kullanıcı appuser ve veritabanı appdb olarak ayarlayın; asla root olarak ayarlamayın. PHP'nin mysqli ve PDO kütüphaneleri, host literal string olarak localhost olduğunda, az önce oluşturduğunuz hesapla eşleşecek şekilde Unix socket'e geçer. Eğer bir framework sayısal bir TCP hostu gerektiriyorsa, kullanıcıyı gerçek bağlantı yöntemine göre oluşturun: 'appuser'@'127.0.0.1' veya (bir firewall kuralı ile birlikte) yalnızca başka bir makineden veritabanına erişilmesi gerekiyorsa @'%'.

Step 8 - Certbot ile HTTPS Ekleme

Giriş formunun düz HTTP üzerinden sunulması, parolaların açık metin olarak gönderilmesine neden olur ve tüm modern tarayıcılar sayfayı "Güvenli değil" olarak işaretler. Certbot bu sorunu tek bir komutla çözer. Apache eklentisi ile kurulumu şu şekilde yapın:

sudo apt install -y certbot python3-certbot-apache
sudo certbot --apache

Certbot burada iki eklenti kullanır. apache authenticator, çalışan Apache üzerinden kısa süreliğine bir doğrulama dosyası sunarak alan adının kontrolünün sizde olduğunu kanıtlar. apache installer ise sanal ana bilgisayar (virtual host) yapılandırmasını yeniden yazar; 443 bloğunu ekler, yapılandırmayı yeni sertifikaya yönlendirir ve varsayılan olarak tüm HTTP trafiğini HTTPS'e yönlendirir. Certbot 2.0 sürümünden itibaren yönlendirme sorusu sorulmaz; düz HTTP sunmaya devam etmek gerekiyorsa --no-redirect parametresi kullanılmalıdır. 5. Adımda gerçek bir ServerName tanımladığınız için Certbot alan adını otomatik olarak tespit eder. Sertifikaların geçerlilik süresi 90 gündür ve paket, sertifikaları yenileyen bir systemd zamanlayıcısı kurar. Zamanlayıcıyı, sonu Congratulations, all simulated renewals succeeded ile biten sudo certbot renew --dry-run komutu ile doğrulayabilirsiniz.

Doğrulama süreci, yenileme zamanlayıcısı, DNS ve güvenlik duvarı gereksinimleri hakkındaki tam kılavuz için Apache üzerinde Certbot ile ücretsiz Let's Encrypt TLS sertifikaları oluşturma kılavuzuna bakın.

Backups, upgrades, and hardening

Durum verilerini tutan iki öğeyi yedekleyin: veritabanları ve web root dizini. Her gece yapılan mantıksal döküm en basit ve güvenilir yöntemdir — sudo sh -c 'mysqldump --all-databases --single-transaction | gzip > /root/db-$(date +%F).sql.gz' gerçekleştirilir ve ardından sunucudan dışarı kopyalanır. Tüm iş akışını sudo sh -c ile sarmak önemlidir: bu işlem yapılmazsa shell, > /root/... yönlendirmesini mevcut kullanıcıyla çalıştırır ve mysqldump yalnızca sudo öğesini devraldığı için Permission denied hatası verir. --single-transaction, InnoDB tablolarını kilitlemeden tutarlı bir anlık görüntü sağlar. Bunu /var/www ve /etc/apache2/sites-available için bir tar ile eşleştirerek, tüm yığını yeni bir VPS üzerinde bu dosyalardan yeniden oluşturabilirsiniz.

Güncellemeler olağan bir sudo apt update && sudo apt upgrade işlemidir. Sorun yaratan durum ise bir PHP sürüm yükseltmesidir — gelecekteki bir Ubuntu sürümü varsayılanı PHP 8.4 olarak değiştirdiğinde, apt sürümü 8.3'ün yanına php8.4-fpm kurabilir, socket /run/php/php8.4-fpm.sock olur ve Apache yapılandırmanız hala 8.3 socket'ine işaret eder. Yeni yapılandırmayı (sudo a2enconf php8.4-fpm) etkinleştirin ve eskisini devre dışı bırakın; aksi takdirde rutin bir güncelleme sonrası siteniz Primary script unknown hatası döndürmeye başlar. PHP sürümleri bir LTS dağıtımından daha hızlı ilerlediği için, belirli bir yama sürümüne bağlı kalmak yerine güncel PHP sürüm notlarını kontrol edin.

İlk günden yapılması gereken iki sıkılaştırma adımı vardır. İlk olarak, sunucuya SSH izleyen Fail2Ban kurun — halka açık bir VPS dakikalar içinde otomatik giriş denemeleri alır; küçük bir jail, binlerce denemeyi engellemeden önce birkaç taneye indirir. İkinci olarak, Apache sanal konaklarını, MariaDB veritabanlarını ve kullanıcıları dosyaları manuel düzenlemek yerine bir tarayıcı üzerinden yönetmek isterseniz, Webmin web tabanlı kontrol paneli tam olarak bu yığının üzerinde çalışır ve az önce yazdığınız yapılandırma dosyalarını yönetir. Hiçbiri bileşenlerin mantığını anlamanın yerini tutmaz, ancak her ikisi de günlük iş yükünü azaltır.

Hata modları ve karşılaşacağınız metinler

Varsayılan sayfa kaybolmayacak. Virtual host ayarlarını düzenlediniz, reload yaptınız ancak tarayıcı hâlâ "Apache2 Ubuntu Default Page" ve "It works!" banner'ını gösteriyor. Apache, eşleşen ilk virtual host'u sunar; eğer hiçbir ServerName istekle eşleşmezse, alfabetik olarak ilk olan konfigürasyon geçerli olur — 000-default.conf, testapp.conf'den önce gelir. Ya isteğin host adı ServerName ile eşleşmiyor ya da sudo a2dissite 000-default komutunu çalıştırmadınız. Varsayılan konfigürasyonu, yani sudo systemctl reload apache2'yi devre dışı bırakın ve vhost haritasını yazdıran ve varsayılan konfigürasyonun hangisi olduğunu gösteren apache2ctl -S ile kontrol edin. Tarayıcı önbelleğini de temizleyin; eski sayfadan kalan önbelleğe alınmış bir 200 yanıtı kalmaya devam edebilir.

Bir .php dosyası çalıştırılmak yerine indiriliyor. info.php dosyasını açıyorsunuz ve tarayıcı dosyayı çalıştırmak yerine ham <?php kaynak kodunu içeren bir dosya indiriyor veya düz metin olarak gösteriyor. PHP handler'ı bağlı olmadığı için Apache dosyayı statik bir varlık olarak sunuyor — sudo a2enmod proxy_fcgi veya sudo a2enconf php8.3-fpm adımlarını atladınız ya da sonrasında Apache'yi yeniden başlatmadınız. Her üç adımı de (Step 4) çalıştırın ve sayfayı yenileyin. Modülün yüklü olduğunu, proxy_fcgi_module listesini vermesi gereken apache2ctl -M | grep fcgi ile doğrulayın. Bu bir görsel hata değil, kaynak kodu sızıntısıdır; bu nedenle sunucuya gerçek bir veri yüklemeden önce sorunu çözün.

ERROR 1698 (28000): Access denied for user 'root'@'localhost'. sudo olmadan mysql -u root veya mariadb -u root çalıştırdınız. Root hesabı unix_socket kimlik doğrulaması kullanır, bu nedenle yalnızca OS kullanıcınız root olduğunda erişime izin verir. Çözüm sudo mysql'dir — -u root gerekmez, şifre gerekmez. Bu mesaj, socket kimlik doğrulamasının doğru çalıştığının beklenen bir sonucudur, bozuk bir kurulum değildir.

Uygulamadan gelen doğru şifre ile ERROR 1045 (28000): Access denied for user 'appuser'@'127.0.0.1'. Hesap 'appuser'@'localhost' olarak mevcuttur, ancak uygulamanız, host adı çözümlemesinin devre dışı bırakıldığı (skip-name-resolve) bir sunucuda TCP üzerinden 127.0.0.1'e bağlanıyor; bu nedenle MariaDB bu ikisini farklı hostlar olarak eşleştirir — localhost Unix socket'idir, 127.0.0.1 ise TCP'dir. Uygulamayı socket kullanması ve hesapla eşleşmesi için localhost hostuna yönlendirin veya framework yalnızca TCP kullanıyorsa ikinci bir 'appuser'@'127.0.0.1' hesabı oluşturun.

/var/log/apache2/testapp-error.log içinde AH01071: Got error 'Primary script unknown', tarayıcı File not found. gösteriyor. Apache isteği PHP-FPM'e iletti, ancak FPM, Apache'nin verdiği yolda script'i bulamadı. İki yaygın neden vardır: Konfigürasyondaki FPM socket'i yüklü olmayan bir PHP sürümüne (örneğin sadece 8.3 çalışırken yükseltme sonrası kalan bir php8.4 socket'i) işaret ediyor veya DocumentRoot ile gerçek dizin uyuşmadığı için dosya gerçekten orada değil. Socket'in varlığını ls -l /run/php/ ile kontrol edin, DocumentRoot'nin dosyanın bulunduğu yerle eşleştiğini doğrulayın ve hem php8.3-fpm hem de apache2 servislerini yeniden başlatın.

Her yeniden başlatmada AH00558: apache2: Could not reliably determine the server's fully qualified domain name. Bu zararsız bir uyarıdır, hata değildir — Apache size herhangi bir global ServerName ayarlanmadığını söylüyor. /etc/apache2/conf-available/servername.conf içine ServerName your.domain yazıp sudo a2enconf servername komutunu çalıştırarak bu uyarıyı susturabilirsiniz.

Apache başlatılırken (98)Address already in use: AH00072: make_sock: could not bind to address 0.0.0.0:80. Başka bir web sunucusu zaten 80 portunu kullanıyor — genellikle önceki bir denemeden kalan bir nginx. Bunu sudo ss -ltnp | grep :80 ile bulun, ardından Apache'yi başlatmadan önce diğer servisi durdurun ve devre dışı bırakın.

FAQ

mod_php mı yoksa PHP-FPM mı - hangisini kullanmalıyım?

PHP-FPM kullanın. mod_php her Apache sürecine bir yorumlayıcı yerleştirir ve yavaş olan prefork MPM kullanımını zorunlu kılar; bu durum Apache'nin statik bir görsel sunarken bile PHP yükünü taşımasına neden olur. PHP-FPM, PHP'yi Apache'nin bir soket üzerinden eriştiği, bağımsız olarak optimize edilebilen ayrı bir havuz olarak çalıştırır, daha hızlı olan threaded event MPM ile uyumludur ve ileride nginx'e geçiş yapıldığında yapısı değişmeden aktarılabilir. Modern varsayılan budur; mod_php yalnızca süreç içi (in-process) davranışlara bağımlı olan eski uygulamalar için uygundur.

Tarayıcım PHP dosyasını çalıştırmak yerine neden indiriyor?

Apache, dosyaya herhangi bir PHP işleyicisi (handler) bağlı olmadığı için .php dosyasını statik bir indirme dosyası olarak işlemektedir. FPM kullanılan Ubuntu 24.04 üzerinde bu durum, sudo a2enmod proxy_fcgi, sudo a2enconf php8.3-fpm veya sonrasındaki Apache yeniden başlatma adımının eksik bırakıldığı anlamına gelir. Üç işlemi de gerçekleştirin ve yeniden yükleyin; ardından proxy_fcgi_module öğesinin listelendiğini apache2ctl -M | grep fcgi ile doğrulayın. Sorun giderilene kadar sunucu kaynak kodlarını sızdırmaktadır, bu nedenle konuyu acil olarak ele alın.

Doğru şifreye sahip olmama rağmen MariaDB'de root erişimi neden reddediliyor?

Çünkü şifre bulunmamaktadır; Ubuntu'daki MariaDB, root hesabını unix_socket ile doğrular ve bu hesabı işletim sistemi root kullanıcısına bağlar. Normal bir kabuk üzerinden çalıştırılan mysql -u root, tasarım gereği ERROR 1698 (28000): Access denied for user 'root'@'localhost' sonucunu döndürür. Bunun yerine sudo mysql ile bağlanın ve root kullanıcısını tekrar kullanmak yerine her uygulama için şifre ile doğrulamaya tabi ayrı bir kullanıcı oluşturun.

LAMP siteme HTTPS'i nasıl eklerim?

certbot ve python3-certbot-apache paketlerini kurun, bir alan adının A kaydını sunucuya yönlendirin ve ardından sudo certbot --apache komutunu çalıştırın. Apache kimlik doğrulayıcısı, alan adı kontrolünü çalışan Apache üzerinden kanıtlar; yükleyici, sanal ana bilgisayarı (virtual host) 443 portu için yeniden yazar ve otomatik yenilemeyi yapılandırır. tam Certbot ve Apache kılavuzu konuyu, yenileme zamanlayıcısını ve yaygın hata modlarını kapsamaktadır.

#lamp#apache#mariadb#php-fpm#ubuntu