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
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.