DEV Community

Fega Suseno
Fega Suseno

Posted on

Using Multiple PHP Version on Linux

Pada postingan ini kita akan membahas bagaimana cara menggunakan multiple php version. Kadang kita pernah menemui kasus dimana harus mengerjakan project apps yang berbeda dengan teknologi dan versi php yg berbeda. Sebagai contoh kita ingin menjalankan project Laravel 11 php8 dan Codeigniter 4 php7 yang mana keduanya berjalan dengan versi php yg berbeda. Sebenarnya ada cara yg lebih simple yaitu dengan menggunakan docker container, tapi kita akan bahas di postingan berikutnya. Untuk saat ini kita bahas bagaimana cara menginstall, config dan running multiple php pada host.

Oke pertama kita perlu setup webserver kita pakai Apache2 dan setup PHP yg akan di gunakan.

apt install apache2
Enter fullscreen mode Exit fullscreen mode

Kita akan menginstall dari PPA repository, jadi kita perluh menambahkan repositorynya terlebih dahulu

apt-get install software-properties-common -y
Enter fullscreen mode Exit fullscreen mode

Itu berguna supaya bisa menjalankan perintah add-apt-repository. Selanjutnya menambahkan repository dengan perintah berikut

add-apt-repository ppa:ondrej/php
Enter fullscreen mode Exit fullscreen mode
apt update -y
Enter fullscreen mode Exit fullscreen mode

Kita install PHP versi 7.2

apt-get install php7.2 php7.2-fpm php7.2-mysql libapache2-mod-php7.2 libapache2-mod-fcgid -y
Enter fullscreen mode Exit fullscreen mode

Lalu kita install PHP versi 8, karena vps saya Ubuntu 24.04 jadi default adalah PHP 8.3. Untuk installnya tanpa mencantumkan versi seperti berikut.

apt-get install php php-fpm php-mysql libapache2-mod-php libapache2-mod-fcgid -y
Enter fullscreen mode Exit fullscreen mode

Jalankan php-fpm

systemctl start php7.2-fpm
Enter fullscreen mode Exit fullscreen mode
systemctl start php8.3-fpm
Enter fullscreen mode Exit fullscreen mode

Lalu aktifkan beberapa modul berikut agar bisa menggunakan multiple php version

a2enmod actions fcgid alias proxy_fcgi
Enter fullscreen mode Exit fullscreen mode

Kemudian restart service apache untuk apply semua perubahan.

systemctl restart apache2
Enter fullscreen mode Exit fullscreen mode

Okeh kita lanjutkan untuk setup virtualhost pada web server.

mkdir /var/www/app1
mkdir /var/www/app2
Enter fullscreen mode Exit fullscreen mode

Atur juga permission dan ownernya

chown -R www-data:www-data /var/www/app1
chown -R www-data:www-data /var/www/app2
chmod -R 775 /var/www/app1
chmod -R 775 /var/www/app2
Enter fullscreen mode Exit fullscreen mode

Lanjutkan mengkonfigurasi site-availible pada apache2, kita buat file confignya dulu.

karena kita tidak memiliki domain maka pada vhost kita akan bedakan dengan port. Port 80 running php7.2 dan port 90 running php8.3

nano /etc/apache2/sites-available/app1.conf
Enter fullscreen mode Exit fullscreen mode

lalu paste config berikut

+<VirtualHost *:80>
+     ServerAdmin app1
+     ServerName app1.com
+     DocumentRoot /var/www/app1
+     DirectoryIndex info.php

+     <Directory /var/www/app1>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
     </Directory>

    <FilesMatch \.php$>
        # From the Apache version 2.4.10 and above, use the SetHandler to run PHP as a fastCGI process server
+         SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost"
    </FilesMatch>

     ErrorLog ${APACHE_LOG_DIR}/site1.your_domain_error.log
     CustomLog ${APACHE_LOG_DIR}/site1.your_domain_access.log combined
</VirtualHost>
Enter fullscreen mode Exit fullscreen mode

Buat file config satu lagi untuk php versi 8 nya

nano /etc/apache2/sites-available/server2.conf
Enter fullscreen mode Exit fullscreen mode

pastekan juga konfignya

+<VirtualHost *:90>
+     ServerAdmin site2
+    ServerName site2.com
+     DocumentRoot /var/www/app2
+     DirectoryIndex info.php

+     <Directory /var/www/app2>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
     </Directory>

    <FilesMatch \.php$>
        # From the Apache version 2.4.10 and above, use the SetHandler to run PHP as a fastCGI process server
+         SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost"
    </FilesMatch>

     ErrorLog ${APACHE_LOG_DIR}/site1.your_domain_error.log
     CustomLog ${APACHE_LOG_DIR}/site1.your_domain_access.log combined
</VirtualHost>
Enter fullscreen mode Exit fullscreen mode

Pada bagian warna hijau adalah beberapa baris konfigurasi yang perlu di ubah sesuai kondisi dan kebutuhan kita

Lalu test apakah ada config yg salah atau tidak, pastikan syntax ok agar bisa melanjutkan ke tahap berikutnya

apachectl configtest
Enter fullscreen mode Exit fullscreen mode

Selanjutnya kita aktifkan konfigurasi virtualhostnya

a2ensite app1.conf
a2ensite app2.conf
Enter fullscreen mode Exit fullscreen mode

Jangan lupa untuk disable default confignya

a2dissite 000-default.conf
Enter fullscreen mode Exit fullscreen mode

karena kita menggunakan port yg berbeda di virtualhostnya maka perlu kita daftarkan terlebih dahulu.

nano /etc/apache2/ports.conf
Enter fullscreen mode Exit fullscreen mode

Tambahkan pada baris yg saya warnai hijau

Listen 80
+ Listen 90


<IfModule ssl_module>
        Listen 443
</IfModule>

<IfModule mod_gnutls.c>
        Listen 443
</IfModule>
Enter fullscreen mode Exit fullscreen mode

Jika semua sudah dilakukan kita hanya perlu merestart servernya dan lakukan ujicoba

systemctl restart apache2
Enter fullscreen mode Exit fullscreen mode

Lakukan uji coba dengan mengakses alamat IP beserta port. Saya sarankan untuk membuat file info.php yg berisi function phpinfo(); pada setiap document rootnya.

silakan akses http://ip-server:port untuk ujicoba

Semoga bermanfaat dan selamat mencoba

Top comments (0)