Terkadang SysAdmin menerima permintaan aneh. Misalnya:beberapa hari yang lalu klien saya perlu mengunggah situs baru, situs baru ini membutuhkan PHP7.4 sementara server mereka berjalan dengan PHP7.2. Saya telah menginstal 7.4 tetapi semua VirtualHost lainnya (setidaknya yang penting) rusak di bawah php7.4. Awalnya saya memikirkan beberapa jenis wadah tetapi saya menemukan sesuatu yang lebih sederhana. Ini adalah cara menjalankan versi PHP yang berbeda di server yang sama.
Penyiapan saya
Saya selalu membuat atau menggunakan kembali mesin virtual untuk semua artikel saya di sini. Karena Anda harus selalu menguji sebelum memecahkan sesuatu yang penting.
Untuk tutorial ini saya telah membuat instalasi baru dari file lama? Server Ubuntu 18.04. Saya akan memiliki situs, sitio1 (sitio adalah situs dalam bahasa Spanyol) yang membutuhkan PHP 7.2; dan situs lain yang membutuhkan PHP 7.4, sitio2 .
1. Tambahkan repositori php Ondrej
Kembali di hari-hari saya, Anda harus mengedit file konfigurasi dengan tangan. Tetapi sekarang kami memiliki paket perangkat lunak-properti-umum untuk mengelola distribusi Anda dan sumber perangkat lunak vendor perangkat lunak independen dengan mudah.
Jadi langkah pertama kami adalah menginstal paket itu:
sudo apt-get install software-properties-common
Langkah kedua kami adalah menambahkan repositori dengan menjalankan:
sudo add-apt-repository ppa:ondrej/php
Perhatikan pesan di layar dan ikuti petunjuknya. Kemudian jalankan
sudo apt-get update
2. Instal dua versi PHP yang berbeda
2.1. PHP 7.2
Tujuan dari tutorial ini adalah untuk menunjukkan kepada Anda bagaimana saya berhasil menjalankan versi php yang berbeda di server yang sama. Saya tidak menginstal (hampir) modul php apa pun tetapi jika Anda membaca ini, Anda pasti membutuhkan beberapa di antaranya, dukungan mysql misalnya. Jangan lupa untuk menginstalnya.
sudo apt-get install php7.2 php7.2-fpm libapache2-mod-php7.2 libapache2-mod-fcgid
2.2 PHP 7.4
Sekarang ulangi proses dengan php 7.4. Ingatlah untuk menginstal modul php yang diperlukan.
sudo apt-get install php7.4 php7.4-fpm libapache2-mod-php7.4
3. Mulai layanan fpm
Sekarang kita perlu memulai layanan fpm untuk kedua versi
sudo systemctl start php7.2-fpm sudo systemctl start php7.4-fpm
Anda kemudian dapat memeriksa status layanan yang berjalan:
sudo systemctl status php7.x-fpm
4. Membuat VirtualHost
4.1 data VirtualHost
Kami akan membuat direktori pertama di bawah /var/www untuk setiap VirtualHost.
mkdir /var/www/sitio1 mkdir /var/www/sitio2 chown -R www-data:www-data /var/www
Kedua, buat file php di setiap direktori dengan konten berikut hanya untuk menampilkan informasi php:
<?php
phpinfo();
?>
4.2 Konfigurasi VirtualHost
Kita perlu membuat file .conf untuk setiap situs, dengan konten berikut:
nano /etc/apache2/sites-available/sitio1.conf <VirtualHost *:80> ServerAdmin admin@sitio1 ServerName sitio1 DocumentRoot /var/www/sitio1 DirectoryIndex info.php <Directory /var/www/sitio1> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> <FilesMatch \.php$> # this part do the trick SetHandler "proxy:unix:/run/php/php7.2-fpm.sock|fcgi://localhost" </FilesMatch> ErrorLog ${APACHE_LOG_DIR}/sitio1_error.log CustomLog ${APACHE_LOG_DIR}/sitio1_access.log combined </VirtualHost>
Buat file lain /etc/apache2/sites-available/sitio2.conf mengubah informasi yang benar (sitio1 menjadi sitio2, php7.2 menjadi php7.4 dll)
5. Tambahkan informasi DNS
Atau tidak. Maksud saya, di kehidupan nyata Anda perlu membuat catatan DNS yang tepat untuk kedua situs. Karena ini hanya untuk tujuan pengujian dan pembelajaran, saya hanya membuat catatan di /etc/hosts
saya mengajukan. Alamat IP mesin virtual ini adalah 192.168.122.14
Ketahuilah bahwa saya dapat menyelesaikan sitio1 dan sitio2.
6. Mengaktifkan semuanya
Kita perlu mengaktifkan beberapa modul apache yang diperlukan untuk menangani konfigurasi ini. Kemudian untuk mengaktifkan virtualhost tersebut, dan terakhir untuk memulai Apache:
sudo a2enmod actions fcgid alias proxy_fcgi sudo a2ensite sitio1 sudo a2ensite sitio2 sudo systemctl start apache2
Anda juga dapat menguji konfigurasi untuk kesalahan ejaan, modul yang hilang, atau masalah lainnya dengan apachetcl configtest
.
7. waktu ujian
Sekarang kita perlu mengarahkan browser ke http://sitio1 dan http://sitio2 dan memeriksa apakah mereka menjalankan versi PHP yang benar:
¡Ya!. Dan ini adalah cara menjalankan versi PHP yang berbeda di server yang sama. Sekarang saya ingin tahu kombinasi apa lagi yang bisa saya coba.
Bonus:Ubuntu lama
Klien saya sebenarnya memiliki Ubuntu 16 yang tidak lagi didukung pada April 2021. Repositori yang harus saya tambahkan adalah ppa:tomvlk/php-archive