GNU/Linux >> Linux Esercitazione >  >> Linux

Come eseguire diverse versioni di PHP sullo stesso server

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


Linux
  1. Esegui più versioni di PHP per diversi domini in NGNIX

  2. Come faccio a far funzionare in background il mio server web Golang?

  3. Come posso eseguire un comando diverso ma con gli stessi argomenti?

  4. Come assegnare diversi indirizzi IP statici alla stessa macchina a seconda del suo sistema operativo?

  5. Come posso reindirizzare i sottodomini a una porta diversa sullo stesso server?

Come installare diverse versioni di PHP (5.6, 7.x e 8.0) in Ubuntu

Come installare più contenitori di discorsi sullo stesso server

Come ospitare autonomamente più siti WordPress sullo stesso server con Docker

Come modificare il nome host del server in Ubuntu

Come modificare il fuso orario su Ubuntu 18.04 Server?

Come controllare la versione PHP su Linux