Cara Jalankan Banyak Versi PHP (5.6, 7.x) dengan Apache di Ubuntu 18.04 LTS
Sering terjadi kasus developer ingin deploy beberapa aplikasi web PHP ke satu server yang sama dengan berbagai versi PHP yang berbeda. Sementara secara default di server yang tersedia hanya satu versi PHP saja. Nah, di artikel ini dibahas mengenai cara install dan setting untuk menjalankan banyak versi PHP (5,6 7.x) dengan Apache web server di Ubuntu 18.04 LTS.
1. Install Apache
Install Apache dan modul FastCGI.
1 2 | apt update apt install apache2 libapache2-mod-fcgid -y |
2. Install PHP Banyak Versi
Install PHP multi versi menggunakan repository dari PPA (Personal Package Archives), karena versi PHP yang tersedia di repository default Ubuntu 18.04 LTS yaitu PHP v7.2.
1 2 3 4 5 6 7 | add-apt-repository ppa:ondrej/php apt update apt install php5.6 php5.6-fpm -y apt install php7.0 php7.0-fpm -y apt install php7.1 php7.1-fpm -y apt install php7.2 php7.2-fpm -y apt install php7.3 php7.3-fpm -y |
Mencari nama paket modul atau extension PHP gunakan perintah apt search atau apt-cache search.
Misalnya mencari modul untuk php7.2.
1 2 | apt search php7.2 | more apt-cache search php7.2 | more |
Menguji hasil install PHP dengan menampilkan versi PHP.
1 2 3 4 5 | php5.6 -v php7.0 -v php7.1 -v php7.2 -v php7.3 -v |
Setting versi default PHP untuk php-cli, misalnya ingin memakai versi PHP 7.2 sebagai versi default.
1 2 | update-alternatives --set php /usr/bin/php7.2 php -v |
3. Setting Apache Banyak versi PHP
Aktif modul Apache yang dibutuhkan.
1 | a2enmod actions fcgid alias proxy_fcgi |
Masing-masing versi PHP dibuatkan virtualhost.
- PHP v5.6 = php56.aplikasi.oke
- PHP v7.0 = php70.aplikasi.oke
- PHP v7.1 = php71.aplikasi.oke
- PHP v7.2 = php72.aplikasi.oke
- PHP v7.3 = php73.aplikasi.oke
Membuat file virtualhost php56.aplikasi.oke.conf untuk PHP v5.6.
1 2 | cd /etc/apache2/sites-available/ nano php56.aplikasi.oke.conf |
Isi dari file virtualhost php56.aplikasi.oke.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <VirtualHost *:80> ServerName php56.aplikasi.oke DocumentRoot /var/www/php56 <Directory /var/www/php56> Options -Indexes +FollowSymLinks +MultiViews AllowOverride All Require all granted" </Directory> <FilesMatch \.php$> SetHandler "proxy:unix:/var/run/php/php5.6-fpm.sock|fcgi://localhost/" </FilesMatch> ErrorLog ${APACHE_LOG_DIR}/php56.aplikasi.oke_error.log CustomLog ${APACHE_LOG_DIR}/php56.aplikasi.oke_access.log combined </VirtualHost> |
Pada file virtualhost PHP v5.6 di atas, opsi SetHandler yang merupakan versi PHP yang mengeksekusi script file .php.
Lanjutkan dengan membuat file virtualhost untuk versi PHP yang lain, sesuaikan opsi SetHandler, ServerName, DocumentRoot, ErrorLog dan CustomLog.
Setelah semua setting virtualhost selesai, lanjut membuat direktori dan file index.php yang berisi phpinfo untuk masing-masing versi PHP.
1 2 3 4 5 6 7 | cd /var/www mkdir php56 php70 php71 php72 php73 echo '<?php phpinfo(); ?>' | sudo tee --append php56/index.php echo '<?php phpinfo(); ?>' | sudo tee --append php70/index.php echo '<?php phpinfo(); ?>' | sudo tee --append php71/index.php echo '<?php phpinfo(); ?>' | sudo tee --append php72/index.php echo '<?php phpinfo(); ?>' | sudo tee --append php73/index.php |
Terakhir aktifkan virtualhost dan restart Apache.
1 2 3 4 5 6 7 | a2ensite php56.aplikasi.oke.conf a2ensite php70.aplikasi.oke.conf a2ensite php71.aplikasi.oke.conf a2ensite php72.aplikasi.oke.conf a2ensite php73.aplikasi.oke.conf systemctl restart apache2 systemctl status apache2 |
4. Pengujian
Browsing masing-masing subdomain, tiap subdomain harus menampilkan versi PHP yang berbeda.
5. Beda Versi PHP di Direktori Tertentu
Virtualhost di atas berlaku untuk subdomain, sehingga file yang berada dalam direktori dan sub-direktori subdomain tersebut menjalankan versi PHP yang sama. Muncul pertanyaan bagaimana caranya jika masih dalam satu domain atau subdomain ingin menjalankan PHP dengan versi berbeda di direktori tertentu? Jawabannya dengan cara menambah opsi Directory di setting virtualhost.
Misalnya DocumentRoot /var/www/aplikasi.oke dengan url akses http://aplikasi.oke dan sub-direktori lain menjalankan PHP v5.6, sementara khusus untuk sub-direktori /var/www/aplikasi.oke/v2 dengan url akses https://aplikasi.oke/v2 menjalankan PHP v7.2.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <VirtualHost *:80> ServerName www.aplikasi.oke ServerAlias aplikasi.oke DocumentRoot /var/www/aplikasi.oke <Directory /var/www/aplikasi.oke> Options -Indexes +FollowSymLinks +MultiViews AllowOverride All Require all granted </Directory> <FilesMatch \.php$> SetHandler "proxy:unix:/var/run/php/php5.6-fpm.sock|fcgi://localhost/" </FilesMatch> <Directory /var/www/aplikasi.oke/v2> Options -Indexes +FollowSymLinks +MultiViews AllowOverride All Require all granted <FilesMatch \.php$> SetHandler "proxy:unix:/var/run/php/php7.2-fpm.sock|fcgi://localhost/" </FilesMatch> </Directory> ErrorLog ${APACHE_LOG_DIR}/aplikasi.oke_error.log CustomLog ${APACHE_LOG_DIR}/aplikasi.oke_access.log combined </VirtualHost> |
Selamat mencoba 🙂
bang mau tanya apa gak perlu nambahin domain di hostsnya?
targetnya mau apa? di tutorial banyak menambahkan virtual host (subdomain) hanya sebagai demo saja.
saya bikin php73.aplikasi.dev tapi keluar pesan “php73.aplikasi.dev refused to connect.”
cek status service apache, cek error log apache.
kalau setting virtualhost harus setiing dns server yah mas
– pakai server online, domain internet? pakai dns server penyedia domain.
– pakai server localhost? pakai file /etc/hosts.
Barokallah…Mantap2 tutorialnya pak Musa. ijin sy masukkan blog utk dokumentasi dengan menyertakan sumber/referensi dari pak Musa. terima kasih.
silakan om.
kalo kena blok internet tepat telkomsel kenapa ya
kalau diblokir biasanya konten website dianggap melanggar undang-undang, atau domain tersebut pernah dipakai untuk konten ilegal
Web saya pake php 7.2
Skripnya php 7.xx
Sun domainnya php7.xx migrasi dari php5.xx
Di localhost berjalan normal skrip tsb. Tapi pas dihosting ada yg tidak jalan,,
Mohon pencerahan dari Suhu,, Maklum masih newbie🙏🙏🙏
cek error log, apa yang menyebabkan error
kalau di localhost servername&serveralias diisi apa ya mas biar bisa diakses
coba bikin servername-nya di /etc/hosts
saya sudah coba bikin servernamenya di /etc/hosts tp masih error mas. direstart apache pasti error.tapi kalau file .conf di sites-available yg baru dibuat itu dihapus apache2 saya mau berjalanan dan direstart normal lgmas
coba test file konfigurasi
sudo apache2ctl -t
wah keren . work mas makasih. baru tau saya command test konfigurasi apache. trimakasih ilmunya mas
Mas musa, kalau mau instal phpmyadmin dengan multiphp seperti diatas bagaimana ya?
bisa pak, cek aja pengaturan virtual hostnya
jika kita ingin menginstall mariadb server dan phpmyadmin apakah jalan multi versi php, terkadang kalau kita ingin menjalankan phpmyadmin suka blank web phpmyadminnya ?
buatkan konfigurasi virtual host khusus phpmyadmin, pasang versi php yang sesuai dengan requirement versi phpmyadmin yang digunakan. jika blank, cek error log.