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
Kita akan menginstall dari PPA repository, jadi kita perluh menambahkan repositorynya terlebih dahulu
apt-get install software-properties-common -y
Itu berguna supaya bisa menjalankan perintah add-apt-repository
. Selanjutnya menambahkan repository dengan perintah berikut
add-apt-repository ppa:ondrej/php
apt update -y
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
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
Jalankan php-fpm
systemctl start php7.2-fpm
systemctl start php8.3-fpm
Lalu aktifkan beberapa modul berikut agar bisa menggunakan multiple php version
a2enmod actions fcgid alias proxy_fcgi
Kemudian restart service apache untuk apply semua perubahan.
systemctl restart apache2
Okeh kita lanjutkan untuk setup virtualhost pada web server.
mkdir /var/www/app1
mkdir /var/www/app2
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
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
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>
Buat file config satu lagi untuk php versi 8 nya
nano /etc/apache2/sites-available/server2.conf
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>
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
Selanjutnya kita aktifkan konfigurasi virtualhostnya
a2ensite app1.conf
a2ensite app2.conf
Jangan lupa untuk disable default confignya
a2dissite 000-default.conf
karena kita menggunakan port yg berbeda di virtualhostnya maka perlu kita daftarkan terlebih dahulu.
nano /etc/apache2/ports.conf
Tambahkan pada baris yg saya warnai hijau
Listen 80
+ Listen 90
<IfModule ssl_module>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
Jika semua sudah dilakukan kita hanya perlu merestart servernya dan lakukan ujicoba
systemctl restart apache2
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 (1)
Very nice!