Mostrando entradas con la etiqueta php. Mostrar todas las entradas
Mostrando entradas con la etiqueta php. Mostrar todas las entradas

viernes, 18 de julio de 2025

¿Cómo configurar dos VirtualHost en Apache2 con diferentes versiones de PHP?

Hace poco vimos como instalar y usar dos versiones distintas de php, ahora vamos a afinar más y vamos ha hacer que cada virtualHost de Apache2 use una versión distinta de PHP (por ejemplo, PHP 7.4 y PHP 8.3) en Debian 12, la forma más robusta y recomendada es usar PHP-FPM junto con el módulo proxy_fcgi de Apache. Así, cada sitio web puede ejecutar su propia versión de PHP de manera simultánea e independiente.

Pasos para la configuración:

  1. Instala y habilita los módulos necesarios de Apache:
    sudo a2enmod proxy_fcgi setenvif
    sudo systemctl restart apache2
  2. Asegúrate de tener instalados y activos los servicios PHP-FPM para cada versión
    Por ejemplo:
    sudo systemctl enable php7.4-fpm
    sudo systemctl start php7.4-fpm

    sudo systemctl enable php8.3-fpm
    sudo systemctl start php8.3-fpm
    Verifica que los sockets existan en /run/php/ (por ejemplo, php7.4-fpm.sock y php8.3-fpm.sock).

  3. Configura los archivos de VirtualHost
    Ejemplo para PHP 7.4
    Archivo: /etc/apache2/sites-available/site1.tu_dominio.conf
    <VirtualHost *:80>
        ServerAdmin admin@site1.tu_dominio
        ServerName site1.tu_dominio
        DocumentRoot /var/www/site1.tu_dominio

        <Directory /var/www/site1.tu_dominio>
            Options Indexes FollowSymLinks
            AllowOverride All
            Require all granted
        </Directory>

        <FilesMatch \.php$>
            SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost"
        </FilesMatch>

        ErrorLog ${APACHE_LOG_DIR}/site1_error.log
        CustomLog ${APACHE_LOG_DIR}/site1_access.log combined
    </VirtualHost>
    Ejemplo para PHP 8.3
    Archivo: /etc/apache2/sites-available/site2.tu_dominio.conf
    <VirtualHost *:80>
        ServerAdmin admin@site2.tu_dominio
        ServerName site2.tu_dominio
        DocumentRoot /var/www/site2.tu_dominio

        <Directory /var/www/site2.tu_dominio>
            Options Indexes FollowSymLinks
            AllowOverride All
            Require all granted
        </Directory>

        <FilesMatch \.php$>
            SetHandler "proxy:unix:/run/php/php8.3-fpm.sock|fcgi://localhost"
        </FilesMatch>

        ErrorLog ${APACHE_LOG_DIR}/site2_error.log
        CustomLog ${APACHE_LOG_DIR}/site2_access.log combined
    </VirtualHost>

  4. Habilita los sitios y recarga de Apache:
    sudo a2ensite site1.tu_dominio.conf
    sudo a2ensite site2.tu_dominio.conf
    sudo systemctl reload apache2

En conclusión:

  • Cada VirtualHost especifica su versión de PHP mediante la directiva SetHandler apuntando al socket de PHP-FPM correspondiente.
  • Puedes tener tantos sitios como necesites, cada uno con su propia versión de PHP, sin conflictos.
  • Esta configuración es válida tanto para entornos de desarrollo como de producción y es la más flexible y mantenible

.

viernes, 27 de junio de 2025

Instalar dos versiones distintas de php en Debian

Para instalar varias versiones de PHP, por ejemplo, 7.4 y 8.3 en Debian 12 , podemos usar el repositorio de Ondřej Surý, que es la fuente recomendada y más actualizada para múltiples versiones de PHP en Debian. Aquí tienes la guía paso a paso:

  1. Actualizamos el sistema:
    sudo apt update
    sudo apt upgrade -y
  2. Instalamos las dependencias que vamos a necesitar:
    sudo apt install -y lsb-release ca-certificates apt-transport-https software-properties-common curl wget
  3. Agremos el repositorio de Ondřej Surý:
    sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
    echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
    sudo apt update
  4. Instalamos php 7.4 y sus módulos necesarios:
    sudo apt install -y php7.4 php7.4-cli php7.4-fpm php7.4-mysql php7.4-curl php7.4-gd php7.4-mbstring php7.4-xml php7.4-zip
  5. Instalamos php 8.3 y sus módulos necesarios:
    sudo apt install -y php8.3 php8.3-cli php8.3-fpm php8.3-mysql php8.3-curl php8.3-gd php8.3-mbstring php8.3-xml php8.3-zip
  6. Comprobamos las instalaciones:
    php7.4 -v
    php8.3 -v
  7. Podemos cambiar la versión activa de php manualmente desde la línea de comandos:
    sudo update-alternatives --set php /usr/bin/php7.4
    O para PHP 8.3:
    sudo update-alternatives --set php /usr/bin/php8.3
  8. O Habilitar y arrancar PHP-FPM para cada versión:
    sudo systemctl enable php7.4-fpm
    sudo systemctl start php7.4-fpm
    O para PHP 8.3:
    sudo systemctl enable php8.3-fpm
    sudo systemctl start php8.3-fpm

Esta metodología es segura y ampliamente usada en entornos de producción y desarrollo.


Configuración extra para Moodle

Para usar con Moodle hay que instalar también los siguientes paquetes:

sudo apt install php7.4-intl php7.4-xmlrpc php7.4-soap

Y

sudo apt install php8.3-intl php8.3-xmlrpc php8.3-soap 

En los archivos  /etc/php/X.Y/fpm/php.ini hay que añadir o cambiar en la sección correspondiente:

max_input_vars = 5000 

Y reiniciamos los servicios php-fpm

sudo systemctl restart php7.4-fpm

sudo systemctl restart php8.3-fpm



¿Qué diferencia, ventajas e inconvenientes, hay entre usar update-alternatives o php-fpm?

update-alternatives y PHP-FPM cumplen funciones distintas en la gestión de PHP en sistemas Debian:

  • update-alternatives: Herramienta del sistema para seleccionar la versión de un ejecutable por defecto en la línea de comandos (CLI), como php, phar, etc.
  • PHP-FPM: Gestor de procesos FastCGI para PHP, diseñado para servir aplicaciones web de alto rendimiento, gestionando pools de procesos PHP que atienden peticiones web a través de sockets o puertos TCP.

Cuadro comparativo:

Característicaupdate-alternativesPHP-FPM
PropósitoSelección de versión de ejecutable CLIProcesamiento eficiente de peticiones web PHP
ÁmbitoLínea de comandos y scripts del sistemaServidores web (Apache, Nginx, etc.)
Cambio de versiónAfecta solo a la CLI (no al servidor web)Cada pool puede usar una versión diferente
ConcurrenciaNo aplicaManeja múltiples peticiones concurrentes
PersonalizaciónLimitada a la selección de ejecutablePools configurables por usuario, dominio, etc.

 

Consideraciones:

  • Cambiar la versión de PHP con update-alternatives solo afecta a la CLI, no a los sitios web servidos por PHP-FPM.
  • Para que un servidor web use una versión específica de PHP-FPM, debes apuntar el socket o puerto correspondiente en la configuración del servidor web.
  • No puedes tener un único socket genérico para alternar versiones de PHP-FPM sin perder la posibilidad de ejecutar varias versiones simultáneamente.
  • PHP-FPM es imprescindible para entornos web modernos y de alto tráfico, mientras que update-alternatives es útil para scripts y tareas del sistema.

También hay un artículo para usar distintas versiones de php en distintos virtualhost con Apache.