¿Cómo instalar PHP 7.2, 7.3 y 7.4 en Caddy Server?

Para instalar PHP 7.2, 7.3 o 7.4 en Ubuntu y Debian debemos de hacer uso de un repositorio externo e instalar dependencias que se necesita para la instalación y ejecución de esta nueva versión de PHP. Para ello abrimos la terminal y escribimos lo siguiente:

sudo apt-get install -y software-properties-common
sudo add-apt-repository ppa:ondrej/php

Soluciónes a los posibles problemas

Si os sale el siguiente mensaje "UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 92: ordinal not in range(128)" al ejecutar el anterior comando poner en la terminal los siguientes comandos para activar la codificación UTF-8:

apt-get update &&apt-get install -y language-pack-en-base &&export LC_ALL=en_US.UTF-8 &&export LANG=en_US.UTF-8

Si os sale "'ascii' codec can't decode byte 0xc5 in position 92: ordinal not in range(128)" debemos poner el siguiente comando:

LC_ALL=C.UTF-8 add-apt-repository -y ppa:ondrej/php

¿Cómo instalar mcrypt en PHP 7.2?


Proceso de instalación de PHP

Una vez realizados los pasos anteriores ya tenemos añadido el repositorio en nuestro servidor, ahora debemos actualizar la lista de paquetes de nuestro sistema ejecutando el siguiente comando:

sudo apt-get update

Después tenemos que proceder a instalar la versión de PHP que queramos, podemos instalar más de una versión de PHP en nuestro sistema operativo sin ningún problema, ya que en el archivo de configuración de Caddy (Caddyfile) podemos especificar que versión de PHP de las que tenemos instaladas queremos que use, eso os lo explicaré un poco más abajo en este mismo post.

Instalación de PHP 7.2

Una vez realizado el paso anterior tenemos que proceder a realizar la instalación de PHP 7.2 y de todas las dependencias básicas que necesitamos usando el siguiente comando:

sudo apt-get install -y php7.2 php7.2-fpm php7.2-cli php7.2-common php7.2-mbstring php7.2-gd php7.2-intl php7.2-xml php7.2-mysql php7.2-zip php7.2-soap php7.2-curl php7.2-xmlrpc

⚠️ NOTA: Con los comandos introducidos hasta el momento ya tenemos instalada la versión de PHP 7.2, pero esto no hará que el sistema operativo lo pueda actualizar por defecto. Para solucionar este pequeño incoveniente debemos introducir en la terminal el siguiente comando:
sudo update-alternatives --set php /usr/bin/php7.2

Instalación de PHP 7.3

sudo apt-get install -y php7.3 php7.3-fpm php7.3-cli php7.3-common php7.3-mbstring php7.3-gd php7.3-intl php7.3-xml php7.3-mysql php7.3-zip php7.3-soap php7.3-curl php7.3-xmlrpc

Instalación de PHP 7.4

sudo apt-get install -y php7.4 php7.4-fpm php7.4-cli php7.4-common php7.4-mbstring php7.4-gd php7.4-intl php7.4-xml php7.4-mysql php7.4-zip php7.4-soap php7.4-curl php7.4-xmlrpc

Configuración de PHP-FPM

Una vez terminamos la instalación de nuestra ve debemos modificar el archivo de configuración de php-fmp para que podamos php con Caddy Server, para ello tenemos entrar en el directorio donde tenemos instalada la versión de PHP que elegimos.

En el caso de tener instalado PHP7.2 deberemos usar el comando cd /etc/php/7.2/fpm, si tenemos otra versión solo tenemos que remplazar el número de la versión en el comando. Os dejo una lista con los comandos correspondientes a las 3 versiones de PHP de las que hablamos en este artículo:

cd /etc/php/7.2/fpm
cd /etc/php/7.3/fpm
cd /etc/php/7.4/fpm

Una vez realizado el paso anterior solo debemos realizar un pequeña modificación en el archivo www.conf, para ello usaremos el editor de texto "nano". Para ello debemos escribir y abrir el archivo usando el siguiente comando:

sudo nano pool.d/www.conf

Una vez estamos viendo el archivo www.conf, que abrimos usando el comando sudo nano pool.d/www.conf procedemos a descomentar la línea ";listen.mode = 0660".

Simplemente debemos eliminar el punto y coma que se encuentra al principio de esa linea, el resultado debería ser similar al siguiente:

listen.owner = www-data
listen.group = www-data
listen.mode = 0660

Una vez editado para guardar los cambios pulsamos "Control + X" y después "Y" para salvar los cambios. Una vez realizado eso añadimos el grupo "www-data" al usuario "caddy", usando el siguiente comando:

sudo usermod -a -G www-data caddy

⭐️ Nota: Esto nos permitirá estable el usuario y grupo de las carpetas de nuestro proyectos en PHP o de otro tipo tanto usando "caddy" como "www-data". Lo recomendable sería que el usuario/grupo fuera www-data. Para cambiar el usuario y grupo de una carpeta y todos los archivos de esa misma carpeta usamos el comando chwon -R www-data:www-data /ruta/carpeta.

Arrancamos el servicio de PHP-FPM

Procedemos a iniciar, activar y reiniciar el servicio PHP-FPM, con esto hacemos que se arranque cada vez que inicimos el sistema (en el caso de reinicio o apagado).

¿Qué es PHP-FPM?

PHP-FPM (FastCGI Process Manager) es la implementación alternativa más popular de PHP FastCGI, FPM se encarga de interpretar código PHP.

PHP-FPM nos sirve para conectar el servidor web (en este caso Caddy) con una o varias aplicación escritas en PHP.

Dependiendo de la versión de PHP que instalamos debemos ejecutar unos o otros comandos, pero principalmente es variar la versión del php donde pone "phpX.X-fpm", la primera X se remplazar por el número de versión en este caso la 7 y la segunda X por otro. Para que sea más simple os dejo a continuación los distintos comandos para cada versión de las que mencionamos en este post:

En el caso de PHP 7.2:

systemctl start php7.2-fpm
systemctl enable php7.2-fpm
systemctl restart php7.2-fpm

En el caso de PHP 7.3:

systemctl start php7.3-fpm
systemctl enable php7.3-fpm
systemctl restart php7.3-fpm

En el caso de PHP 7.4:

systemctl start php7.4-fpm
systemctl enable php7.4-fpm
systemctl restart php7.4-fpm

Una vez llegados a este punto ya tenemos PHP correctamente instalado y ya podemos empezar a usarlo en Caddy, solo tenemos que modificar el archivo de configuración de Caddy para nuestro proyecto. En el Caddyfile (se encuentrá en /etc/caddy/Caddyfile) deberiamos tener un código similar al siguiente:

Caddy v1

dominio.es {
  root /var/www/
  fastcgi / /run/php/php7.2-fpm.sock php
  gzip
}

Caddy v2

dominio.es {
  root * /var/www/
  fastcgi / /run/php/php7.2-fpm.sock php
  encode gzip
  file_server
}

Debemos remplazar "dominio.es" por el nobre de nuestro dominio o subdominio, en la línea de fastcgi, definimos la versión de PHP que queremos usar. En este ejemplo usamos php7.2, pero puedes cambiarlo los php7.3 (fastcgi / /run/php/php7.3-fpm.sock php), php7.4 (fastcgi / /run/php/php7.4-fpm.sock php) o cualquier otra versión que queramos.

⚠️ Recordar: Después de realizar cambios en el Caddyfile debemos reiniciar Caddy para que se apliquen, para ello usamos el comando systemctl restart caddy

Espero que este tutorial os resuelva todas las dudas sobre la instalación y configuración de PHP en Caddy, cualquier duda podéis dejarla en los comentarios.