setup multipel versi php di ubuntu tanpa xampp

syarif th

zancc

2 Februari 2025

menjalankan project laravel yang masih menggunakan versi lama membuat kebutuhan akan multiple php version sangat penting. let's check this out beibeh.

Perkenalan

saya memiliki project yang masih menggunakan laravel versi 9, dimana php versi yang diperlukan untuk menjalankan aplikasi ini adalah versi 8.1. sedangkan saat artikel ini dibuat versi php terbaru adalah versi 8.4 dan laravel versi terbaru adalah versi laravel 11.

di windows bisa dengan mudah menggunakan xampp dan mengatur versi php lewat path environment nya. di ubuntu karena saya tidak mau menggunakan xampp lagi maka saya akan menginstall satu per satu tools yang dibutuhkan untuk laravel development seperti php, mysql, apache server, phpmyadmin dan composer dengan tujuan belajar.

karena di VPS biasanya kita akan men-setup satu persatu tools yang kita butuhkan maka kali ini saya semangat untuk menguliknya.

eksekusi

1. install multipel versi php

pertama kita akan menginstall tools yang diperlukan secara umum di ubuntu.

install-common-sofware
sudo apt install software-properties-common -y

selanjutanya kita akan menambahkan ppa repository milik mamang ondrej agar kita dapat menginstall php melalui apt command di ubuntu.

menambahkan-ppa-php
sudo add-apt-repository ppa:ondrej/php -y

kita akan mengupdate package list karena kita sudah menambahkan ppa repository php milik mamang ondrej

update-list-package
sudo apt update

selanjutnya kita akan menginstall php versi 8.3 dan versi 8.1 dan ditambah dengan package-package lain yang biasanya dibutuhkan untuk pengembangan web menggunakan php.

install-php83
sudo apt install php8.3 php8.3-fpm php8.3-common php8.3-mysql php8.3-xml php8.3-xmlrpc php8.3-curl php8.3-gd php8.3-imagick php8.3-cli php8.3-dev php8.3-imap php8.3-mbstring php8.3-opcache php8.3-soap php8.3-zip php8.3-intl -y
install-php8.1
sudo apt install php8.3 php8.3-fpm php8.3-common php8.3-mysql php8.3-xml php8.3-xmlrpc php8.3-curl php8.3-gd php8.3-imagick php8.3-cli php8.3-dev php8.3-imap php8.3-mbstring php8.3-opcache php8.3-soap php8.3-zip php8.3-intl -y

kita bisa check apakah php versi tertentu yang telah kita install berhasil di terminal kita.

check-php
php8.3 -v
php8.1 -v

2. setting php di apache

sebelum melakukan step ini pastikan sudah menginstall apache server di komputer kita.

install-apache-server
sudo apt install apache2

selanjutnya kita meng-enable apache modules yang diperlukan

enable-apache-modules
sudo a2enmod proxy_fcgi setenvif

setelah itu kita meng-enable php-fpm configuration, sesuaikan versi php yang telah di install dengan command ini.

enable-apache-modules
sudo a2enconf php8.1-fpm
sudo a2enconf php8.3-fpm

selanjutnya restart apache server untuk memastikan perubahan yang sudah kita lakukan di terapkan.

enable-apache-modules
sudo systemctl restart apache2

3. setting virtual host untuk setiap versi php

cara berganti versi php dengan cara lama dapat dilakukan dengan apache modules (libapache2-mod-php8.x). tapi kita akan menggunakan cara terbaru yaitu menggunakan php fpm (php8.x-fpm).

konfigurasi dari virtual host di apache biasanya terdapat di directory /etc/apache2/sites-available/. jadi kita akan menambahkan file konfigurasi untuk masing-masing versi php di dalam directory tersebut.

kita akan membuat dan membuka file tersebut dengan vim text editor. kita setting dulu untuk php versi 8.1.

file-konfigurasi-php81
sudo vim /etc/apache2/sites-available/site-php81.conf

selanjutnya di dalam file tersebut kita tambahkan konfigurasi php fpm nya.

kode-config-host-php8.1
<VirtualHost *:80>
    ServerName site-php81.local
    DocumentRoot /var/www/site-php81
 
    <FilesMatch \.php$>
        SetHandler "proxy:unix:/run/php/php8.1-fpm.sock|fcgi://localhost"
    </FilesMatch>
</VirtualHost>

selanjutnya lakukan hal yang sama untuk php versi 8.3.

file-konfigurasi-php8.3
sudo vim /etc/apache2/sites-available/site-php83.conf
kode-config-host-php8.3
<VirtualHost *:80>
    ServerName site-php83.local
    DocumentRoot /var/www/site-php83
 
    <FilesMatch \.php$>
        SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost"
    </FilesMatch>
</VirtualHost>

selanjutnya kita akan meng-enable file konfigurasi di atas dan meng-disable untuk default site dan meng-disable ini adalah optional.

enable-configuration
sudo a2ensite site-php81.conf
sudo a2ensite site-php83.conf
disable-default-site
sudo a2dissite 000-default.conf

selanjutnya reload apache service nya.

reload-apache
sudo systemctl reload apache2

jangan lupa untuk menambahkan entri untuk domain di /etc/hosts jika kita menggunakan local domain.

add-local-domain
sudo vim /etc/hosts
 
# tambahkan kode di bawah pada file hosts
127.0.0.1   site-php81.local
127.0.0.1   site-php83.local

dan terakhir pastikan documentRoot yang telah kita setting di konfigurasi virtual host tiap versi php sudah ada dan memiliki permission yang tepat.

DocumentRoot-dan-permission
sudo mkdir -p /var/www/site-php81
sudo mkdir -p /var/www/site-php83
sudo chown -R $USER:$USER /var/www/site-php81
sudo chown -R $USER:$USER /var/www/site-php83

4. berpindah-pindah versi php

untuk berpindah versi satu php ke versi lain kita bisa menggunakan update-alternatives.

switch-php-version
# List available PHP versions
sudo update-alternatives --config php
 
# Or set specific version directly
sudo update-alternatives --set php /usr/bin/php8.1
sudo update-alternatives --set php /usr/bin/php8.3

agar lebih mudah kita bisa menambahkan alias ke shell kita. di sini saya menggunakan zsh jadi saya perlu menambahkan alias ke file .zshrc.

alias-switch-php
# pvm stands for php version manager seperti NVM wkwkwwkw
alias pvm="sudo update-alternatives --config php"
 
# Or set specific version directly
alias php81="sudo update-alternatives --set php /usr/bin/php8.1"
alias php83="sudo update-alternatives --set php /usr/bin/php8.3"

sehingga di terminal kita cukup mengetikan alias nya daripada mengetik full command yang panjang.

alias-usage
pvm
# Or set specific version directly
php81
php83

penutup

cukup banyak step dan command yang kita lakukan hanya untuk membuat kita dapat berpindah-pindah versi php di ubuntu tanpa xampp. menyenangkan ini karena step step di atas adalah rangkuman dari berbagai cara yang saya dapatkan dari website orang, dan AI.

cara di atas mungkin belum tentu bekerja di mesin atau distro linux lain, tapi paling tidak it works for me HAHAHAAHAHA. semoga bermanfaat di masa depan untuk diri saya sendiri khususnya dan untuk kalian semua umumnya. matur tengkyu

ADIOSSS!