Mostrando entradas con la etiqueta lamp. Mostrar todas las entradas
Mostrando entradas con la etiqueta lamp. 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.


sábado, 12 de noviembre de 2016

Instalar y configurar LAMP en Centos 7

La instalación de LAMP en Centos tiene una serie de pasos:

Instalación y preparación del propio Centos

  • Para evitarnos problemas nos instalamos Centos 7 Everything ISO.
  • Configuramos la red para que se inicie al principio:
Editamos un archivo que se debe llamar algo como /etc/sysconfig/network-scripts/ifcfg-eno16777736 para que tenga un aspecto similar a este (subrayado en verde lo que hay que cambiar):
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eno16777736
UUID=8bb9564b-95c6-49ee-832d-a76e4063964d
DEVICE=eno16777736
ONBOOT=yes 
PEERDNS=yes 
PEERROUTES=yes

Instalación y configuración de LAMP

  • Actualizamos el sistema e instalamos los siguientes paquetes:
su -
yum update
yum upgrade
yum install httpd mysql mariadb-server php php-mysql phpmyadmin -y
  • Iniciamos los servicios:
service httpd start
chkconfig httpd on
systemctl start mariadb.service
systemctl enable mariadb.service
  • Configuramos el cortafuegos:
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
  • Para que el cambio del cortafuegos se quede de forma permanente editamos el archivo /etc/rc.local y añadimos esa línea al final
  • Definimos las contraseñas y seguridad en mariadb
mysql_secure_installation
Y ya está, es un poco más difícil que en otras distros pero es bastante seguro y robusto, si tenemos el hardware adecuado se podría utilizar en un entorno de producción.

Fuentes

sábado, 17 de septiembre de 2016

¿Cómo seguir usando Moodle en un servidor actualizado a Ubuntu 16.04? (u otros programas que requieran php 5.x)

El problema

Los que uséis vuestro Ubuntu para probar moodle os habréis llevado una desagradable sorpresa, no funciona.
La razón es que el nuevo Ubuntu trae la versión 7.0 de php y moodle todavía no soporta esta versión, así que hay que volver a alguna versión que si lo soporte, posiblemente otros usuarios de otros CMS y LMS tengáis este mismo problema por lo que este artículo también os será útil.
Si estáis en Ubuntu 14.04, tenéis estas necesidades y todavía no habéis actualizado, ESPERAD (posiblemente este problema también se produzca con las últimas versiones de algunas distribuciones, en realidad no es un error).

Una solución

Hay una manera de instalar diversas versiones de php y que convivan juntas para ello tendremos que hacer lo siguiente:
  1. Añadir un nuevo repositorio y actualizar:
    sudo add-apt-repository ppa:ondrej/php
    sudo apt-get update
  2. Instalar todos los paquetes necesarios para moodle para la versión 5.6 de php:
    sudo apt-get install php7.0 php5.6 php5.6-mysql php-gettext php5.6-mbstring php-xdebug libapache2-mod-php5.6 libapache2-mod-php7.0 php5.6-curl php5.6-gd php5.6-xmlrpc php5.6-intl php5.6-zip php5.6-soap
  3. Activamos la versión de php 5.6
    sudo a2dismod php7.0 ; sudo a2enmod php5.6 ; sudo service apache2 restart
    sudo ln -sfn /usr/bin/php5.6 /etc/alternatives/php
  4. Efectivamente, hemos reiniciado el ordenador... no basta con reiniciar apache.
Cuando una futura versión de moodle ya soporte php 7.0 podemos volver a dicha versión con el comando:
sudo a2dismod php5.6 ; sudo a2enmod php7.0 ; sudo service apache2 restart
sudo ln -sfn /usr/bin/php7.0 /etc/alternatives/php
Posiblemente tendrás que instalar de nuevo los módulos necesarios pero para la versión 7.0

Fuentes

Ubuntu Moodle

viernes, 20 de noviembre de 2015

Instalar moodle en Lubuntu 14.04 32 bits

Vamos a instalar la última versión de moodle en Lubuntu 14.04 32 bits.
  • Instalamos LAMP y todos los paquetes necesarios:
sudo apt-get update
sudo apt-get -y upgrade
sudo apt-get install lamp-server^
(hay que definir una contraseña para mysql
sudo apt-get install php5-curl php5-gd php5-xmlrpc php5-intl
sudo /etc/init.d/apache2 graceful
  • Comprobamos que funciona apache abriendo desde el navegador la dirección http://localhost , si lo hemos hecho bien aparecerá la página de bienvenida de apache.
  • Nos descargamos la última versión de moodle y la descomprimimos en /var/www/html/moodle 
  • Damos los permisos y preparamos los archivos para la instalación:
cd /var/www/html
sudo chown -R root.www-data moodle
sudo chgrp -R www-data moodledatasudo find moodle -type d -exec chmod 750 {} \;
sudo find moodle -type f -exec chmod 640 {} \;
cd /opt
sudo mkdir moodledata
sudo find moodledata -type d -exec chmod 770 {} \;
sudo find moodledata -type f -exec chmod 660 {} \;
  •  Creamos un usuario con los permisos adecuados en mysql
mysql -u root -p
CREATE USER 'moodleuser'@'localhost' IDENTIFIED BY 'clave_usuario';
create database moodledb;
GRANT ALL PRIVILEGES ON moodledb.* TO 'moodleuser'@'localhost';
exit;
  • Iniciamos el asistente de instalación de moodle simplemente entrando en un página http://localhost/moodle
  • Elegimos nuestro idioma, en mi caso Español - internacional (es)
  • Ponemos como directorio de datos: /opt/moodledata
  • Elegimos el motor de la base de datos (mysql o maría)
  • Rellenamos los ajustes de la base de datos según la configuración que hemos creado antes.
  • Como no podrá crear el archivo de configuración por permisos, copiamos el contenido del cuadro de configuración en el archivo /var/www/html/moodle/config.php
  • Le vamos dando a Continuar hasta que nos pregunte por la configuración de la cuenta de administrador principal.
  • Le damos a Actualización de información personal y rellenamos los ajustes de la página principal.
  • Por último le damos a guardar y ya está.
Muchos pasos pero no ha sido tan difícil.



miércoles, 7 de octubre de 2015

Instalando LAMP en Centos 6

La instalación de LAMP en Centos tiene una serie de pasos:

Instalación y preparación del propio Centos

Editamos un archivo que se debe llamar algo como /etc/sysconfig/network-scripts/ifcfg-eth0 para que tenga un aspecto similar a este (subrayado en verde lo que hay que cambiar):
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=no
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eno16777736
UUID=8bb9564b-95c6-49ee-832d-a76e4063964d
DEVICE="eth0"
ONBOOT=yes
PEERDNS=yes
PEERROUTES=yes

Instalación y configuración de LAMP

  • Actualizamos el sistema e instalamos los siguientes paquetes:
su -
yum update
yum upgrade
yum install httpd mysql mysql-server php php-mysql -y
  • Iniciamos los servicios:
service httpd start
chkconfig httpd on
service mysqld start
chkconfig mysqld on
  • Configuramos el cortafuegos:
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
  • Para que el cambio del cortafuegos se quede de forma permanente añadimos las líneas anteriores al archivo /etc/sysconfig/iptables quitándole a cada una la palabra iptables
  • Definimos las contraseñas y seguridad en mysql
mysql_secure_installation
Y ya está, es un poco más difícil que en otras distros pero es bastante seguro y robusto, si tenemos el hardware adecuado se podría utilizar en un entorno de producción, por lo menos hasta 2020 que es cuando termina el soporte.

Fuentes