Merhaba,
Ne kadar uğraşsam da her kurulum sonrası Apache ve MariaDB’yi yeniden, kendi çalışma mantığıma göre yeniden kurmam gerekiyor.
Kendi çalışma mantığım derken; ben Ubuntu’yu kurarken
/ -> root /home /c /d
diye ayrı bölümler oluşturup kuruyorum. / -> Root dizini her kurulumda formatlanırken /home /c ve /d dizinlerine hiç dokunmuyorum. Ayrıca Timeshift ile arada root dizinini daha önceki ayarlara getirdiğim de oluyor. Bu sebeple / -> Root dizini altında kıymetli verileri tutmuyorum.
/c dizininde web siteleriyle ilgili yaptığım işleri tutarken
/d dizininde diğer film, müzik, video, youtube’a yüklediğim işlerimi yani home dizine atamadığım ne varsa burada 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 🙂
Kurulumda xdebug, curl, gd, intl, mbstring, mysql, xml 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.
sudo add-apt-repository ppa:ondrej/php sudo apt-get update
Sonrasında paket kurulumuna geçiyorum. Temel dosyaları kuruyorum.
sudo apt-get 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 sudo apt install php8.0-curl php8.0-gd php8.0-imagick php8.0-intl php8.0-mbstring sudo apt install 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 sudo apt install php8.1-curl php8.1-gd php8.1-imagick php8.1-intl php8.1-mbstring sudo apt install php8.1-mcrypt php8.1-mysql php8.1-xdebug php8.1-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 sudo a2enmod rewrite sudo a2enmod suexec sudo a2enmod include
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
Ben genel olarak şu değişiklikleri yapıyorum. Bir kısmı tamamen tercih ve ayar meselesi.
;error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT error_reporting = E_ALL & ~E_NOTICE & ~E_WARNING ;display_errors = Off display_errors = On ;short_open_tag = Off short_open_tag = 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 ;allow_url_fopen = On allow_url_fopen = Off
Ç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 apache2 restart
Karşımıza Apache2 default sayfası çıktıysa apache çalışıyor demektir.
Şimdi Apache yolumuzu değiştirelim.
sudo gedit /etc/apache2/apache2.conf
aşağıdaki kısmı buluyoruz ve yorum haline getiriyoruz
< 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
DocumentRoot /c/www/ # bu kısım supheli, test edip bakacağım #< Directory /> # Options FollowSymLinks # AllowOverride all # Directory> < Directory /c/www/> Options FollowSymLinks Options +indexes AllowOverride all Order allow,deny allow from all < / Directory>
Sonrasında virtualhost dosyasındaki documentRoot değerini düzenleyelim
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
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.
Peki iyi hoş da yukardaki iki PHP sürümünü de kurduktan sonra aralarında nasıl geçiş yapacağız?
İlk yöntem şu küçük komut ile çıkan ekrandan seçim yapmak ve sonrasında sunucuyu yeniden başlatmak.
sudo update-alternatives --config php sudo service apache2 restart
Ondan daha karışık olan yöntem ise elle açıp kapatmak.
PHP 8.0 sürümünden PHP 8.1 sürümüne geçiş yapalım.
sudo a2dismod php8.0 sudo a2enmod php8.1 sudo service apache2 restart
PHP 8.1 sürümünden PHP 8.0 sürümüne geçiş yapalım.
sudo a2dismod php8.1 sudo a2enmod php8.0 sudo service apache2 restart
Aslında site bazında da ayarlamanın bir yolu olması lazım ama, kaynakçadaki digitalocean makalesini hiç test etmedim.
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
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.