Linux ortamında her dağıtım farklı bir çizgide ilerleyebiliyor. Bu makaleyi önceden Ubuntu için yazmıştım. Fakat Fedora’ya geçince elden geçirmek gerekti.
Haydi başlayalım.
Ne kadar uğraşsam da her kurulum sonrası Apache ve MariaDB’yi yeniden, kendi çalışma mantığıma göre yeniden kurmam gerekiyor.
Veri Yollarım
Kendi çalışma mantığım derken; benim bilgisayarım normalden bir farklı yapılandırılmış durumda. Aşağıdaki gibi bir disk paylaşımı var.
├─ /boot/efi │ / ├─ /home ├─ /var/lib/flatpak ├─ /C └─ /D
/ -> Root dizini her kurulumda formatlanırken diğer dizinlere hiç dokunmuyorum. Bu yöntemle / -> Root dizini altında kıymetli verileri tutmuyorum.
/C dizininde web siteleriyle ilgili yaptığım işleri tutuyorum.
/C/www -> localhost yani PHP dosyalarını tuttuğum yolum iken
/C/www-db -> veritabanı dosyalarının tutulduğu yol oluyor.
Bu sebeple her kurulumdan sonra dosya Apache ve MariaDB veri yollarını değiştirmem gerekiyor. İlaveten kullandığım PHP sürümü ve kütüphaneler de ayrı bir baş ağrısı. İşte sırf bu yüzden kendime bu dökümanı hazırladım.
Apache ve PHP Kurulumu
Kurulumda xdebug, curl, gd, imagick, intl, mbstring, mysql, xml kütüphanelerini de etkinleştiriyorum.
Fedora 39 ile gelen PHP sürümü yeterince güncel (8.2 ile geliyor) ve benim yazdığım kodlar da bu sürümleri hedefliyor. Bu sebeple ek depo eklemeye gerek yok görünüyor. Yine de ek depo eklemek isteyenler computingforgeeks.com makalesine bakabilir.
Önce sistemimizi güncelliyoruz ve varsa bekleyen güncellemeleri/yükseltmeleri kuruyoruz. Gerekiyorsa bilgisayarı yeniden başlatıyoruz.
sudo dnf update --refresh
Sonrasında paket kurulumuna geçiyorum. Temel dosyaları kuruyorum.
sudo dnf install curl httpd
Ben denediğimde bu iki paket için de kurulu dedi. Belli ki başka bağımlılıklarla kurulmuş.
Sonrasında PHP ve ilintili modülleri kuruyorum.
sudo dnf install php-common php-fpm php-cli php-common php-mysqlnd php-opcache php-readline php-curl php-gd php-imagick php-intl php-mbstring php-xdebug php-xml
Ubuntu altında rewrite suexec include modüllerini elle etkinleştirmek gerekiyordu. Fedora altında bu modüller zaten etkin geliyormuş.
PHP Ayarları
PHP ile ilgili özelleştirilmiş ayarlarımı yapmak için php.ini dosyasını açıyorum.
sudo gedit /etc/php.ini
Ben genel olarak şu değişiklikleri yapıyorum. Bir kısmı tamamen tercih ve ayar meselesi.
;short_open_tag = Off short_open_tag = On ;error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING ;display_errors = Off display_errors = On ;memory_limit = 128M memory_limit = 512M ;post_max_size = 8M post_max_size = 200M ;upload_max_filesize = 2M upload_max_filesize = 200M ;max_file_uploads = 20 max_file_uploads = 100
Çoğu paylaşımlı sunucuda bu değer (allow_url_fopen) kapalı oluyor. Bu sebeple curl kullanmak zorunda kalıyorum ve local ayarlarımı da buna uyumlu tutuyorum.
Buraya kadar olan ayarların etki etmesi için Apache’yi yeniden başlatıyoruz.
sudo service httpd restart
Tarayıcıya http://localhost veya 127.0.1.1 yazdığımızda karşımıza “Fedora Webserver Test Page” öntanımlı sayfası çıkıyorsa Apache çalışıyor demektir.
Apache Veriyolu Değişimi
Şimdi Apache yolumuzu değiştirelim.
sudo gedit /etc/httpd/conf/httpd.conf
Aşağıdaki tanımlamaları buluyoruz ve yorum haline getiriyoruz. İlerde lazım olabilir diye silmiyoruz. Yıldızlarla gösterilen çeşitli değerler demek. Hepsini yorum haline getiriyoruz.
< Directory /> * * * < /Directory> DocumentRoot "/var/www/html" < Directory "/var/www"> * * * < /Directory> < Directory "/var/www/html"> * * * < /Directory>
(< işaretinin sonundaki boşlukları boşlukları düzenlemeniz gerekebilir) sonrasında şu direktifi ekliyoruz
DocumentRoot /C/www < Directory "/C/www"> Options Indexes FollowSymLinks AllowOverride All Order allow,deny allow from all Require all granted < /Directory>
welcome.conf dosyasını açıyoruz ve içindeki tüm değerlerin önüne yıldız koyup yorum haline getiriyoruz. Bu tanımlamaya ihtiyacımız yok.
sudo gedit /etc/httpd/conf.d/welcome.conf
Yeniden başlatıp localhost görüntülemeye çalıştığımızda muhtemelen permission hatası verecektir.
Nautilus ile /C dizinine uygun ayarları veriyoruz.
Sonrasında selinux baş ağrısından kurtuluyoruz.
Geçici çözüm istersek
selinuxenabled sudo setenforce 0
Kalıcı çözüm istersek
#C dizininin httpd_sys_content_t SELinux etiketini denetle ls -Z /C #Etiket uygun değilse etiketi değiştir #/C dizini ve içeriğindekilerin etiketini httpd_sys_content_t olarak ayarla sudo chcon -R -t httpd_sys_content_t /C #Apache'nin C dizine erişim izinlerini denetle. Listede /C olmalı. sudo semanage fcontext -l | grep "/C" #Yoksa Apache için tanımlama ekleyelim sudo semanage fcontext -a -t httpd_sys_content_t "/C(/.*)?" #Apache'nin C dizine erişim izinlerini yeniden denetle sudo semanage fcontext -l | grep "/C" #Herşey yolundaysa, etiket değişikliklerini uygulama sudo restorecon -Rv /C # MariaDB veriyolu için tanımlama var mı diye bak sudo semanage fcontext -l | grep "/C/www-db" # Yoksa, MariaDB veriyolu için de tanımlama ekle sudo semanage fcontext -a -t mysqld_db_t "/C/www-db(/.*)?" #MariaDB veriyoluna erişim izinlerini yeniden denetle sudo semanage fcontext -l | grep "/C/www-db" #Herşey yolundaysa, etiket değişikliklerini uygulama sudo restorecon -Rv /C/www-db #Site bazında bu kuralı uygulamak gerekiyor gibi??? sudo restorecon -R /C/www/sabri/kitaphaber.com.tr/public_html/
Komutların ne işe yaradığı üstlerine yazdım.
Sonrasında sunucuyu tekrar başlatıyoruz.
sudo service httpd restart
http://localhost/ adresine tıkladığımızda dosyalarımız artık görünüyorsa büyük bir deveye hendek atlattık demektir.
Şimdi bir test dosyası oluşturup phpinfo() bakabiliriz.
MySQL/MariaDB Kurulumu
Fedora altındaki MariaDB sürümleri zaten güncel olduğu için depo ayarlamaya gerek kalmıyor. Yine çok güncel bir sürümü denemeniz gerekiyorsa MariaDB Vakfı tarafından sağlanan ve mariadb.org/download adresinde bulunan depoları kullanabilirsiniz.
Kuruluma başlayalım. MariaDB vurgusu yaptığımı umarım fark edersiniz. MySQL’in sürümleri Fedora altında paketlenmiş olarak bulunmuyor.
sudo dnf install mariadb-server sudo systemctl start mariadb
SQL yapılandırmak ve root şifresi belirlemek için aşağıdaki komutu çalıştırıyoruz.
sudo mysql_secure_installation
Çıkan sorulara makul şekilde cevap veriyoruz. Root parolasını değiştirme kısmında Yes deyip yeni parolayı belirliyoruz.
Change the root password? [Y/n] y New password: Re-enter new password: Password updated successfully!
Diğerleri için de aşağıdaki tercihleri kullandım.
Remove anonymous users? [Y/n] y Disallow root login remotely? [Y/n] n Remove test database and access to it? [Y/n] y Reload privilege tables now? [Y/n] y
MySQL/MariaDB Veriyolu Değişimi
Benim için asıl çile şifre değiştirdikten sonra başlıyor: veriyolunu değiştirmek.
Veritabanlarını /C/www-db altında tutmayı tercih ettiğimi söylemiştim.
Gelin şimdi de veriyolunu değiştirelim.
Önce mysql/mariadb servisini/hizmetini kapatıyoruz.
sudo service mysql stop sudo service mariadb stop sudo pkill -9 mysqld sudo pkill -9 mariadbd
Sonra veritabanlarını taşıyacağımız hedef klasörü oluşturuyoruz. Sonrasında veritabanı dosyalarımızı hedef dizine taşıyoruz ve en son olarak hedef dizindeki dosyaları listeliyoruz.
Yani şu komutları veriyoruz:
sudo mkdir -p /C/www-db sudo cp -R /var/lib/mysql/* /C/www-db/ sudo chown -R mysql:mysql /C/www-db sudo ls -lZ /C/www-db
Veritabanı dosyalarımızı yeni dizine taşıdık fakat MariaDB ayarlarının tutulduğu conf dosyamızı henüz düzenlemedik. Onu da düzenliyoruz.
sudo gedit /etc/my.cnf.d/mariadb-server.cnf
Dosyanın içinde arıyoruz ve datadir değerini /C/www-db olarak değiştiriyoruz.
bind-address = 127.0.0.1 gibi bir tanımlama görürsek önüne # işareti koyup yorum haline getiriyoruz.
En sonunda MariaDB servislerini yeniden başlatıyoruz.
sudo service mysql restart sudo service mariadb restart
En son yeni bir veritabanı ve veritabanı içinde tablo oluşturup, bu tabloların yeni oluşturduğumuz veritabanı yoluna kayıt olup olmadıklarına bakmakta yarar var.
Sunucu çalıştırılamazsa aşağıdaki komutla hataya bakmak gerekiyor.
journalctl -xeu mariadb.service
Hata eğer Can’t Create Test File ise /C/ dizinine de diğer kullanıcılar için erişim izni vermek gerekiyor.
Projeler Üstünde Çalışmak
Yereldeki projeye http://localhost/Proje şeklinde erişmek yerine http://proje.xyz şeklinde erişmek çok daha mantıklı. Bu sebeple küçük bir kaç ayar yapıyoruz.
Önce hosts dosyamızı düzenliyoruz.
sudo gedit /etc/hosts
Açılan dosyadan 127.0.0.1 localhost altına projemizi ekliyoruz
127.0.1.1 benimyeniprojem.xyz
Dosyayı kaydediyoruz ve yine uçbirimden şu komutu çalıştırarak Apache’ye sitemiz hakkında bilgi veriyoruz.
sudo gedit /etc/httpd/conf.d/sitelerim.conf
Açılan boş dosyaya aşağıdaki tanımlamaları ekliyoruz
< virtualhost *:80> ServerName benimyeniprojem.xyz DocumentRoot /benim/yeni/projemin/yolu/ CustomLog /benim/yeni/projemin/yolu/log/access.log common ErrorLog /benim/yeni/projemin/yolu/log/error.log < /virtualhost>
Farkındaysanız, < etiketin ile slash işareti arasında boşluk var, o kısmı düzenlersiniz. Projelerin Log dosyalarını ayrı tutmanız kolaylık sağlayabilir. Yine de CustomLog ve ErrorLog tanımlamalarını kullanmak zorunda değilsiniz. Sonrasında doğal olarak dosyayı kaydediyoruz ve Apache sunucumuzu yeniden başlatıyoruz
sudo service httpd restart
Log dosyaları için tanımladığınız klasör yerindeyse ve projeler için tanımladığınız klasör yolu doğruysa Apache hatasız yeniden başlayacaktır.
Artık tarayıcınızın adres satırına http://benimyeniprojem.xyz yazarak PHP projenize erişebilirsiniz.
Fedora Kaynakça:
– Makalenin Ubuntu versiyonu: https://www.yakusha.net/ubuntu-altinda-apache-mysql-mariadb-php-kurulumu-ve-veriyolu-degisimi/
– SELinux komutları için ChatGPT
– https://www.howtofixthis.com/categories/apache-linux/forbidden-you-donot-have-permission-to-access-message-on-centos-7
– https://forums.fedoraforum.org/showthread.php?328962-httpd-shows-Test-Page-but-doesn-t-execute-php-code
– https://docs.fedoraproject.org/en-US/quick-docs/installing-mysql-mariadb/
– https://stackoverflow.com/questions/20627084/permission-denied-var-www-abc-htaccess-pcfg-openfile-unable-to-check-htacces