GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo ejecutar diferentes versiones de PHP en el mismo servidor

A veces, un SysAdmin recibe solicitudes extrañas. Por ejemplo:hace un par de días, mi cliente necesitaba cargar un nuevo sitio, este nuevo sitio necesita PHP7.4 mientras su servidor se ejecuta con PHP7.2. Instalé entonces 7.4 pero todos los demás VirtualHosts (al menos los importantes) fallaron en php7.4. Inicialmente estaba pensando en algún tipo de contenedores pero he encontrado algo más simple. Así es como ejecutar diferentes versiones de PHP en el mismo servidor.

Mi configuración

Siempre creo o reutilizo una máquina virtual para todos mis artículos aquí. Porque siempre debes probar antes de romper algo importante.
Para este tutorial, he creado una nueva instalación de un ¿antiguo? Servidor Ubuntu 18.04. Tendré un sitio, sitio1 (sitio es sitio en español) que necesita PHP 7.2; y otro sitio que necesita PHP 7.4, sitio2 .

1. Agregar repositorio php de Ondrej

En mis días, tenías que editar los archivos de configuración a mano. Pero ahora tenemos este paquete software-properties-common para administrar fácilmente su distribución y fuentes de software de proveedores de software independientes.

Así que nuestro primer paso es instalar ese paquete:

sudo apt-get install software-properties-common

Nuestro segundo paso es agregar el repositorio ejecutando:

sudo add-apt-repositorio ppa:ondrej/php

Preste atención a los mensajes en pantalla y siga las instrucciones. Entonces corre

sudo apt-get update

2. Instale dos versiones de PHP diferentes

2.1. PHP 7.2

El objetivo de este tutorial es mostrarle cómo logré ejecutar diferentes versiones de php en el mismo servidor. No estoy instalando (casi) ningún módulo php pero si estás leyendo esto seguro que necesitas alguno de ellos, soporte mysql por ejemplo. No olvides instalarlos.

sudo apt-get install php7.2 php7.2-fpm libapache2-mod-php7.2 libapache2-mod-fcgid

2.2PHP 7.4

Ahora repita el proceso con php 7.4. Recuerde instalar los módulos php necesarios.

sudo apt-get install php7.4 php7.4-fpm libapache2-mod-php7.4

3. Iniciar servicios fpm

Ahora necesitamos iniciar el servicio fpm para ambas versiones

sudo systemctl start php7.2-fpm
sudo systemctl start php7.4-fpm

A continuación, puede comprobar el estado de esos servicios en ejecución:

sudo systemctl estado php7.x-fpm

4. Creación de hosts virtuales

4.1 Datos de VirtualHost

Vamos a crear los primeros directorios bajo /var/www para cada VirtualHost.

mkdir /var/www/sitio1
mkdir /var/www/sitio2
chown  -R www-data:www-data /var/www

En segundo lugar, cree un archivo php en cada directorio con el siguiente contenido solo para mostrar información de php:

<?php 
phpinfo(); 
?>

4.2 Configuración de host virtual

Necesitamos crear un archivo .conf para cada sitio, con el siguiente contenido:

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>

Luego cree otro archivo /etc/apache2/sites-disponible/sitio2.conf cambiando la información adecuada (sitio1 se convierte en sitio2, php7.2 se convierte en php7.4, etc.)

5. Agregar información de DNS

O no. Quiero decir, en la vida real, deberá crear registros DNS adecuados para ambos sitios. Como esto es solo para fines de prueba y aprendizaje, solo estoy creando registros en mi /etc/hosts expediente. La dirección IP de esta máquina virtual es 192.168.122.14

Sé que puedo resolver sitio1 y sitio2.

6. Habilitando todo

Necesitamos habilitar algunos módulos de apache necesarios para manejar esta configuración. Luego, para habilitar esos hosts virtuales y, finalmente, para iniciar apache:

sudo a2enmod actions fcgid alias proxy_fcgi
sudo a2ensite sitio1
sudo a2ensite sitio2
sudo systemctl start apache2

También puede probar la configuración en busca de errores ortográficos, módulos faltantes o cualquier otro problema con apachetcl configtest .

7. tiempo de prueba

Ahora necesitamos apuntar un navegador a http://sitio1 y http://sitio2 y verificar si están ejecutando la versión de PHP correcta:

¡Hurra!. Y así es como ejecutar diferentes versiones de PHP en el mismo servidor. Ahora tengo curiosidad sobre qué otras combinaciones podría probar.

Bonificación:Ubuntu antiguo

Mi cliente en realidad tiene Ubuntu 16 que dejó de ser compatible en abril de 2021. El repositorio que tuve que agregar fue ppa:tomvlk/php-archive


Linux
  1. Ejecute múltiples versiones de PHP para diferentes dominios en NGNIX

  2. ¿Cómo usar dos versiones diferentes de Wine en la misma instalación?

  3. Cómo obtener versiones de MySQL/Apache/PHP

  4. ¿Cómo hago para que mi servidor web Golang se ejecute en segundo plano?

  5. ¿Cómo iniciar el servidor Tomcat en Linux?

Cómo instalar diferentes versiones de PHP (5.6, 7.x y 8.0) en Ubuntu

Cómo instalar varios contenedores de discursos en el mismo servidor

Cómo alojar múltiples sitios de WordPress en el mismo servidor con Docker

Cómo cambiar el nombre de host del servidor en Ubuntu

¿Cómo cambiar la zona horaria en Ubuntu 18.04 Server?

Cómo comprobar la versión de PHP en Linux