Merhaba,

Ne kadar uğraşsam da her kurulum sonrası Apache ve MySQL/MariaDB’yi yeniden, kendi çalışma mantığıma göre yeniden kurmam gerekiyor.

Kendi çalışma mantığım derken; ben Ubuntu’yu kurarken kimi bölümleri biraz ayrı yapılandırdım. Aşağıdaki gibi bir bölümlendirmem var.

/ -> root
/home
/C
/D

/ -> Root dizini her kurulumda formatlanırken /home, /C, /D, bölümlerine hiç dokunmuyorum.

/C dizininde web siteleriyle ilgili yaptığım işleri tutuyorum.

/C/www -> PHP dosyalarını tuttuğum yol iken
/C/www-db -> veritabanı dosyalarının tutulduğu yol oluyor.

Bu sebeple her kurulumdan sonra dosya Apache ve MySQL/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ı. Sırf bu yüzden kendime bu dökümanı hazırladım. Defalarca da güncelledim. Şimdi tek parça haline getirip yeniden yayınlıyorum.

Apache ve PHP Kurulumu

Kurulumda xdebug, curl, gd, intl, mbstring, mysql, xml, opcache, imagick gibi ihtiyaç duyduğum kütüphanelerini de etkinleştiriyorum.

Kurulumun ilk aşamasında PHP sürüm desteğini genişletmek için PPA eklemek gerekiyor. Böylece ihtiyacımız olan PHP sürümünü kullandığımıza emin olabiliyoruz. Ubuntu’nun her sürümünde güncel PHP sürümü olabiliyor. Bazen daha eski kodlarla çalışmamız gerekiyorsa aşağıdaki şekilde konuyu çözüyorum.

sudo add-apt-repository ppa:ondrej/php
sudo apt update

Sonrasında paket kurulumuna geçiyorum. Temel dosyaları kuruyorum.

sudo apt install curl apache2 

PHP 8.0 sürümünü kullanacaksam şunları kuruyorum

sudo apt install php-common libapache2-mod-php8.0 php8.0-cli php8.0-common php8.0-opcache php8.0-readline php8.0-curl php8.0-gd php8.0-imagick php8.0-intl php8.0-mbstring php8.0-mcrypt php8.0-mysql php8.0-xdebug php8.0-xml

PHP 8.1 sürümünü kullanacaksam şunları kuruyorum

sudo apt install php-common libapache2-mod-php8.1 php8.1-cli php8.1-common php8.1-opcache php8.1-readline php8.1-curl php8.1-gd php8.1-imagick php8.1-intl php8.1-mbstring php8.1-mysql php8.1-xdebug php8.1-xml

PHP 8.2 sürümünü kullanacaksam şunları kuruyorum

sudo apt install php-common libapache2-mod-php8.2 php8.2-cli php8.2-common php8.2-opcache php8.2-readline php8.2-curl php8.2-gd php8.2-imagick php8.2-intl php8.2-mbstring php8.2-mysql php8.2-xdebug php8.2-xml

Şu paketi de kurduğum oluyormuş fakat neden kurduğumu veya bağımlı olup olmadığımdan emin değilim.

sudo apt install php-json

Paketler kurulunca ssl, rewrite vs aktif etmek lazım

sudo a2enmod ssl rewrite suexec include

PHP Ayarlarını Özelleştirme

Sonrasında hata gösterimini aktif etmek için editör ile (ben gedit kullanıyorum) ini dosyamızı açıyoruz.

PHP 8.0 için ini dosyamızın yolu şöyle:

sudo gedit /etc/php/8.0/apache2/php.ini

PHP 8.1 için ise ini dosyamızın yolu şöyle:

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

PHP 8.2 için ise ini dosyamızın yolu şöyle:

sudo gedit /etc/php/8.2/apache2/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 tutmaya çalışıyorum.

Buraya kadar olan ayarların etki etmesi için Apache sunucuyu yeniden başlatıyoruz.

sudo service apache2 restart

Tarayıcıya http://localhost/ yazdığımızda karşımıza Apache2 Ubuntu Default sayfası çıktıysa apache çalışıyor demektir.

Apache Veriyolu Değişimi

Şimdi Apache yolumuzu değiştirelim.

sudo gedit /etc/apache2/apache2.conf

aşağıdaki kısmı buluyoruz ve yorum haline getiriyoruz. Dilerseniz silebilirsiniz.

< Directory />
	Options FollowSymLinks
	AllowOverride None
	Require all denied
< /Directory>

< Directory /usr/share>
	AllowOverride None
	Require all granted
< /Directory>

< Directory /var/www/>
	Options Indexes FollowSymLinks
	AllowOverride None
	Require all granted
< /Directory>

(Directory yazarkenki boşlukları düzenlemeniz gerecektir)

sonrasında şu direktifi ekliyoruz

< Directory /C/www/>
	Options Indexes FollowSymLinks
	AllowOverride All
	Order allow,deny
	allow from all
	Require all granted
< /Directory>

Sonrasında virtualhost içindeki değerini düzenlememiz gerekiyor.

sudo gedit /etc/apache2/sites-available/000-default.conf

deyip dosyayı açtıktan sonra DocumentRoot değerini şu şekilde düzenleyelim

#DocumentRoot /var/www/html
DocumentRoot /C/www

Sonrasında sunucuyu tekrar başlatalım

sudo service apache2 restart

Tarayıcıdan baktığımızda http://localhost/ adresinde dosyalarımız görünüyorsa deveye büyük hendeği atlattık demektir.

Şimdi bir test dosyası oluşturup phpinfo() bakabiliriz.

Gerektiğinde aşağıdaki komutu kullanarak varsayılan PHP sürümünü değiştirebiliriz.

sudo update-alternatives --config php

Tabii tüm işlemin sonunda sunucuyu yeniden başlatmak da şart.

sudo service apache2 restart

MySQL/MariaDB Kurulumu

İlk önce MariaDB kurulumu için depomuzu ayarlıyoruz. Normalde depolarda zaten var, fakat ben daha güncel bir sürümü kullanmak gerekiyorsa LTS sürüm altında aşağıdaki komut ile depo ayarlanabiliyor. Ubuntu ara sürümleri için destekleri bulunmuyor.

curl -LsS https://r.mariadb.com/downloads/mariadb_repo_setup | sudo bash

Bir başka kaynak MariaDB Vakfı tarafından sağlanan ve mariadb.org/download adresinde bulunan depoları kullanmak.

İster depo ekleyerek, ister eklemeden kuruluma başlayabilirsiniz.

Kurulum sırasında özellikle MariaDB vurgusu yaptığımı umarım fark edersiniz.

sudo apt-get install mariadb-server 

Malesef MySQL/MariaDB için Root parolası tanımlı değil ve tanımlanması gerekiyor. Bu işlem bir hayli sıkıcı. Aşağıdaki komutları sırasıyla kullanıyoruz.

Password(‘123’) yazan kısma kendi parolanızı oluşturmayı unutmayın. Bu ayarlar tamamen yerelde PHP üstüne geliştirme yapmak amaçlıdır.

sudo pkill -9 mysqld
sudo pkill -9 mariadb
sudo service mysql stop
sudo service mariadb stop
sudo mysqld_safe --skip-grant-tables --skip-networking & 
mysql -u root
use mysql;
flush privileges;
alter user root@localhost identified via mysql_native_password 
using password('123');
flush privileges;
\q

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/mysql/mariadb.conf.d/50-server.cnf

Dosyanın içinde arıyoruz ve datadir değerini /C/www-db olarak değiştiriyoruz.

Sonrasında bind-address = 127.0.0.1 ö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/apache2/sites-available/000-default.conf

Açılan dosyadan şu tanımlamayı bulup

< virtualhost *:80>
ServerName localhost
****
< / virtualhost>

Altına 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. Dilerseniz CustomLog ve ErrorLog tanımlamalarını kullanmayabilirsiniz. Sonrasında doğal olarak dosyayı kaydediyoruz ve Apache sunucumuzu yeniden başlatıyoruz

sudo service apache2 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.

Kaynakça:
* https://forum.ubuntu-tr.net/index.php?topic=24150.0
* http://askubuntu.com/questions/760907/upgrade-to-16-04-php7-not-working-in-browser
* https://help.ubuntu.com/16.04/serverguide/php.html
* https://stackoverflow.com/questions/42619312/switch-php-versions-on-commandline-ubuntu-16-04
* https://ostechnix.com/how-to-switch-between-multiple-php-versions-in-ubuntu/
* https://www.digitalocean.com/community/tutorials/how-to-run-multiple-php-versions-on-one-server-using-apache-and-php-fpm-on-ubuntu-18-04
* http://www.liberiangeek.net/2014/10/reset-root-password-mariadb-centos-7/
* http://ubuntuforums.org/showthread.php?t=2275033
* http://stackoverflow.com/questions/26474222/mariadb-10-centos-7-moving-datadir-woes
* https://stackoverflow.com/questions/59941858/how-to-set-root-password-in-mariadb-10-4-on-macos
* https://mariadb.com/kb/en/mariadb-package-repository-setup-and-usage/
* https://mariadb.com/kb/en/what-to-do-if-mariadb-doesnt-start/#cant-create-test-file

One thought on “Ubuntu Altında Apache, MySQL/MariaDB, PHP Kurulumu ve Veriyolu Değişimi”
  1. PHP-8 sürümünü kullanmaya geçtiğimiz için ilgili komut satırındaki php ile başlayan paketlerin php8 olarak düzenlenmesi gerekiyor. Lakin yazıyı zaten Ubuntu 22.04 için güncelleyeceğimiz için şimdilik dokunmuyorum.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir