Özellikle sürekli gelişen Laravel, Symfony gibi frameworklerle çalışırken doğru Virtual Host yapılandırmaları çok önemli. 

Girizgahı okumak istemiyorsanız buradan direkt kurulum işlemlerine atlayabilirsiniz.

Versiyonlar arasında geçiş için basit bir switch işlemi birçok farklı sürümle çalışırken ciddi faydalar sağlayacak. Her ne kadar sunucu ortamını simüle eden docker ile çalışmak uyumluluk sorunlarını en aza indirgese de hareket kabiliyetini zayıflattığı bir gerçek. Çok fazla kısa süreli projelerle ilgilenen kişiler için bu bir zorluk yaratacaktır. Docker konfigürasyonları ile çok fazla zaman harcamak ve docker çöplüğüne dönüşen bilgisayarınızda php ağırlıklı çalışmanın daha kolay yöntemi bir LAMP yığını olabilir.

Önce yeni başlayanlar için kısaca LAMP'ın ne olduğundan bahsedelim

LAMP yığını, Linux, Apache, MySQL ve PHP gibi önemli açılımları içeren bir web sunucusudur. Bu açılım, web sunucusunun çalışması için gerekli olan işletim sistemi, web sunucusu, veritabanı ve programlama dili gibi temel unsurları kapsamaktadır. Linux, işletim sistemi olarak kullanılır ve çok sayıda uygulamayı çalıştırmak için güçlü bir çekirdek ve geniş bir kullanıcı topluluğu sunar.

Apache, web sunucusu olarak kullanılır ve HTTP isteklerini yönetmek için tasarlanmıştır. MySQL, veritabanı olarak kullanılır ve verileri saklamak ve yönetmek için kullanılır. PHP, programlama dili olarak kullanılır ve web uygulamalarının dinamik olarak oluşturulmasını sağlar.

LAMP yığınının en büyük avantajlarından biri, ücretsiz ve açık kaynak kodlu olmasıdır. Bu, kullanıcıların ücretsiz olarak kurulum, yapılandırma ve bakım gibi işlemleri gerçekleştirmelerine olanak tanır. Ayrıca, bu yığın Linux, Apache, MySQL ve PHP gibi popüler ve meşhur araçları içermektedir ve bu nedenle, çok sayıda web uygulamasının geliştirilmesi ve yönetilmesi kolaydır. Bu yüzden özellikle küçük ve orta ölçekli işletmeler için idealdir.

APACHE2 Kurulumu

Önce Ubuntu depolarımızı güncelleyelim ve apache kurulumunu başlatalım. Farklı distrolar kullananlar bu tip kodları kendi distrosuna göre uyarlayabilir. 

Örneğin Fedora için : dnf check-update && dnf upgrade -y gibi.

sudo apt-get update && apt-get upgrade -y
sudo apt install apache2

Şimdi UFW ayarlarını yapalım ve Apache için 80 portunun çıkışına izin verelim. 

UFW, Ubuntu işletim sistemi için kurulumu ve kullanımı kolay bir güvenlik duvarı aracıdır. UFW, Uncomplicated Firewall olarak adlandırılmaktadır. Duvar, bir ağın giriş ve çıkış trafiğini kontrol etmek için kullanılır. (?)

sudo ufw app list

Burada bize kurulum seçenekleri görünüyor. Apache sadece 80 portuna izin verir, Apache Full 80 ve 443 portlarına izin verir, Apache Secure ise sadece 443 portuna izin verir. Kısaca 80 portu şifrelenmemiş olan http trafiğini, 443 ise TLS/SSL ile şifrelenmiş https trafinğini ifade eder.

Buradan https ile çalışma gereksinimiz olma ihtimali yüksek olacağı için Apache Full seçiyoruz;

sudo ufw allow in "Apache Full"

İşlem tamamlandığında bilgisayarınız için "ben" anlamına gelen ip'den yani http://127.0.0.1 adresinden Default Apache sayfasına erişim sağladığınızı görmelisiniz. Buraya kadar sorun yoksa devam edebiliriz.

MYSQL Kurulumu

Mysql Server paketini depodan kuralım

sudo apt install mysql-server

Şimdi mysql server için bir şifre belirleyelim.
Aşağıdaki kodlar ile parola validasyonu aktifse deaktif ediyoruz. 
Ardından mysql kullanıcıları listelenecek. Burada root'un şifre alanının boş olduğunu göreceksiniz.

sudo mysql
UNINSTALL COMPONENT "file://component_validate_password";
SELECT user,authentication_string,plugin,host FROM mysql.user;

Şimdi bunu istediğimiz şifre ile değiştirelim. your_password yazan kısımda basit bir şifre yazabilirsiniz. Localinizde olacağı için spesifik bir şifreye gerek yok;

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
FLUSH PRIVILEGES;
exit

PHP Kurulumu

PHP son sürümü apache modu ve mysql pakedi ile kuralım;

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

Buradaki sürümü not alın örn.: php8.2

Şimdi bunu manuel kurmuş gibi göstermemiz gerekecek çünkü eski php sürümlerini destekleyen projeler için geçiş yapmamız gerekecek.

sudo apt install php8.2

Eski PHP sürümlerini indirebilmek için ondrej deposunu kullanacağız;

sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update

sudo apt install php5.6  && sudo apt install php7.4 && sudo apt install php7.1  -y

Genellikle üstteki üç php sürümü eski sürümleri test edebilmeniz için yeterli olacaktır.  Daha fazlasına ihtiyacınız olursa php7.0 & php7.2 && php7.3 sürümlerini de indirebilirsiniz.

İhtiyaç duyabileceğiniz php paketlerini yükleyelim;

sudo apt install php8.2-common php-bz2 php-curl php-gd php-imagick php-intl php-json php-json-schema php-log php-mbstring php-memcache php-memcached php-mime-type php-mongodb php-mysql php-net-socket php-net-whois php-parser php-readline php-redis php-soap php-tokenizer php-yaml php-zip php8.2-bcmath php8.2-bz2 php8.2-common php8.2-curl php8.2-gd php8.2-xml php8.2-zip php8.2-xmlrpc php8.2-cli libphp8.2-embed php8.2-fpm php8.2-cgi php8.2-phpdbg libapache2-mod-php php-mysql php8.2-mbstring -y 

Buradaki 8.2 sürümünü bir dosyada CTRL+H ile 7.4 ile değiştitirseniz ilgili versiyonun paketlerini de eklemiş olursunuz.

Daha fazla paket yüklemek için şuradan paket isimlerini listeleyip seçebilirsiniz;

apt search php- | less

Şimdi genel ayarları yapalım;

sudo nano /etc/apache2/mods-enabled/dir.conf 
 # change to : index.php index.html ..

Dosyayı açın ve index.html'in hemen önüne index.php ekleyin. 

Ardından .htacces dosyaları ve çokbaytlı karakter desteği için aşağıdaki kodu çalıştırın;

sudo a2enmod rewrite && phpenmod mbstring

Htaccess için birkaç işlem daha yapmamız gerekiyor. Aşağıdaki komutla apache2.conf dosyamızı açalım;

sudo nano /etc/apache2/apache2.conf

AllowOverride ayarını All olarak değiştirelim;

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

Sanal Konak (Virtual Host) Oluşturalım

Diyelim ki ugurakcil.com domaininiz var. Aşağıda your_domain yazan kısımları bu durumda ugurakcil olarak değiştirmelisiniz;

sudo mkdir /var/www/your_domain

Klasörlerin (ve alt klasörlerinin) sahiplik durumlarını ayarla;

sudo chown -R $USER:$USER /var/www/your_domain

Klasörler (ve alt klasörlerin) erişim sınırlamalarını değiştir;

sudo chmod -R 755 /var/www/your_domain

Virtual Host dosyasını tanımla;

sudo nano /etc/apache2/sites-available/your_domain.my.conf

Açtığınız dosyaya your_domain'leri değiştirip aşağıdakini konfigürasyonları ekleyein;

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName your_domain.my
    ServerAlias www.your_domain.my
    DocumentRoot /var/www/your_domain
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Ardından konfigürasyonları apache'ye dahil edelim;

sudo a2ensite your_domain.my.conf

Herhangi bir sözdizimi hatası yapıp yapmadığınızı kontrol etmek için sudo apache2ctl configtest kullanabilirsiniz. Syntax: OK yazıyorsa endişe edecek birşey yok. Ancak bir uyarı mesajı göreceksiniz;

AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message

Bu sorundan kurtulmak için;

sudo echo "ServerName 127.0.0.1" >> /etc/apache2/apache2.conf

Tabii ki websitemiz adresimizin 127.0.0.1'e gitmesi için /etc/hosts dosyamızı da düzenlememiz gerekiyor;

sudo nano /etc/hosts ile dosyayı açtıktan sonra en alta 127.0.0.1 your_domain.my yeni satır olarak eklenebilir. 
Ya da direkt aşağıdaki komutla hosts dosyasına yazdırabilirsiniz;

echo "127.0.0.1 your_domain.my" >> /etc/hosts
systemctl restart apache2

Şimdi domaini yönlendirdiğiniz dizine bir index.php oluşturarak your_domain.my adresinizi tarayıcıdan test edin.

PHPMyAdmin Kurulumu

sudo apt install gettext
sudo apt install phpmyadmin php-mbstring -y

Kurulum sırasında çıkan ekranlarda kullanıcı adı kısmına root ve şifre kısmına mysql için daha önce belirlediğiniz şifreyi girebilirsiniz. Parola hatası alırsanız retry seçeneği ile tekrar işlemleri yapın ve kontrol edin. Bunun dışında kalan tüm kısımlar için evet seçenekleri ve ilk seçenekleri seçip ilerleyebilirsiniz.

Aktif kullandığınız dil için dil yapılandırmasına ihtiyaç duyabilirsiniz. Örnek olarak Türkçe için aşağıdaki komut ortam dil desteğini sağlayacaktır;

locale-gen  tr_TR.UTF-8

PHPMyAdmin konfigürasyonlarını apache'ye kısayol oluşturalım

sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-available/phpmyadmin.conf
sudo a2enconf phpmyadmin
sudo systemctl restart apaache2

şu an tarayıcınızdan 127.0.0.1/phpmyadmin yazarak phpmyadmin'e erişebilmelisiniz

PHP Version Değiştirmek

PHP versiyonunu değiştirmek için aşağıdaki kodları uyarlayıp çalıştırabilirsiniz.

Örneğin PHP 5.6'yı aktif etmek için;

sudo update-alternatives --set php /usr/bin/php5.6
sudo 2dismod php8.2
sudo a2enmod php5.6
sudo service apache2 restart

Eğer PHP 8.2'e tekrar dönmek isterseniz,

sudo update-alternatives --set php /usr/bin/php8.2
sudo 2dismod php5.6
sudo a2enmod php8.2
sudo service apache2 restart