A volte un SysAdmin riceve strane richieste. Ad esempio:un paio di giorni fa il mio cliente ha bisogno di caricare un nuovo sito, questo nuovo sito ha bisogno di PHP7.4 mentre il loro server funziona con PHP7.2. Ho installato quindi 7.4 ma tutti gli altri VirtualHost (almeno quelli importanti) hanno rotto con php7.4. Inizialmente stavo pensando a qualche tipo di contenitore ma ho trovato qualcosa di più semplice. Ecco come eseguire diverse versioni di PHP sullo stesso server.
La mia configurazione
Creo o riutilizzo sempre una macchina virtuale per tutti i miei articoli qui. Perché dovresti sempre testare prima di rompere qualcosa di importante.
Per questo tutorial ho creato una nuova installazione di un vecchio? Server Ubuntu 18.04. Avrò un sito, sitio1 (sitio è un sito in spagnolo) che necessita di PHP 7.2; e un altro sito che necessita di PHP 7.4, sitio2 .
1. Aggiungi repository php Ondrej
Ai miei tempi dovevi modificare manualmente i file di configurazione. Ma ora abbiamo questo pacchetto software-proprietà-comune per gestire facilmente la tua distribuzione e le fonti software dei fornitori di software indipendenti.
Quindi il nostro primo passo è installare quel pacchetto:
sudo apt-get install software-properties-common

Il nostro secondo passaggio consiste nell'aggiungere effettivamente il repository eseguendo:
sudo add-apt-repository ppa:ondrej/php

Presta attenzione ai messaggi sullo schermo e segui le istruzioni. Quindi esegui
sudo apt-get update
2. Installa due diverse versioni di PHP
2.1. PHP 7.2
L'obiettivo di questo tutorial è mostrarti come sono riuscito a eseguire diverse versioni di php sullo stesso server. Non sto installando (quasi) nessun modulo php ma se stai leggendo questo ne avrai sicuramente bisogno di alcuni, ad esempio il supporto di mysql. Non dimenticare di installarli.
sudo apt-get install php7.2 php7.2-fpm libapache2-mod-php7.2 libapache2-mod-fcgid

2.2 PHP 7.4
Ora ripeti il processo con php 7.4. Ricordati di installare i moduli php necessari.
sudo apt-get install php7.4 php7.4-fpm libapache2-mod-php7.4

3. Avvia i servizi fpm
Ora dobbiamo avviare il servizio fpm per entrambe le versioni
sudo systemctl start php7.2-fpm sudo systemctl start php7.4-fpm
Puoi quindi controllare lo stato di quei servizi in esecuzione:
sudo systemctl stato php7.x-fpm

4. Creazione dei VirtualHost
4.1 Dati di VirtualHost
Creeremo le prime directory sotto /var/www per ogni VirtualHost.
mkdir /var/www/sitio1 mkdir /var/www/sitio2 chown -R www-data:www-data /var/www
In secondo luogo, crea un file php su ogni directory con il seguente contenuto solo per mostrare le informazioni php:
<?php
phpinfo();
?>

4.2 Configurazione VirtualHost
Dobbiamo creare un file .conf per ogni sito, con il seguente contenuto:
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>
Crea un altro file /etc/apache2/sites-available/sitio2.conf modificando le informazioni corrette (sitio1 diventa sitio2, php7.2 diventa php7.4 ecc.)

5. Aggiungi informazioni DNS
O no. Voglio dire, nella vita reale dovrai creare record DNS adeguati per entrambi i siti. Poiché questo è solo a scopo di test e apprendimento, sto creando record solo sul mio /etc/hosts
file. L'indirizzo IP di questa macchina virtuale è 192.168.122.14

So di essere in grado di risolvere sitio1 e sitio2.
6. Abilitando tutto
Dobbiamo abilitare alcuni moduli Apache necessari per gestire questa configurazione. Quindi per abilitare quegli host virtuali e infine per avviare apache:
sudo a2enmod actions fcgid alias proxy_fcgi sudo a2ensite sitio1 sudo a2ensite sitio2 sudo systemctl start apache2

Puoi anche testare la configurazione per errori di ortografia, moduli mancanti o qualsiasi altro problema con apachetcl configtest
.
7. tempo di prova
Ora dobbiamo puntare un browser su http://sitio1 e http://sitio2 e controllare se stanno eseguendo la versione PHP corretta:


Sìì!. Ed ecco come eseguire diverse versioni di PHP sullo stesso server. Ora sono curioso di sapere quali altre combinazioni potrei provare.
Bonus:Ubuntu più vecchio
Il mio cliente in realtà ha Ubuntu 16 che ha cessato il supporto nell'aprile 2021. Il repository che dovevo aggiungere era ppa:tomvlk/php-archive