En este artículo veremos cómo instalar y configurar PHP en Debian 11 Bullseye paso a paso, de forma que puedas trabajar en tu servidor o VPS Debian con este potente lenguaje de programación, tanto en consola como en aplicaciones web.
Tabla de contenidos
Antes de instalar PHP en Debian 11 Bullseye
Si quieres seguir los pasos de esta guía de instalación de PHP en Debian 11 Bullseye habrá que satisfacer los siguientes requisitos:
- Un sistema Debian 11 Bullseye actualizado.
- Acceso a línea de comandos con permisos de sudo.
- Opcionalmente, un servidor web.
- Conexión a Internet.
Si aún no dispones de servidor web, puedes consultar nuestras guías de instalación de Apache en Debian 11 o de instalación de Nginx en Debian 11.
Cómo instalar PHP en Debian 11 Bullseye
A la hora de instalar PHP en Debian 11 Bullseye tendremos que elegir entre varias opciones disponibles, dependiendo de qué versión del lenguaje necesitamos, si vamos a usar un servicio web y, en ese caso, cuál usaríamos.
Modalidades de PHP
Dependiendo de cómo necesitas hacer funcionar PHP en tu máquina, Debian 11 te ofrece estas modalidades:
- PHP de consola (CLI): Para trabajar exclusivamente desde línea de comandos. Se instala a través del paquete php-cli y es una dependencia del resto de opciones.
- Módulo de PHP para Apache: Es un módulo exclusivo para este servidor web, instalable desde el paquete libapache2-mod-php.
- PHP como servicio (PHP-FPM): Servicio independiente que recibe peticiones desde otros servicios web (como Nginx) y devuelve los resultados. Se trata del paquete php-fpm.
No instales nada todavía, que tenemos que ver de qué versiones disponemos.
Versión del repositorio de la distribución
Debian 11 cuenta en los repositorios de la distribución con PHP 7.4 únicamente. Si es la versión que necesitas no es necesario realizar los pasos de la siguiente sección.
PHP 8.1, 8.0, 7.4, 7.3 y anteriores
Si necesitas una versión superior, como PHP 8.0 o el próximo PHP 8.1, una versión inferior (por motivos de compatibilidad con alguna aplicación), o quieres PHP 7.4 pero con mayor frecuencia de actualización, puedes instalar el repositorio alternativo de PHP para Debian 11.
Este repositorio ofrece paquetes firmados, así que hay que instalar la clave pública que permitirá comprobar las firmas:
~$ sudo wget -O /etc/apt/trusted.gpg.d/php-sury.org.gpg https://packages.sury.org/php/apt.gpg
Creamos un archivo de repositorio de APT:
~$ sudo nano /etc/apt/sources.list.d/php-sury.org.list
El contenido será la fuente de paquetes para Debian 11:
deb http://packages.sury.org/php/ bullseye main
Guardamos y cerramos el archivo.
Instalación de PHP y nomenclatura de los paquetes para Debian 11
Para el repositorio de la distribución no hay que indicar versión de PHP a la hora de instalar paquetes, pero si hemos configurado el repositorio auxiliar sí conviene hacerlo, sustituyendo en sus nombres la partícula php por php7.3, php7.4, php8.0 ó php8.1 ó lo que corresponda.
Si usáramos la partícula php, (sin especificar versión) se instalaría la versión por defecto que, en el momento de redactar esta guía, es PHP 8.0. Pero dentro de unos meses, cuando el administrador del repositorio actualice la versión por defecto a PHP 8.1, podríamos cambiar nuestra instalación a la nueva versión sin ser conscientes de ello, en una simple actualización rutinaria de paquetes. Esto podría provocar problemas de compatibilidad y errores en las aplicaciones ya instaladas.
Como siempre que vamos a instalar paquetes, actualizamos previamente la información de los repositorios:
~$ sudo apt update
Teniendo en cuenta todo lo explicado sobre modalidades y versiones, veamos algunos ejemplos de instalación.
Para instalar la versión de la distribución como módulo de Apache:
~$ sudo apt install -y libapache2-mod-php
La misma modalidad, pero con PHP 8.0 del repositorio alternativo:
~$ sudo apt install -y libapache2-mod-php8.0
Para instalar PHP como servicio PHP-FPM con la versión de la distribución:
~$ sudo apt install -y php-fpm
Y si queremos experimentar con PHP-FPM en su versión experimental PHP 8.1:
~$ sudo apt install -y php8.1-fpm
Creo que se entiende la idea.
Comprobar la versión instalada
Podemos comprobar la versión instalada desde consola con el comando php:
~$ php -v PHP 7.4.21 (cli) (built: Jul 2 2021 03:59:48) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.21, Copyright (c), by Zend Technologies
El comando anterior muestra la versión incluida en el repositorio de Debian 11.
Integración de PHP con el servicio web en Debian 11
Apache
Si usas Apache, el módulo de PHP quedará integrado y configurado durante la instalación.
Nginx
Comprobaremos que el servicio PHP-FPM se encuentre en ejecución con el comando systemctl, indicando la versión de PHP independientemente del origen de los paquetes. Por ejemplo, para la versión del repositorio de la distribución el servicio se llama php7.4-fpm.service o simplemente php7.4-fpm:
~$ systemctl status php7.4-fpm
En cuanto al servicio web habrá que realizar algún ajuste editando el archivo del sitio por defecto:
~$ sudo nano /etc/nginx/sites-available/default
Buscamos esta sección:
... # pass PHP scripts to FastCGI server # #location ~ \.php$ { # include snippets/fastcgi-php.conf; # # # With php-fpm (or other unix sockets): # fastcgi_pass unix:/run/php/php7.4-fpm.sock; # # With php-cgi (or other tcp sockets): # fastcgi_pass 127.0.0.1:9000; #} ...
Y activamos las directivas necesarias eliminando el carácter # al inicio de línea:
... # pass PHP scripts to FastCGI server # location ~ \.php$ { include snippets/fastcgi-php.conf; # # # With php-fpm (or other unix sockets): fastcgi_pass unix:/run/php/php7.4-fpm.sock; # # With php-cgi (or other tcp sockets): # fastcgi_pass 127.0.0.1:9000; } ...
Observa que hemos dejado intacto el nombre de archivo de socket en la directiva fastcgi_pass, que correspondería a la versión por defecto de la distribución o a la 7.4 del repositorio alternativo. Para otra versión, habrá que adaptar el nombre de ese fichero, por ejemplo, para PHP 8.0:
... fastcgi_pass unix:/run/php/php8.0-fpm.sock; ...
Si tienes dudas sobre el nombre de fichero a usar, simplemente comprueba qué archivo existe en la ruta /run/php/.
Guardamos los cambios y recargamos la configuración del servicio web:
~$ sudo systemctl reload nginx
Cómo configurar PHP en Debian 11 Bullseye
Para configurar PHP en Debian 11 Bullseye trabajaremos sobre los archivos ubicados bajo la ruta /etc/php/. Dentro de esta ruta existe un subdirectorio para cada versión instalada en el sistema, por lo que para la versión de la distribución, por ejemplo, existirá la ruta /etc/php/7.4/.
A su vez, dentro del directorio de la versión existe un archivo php.ini para Apache en el subdirectorio apache2/ o para PHP-FPM en el subdirectorio fpm/, otro archivo php.ini para la versión de consola en el subdirectorio cli/ y archivos de configuración de las distintas extensiones guardados en el subdirectorio mods-available/.
Los archivos principales son los php.ini y son los que editaremos para realizar la configuración inicial.
Por ejemplo, para configurar la versión 7.4 del módulo PHP de Apache:
~$ sudo nano /etc/php/7.4/apache2/php.ini
Otro ejemplo, para la versión 8.1 de PHP-FPM:
~$ sudo nano /etc/php/8.1/fpm/php.ini
Zona horaria
Buscamos la directiva date.timezone:
... ;date.timezone = ...
La activamos eliminando el carácter ; a principio de línea y le damos el valor adecuado para nuestra zona horaria:
... date.timezone = Europe/Madrid ...
Si no conoces el valor que corresponde a tu zona horaria puedes comprobarlo en la documentación oficial, tal como se indica en los comentarios del archivo php.ini.
Valores de desarrollo y producción
Los valores por defecto del archivo php.ini están orientados a entornos de producción, de cara al público, así que si esa es la función de tu servidor Debian 11 con PHP, puedes dejarlos como están. Pero si tu entorno es de desarrollo es interesante modificar el comportamiento de PHP ante errores de programación, localizando las siguientes directivas:
... error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT ... display_errors = Off ... display_startup_errors = Off ...
Y cambiando sus valores por los adecuados para desarrollo (para que PHP muestre información sobre los errores que encuentre):
... error_reporting = E_ALL ... display_errors = On ... display_startup_errors = On ...
Habrá que guardar los cambios y recargar la configuración del servicio web en el caso de Apache:
~$ sudo systemctl reload apache2
O la configuración del servicio PHP-FPM:
~$ sudo systemctl reload phpX.X-fpm
Para la versión de línea de comandos (CLI) habrá que realizar cambios similares en su archivo php.ini, al menos en lo que se refiere a la zoha horaria.
~$ sudo nano /etc/php/X.X/cli/php.ini
En este caso, tras las modificaciones y ajustes, los cambios se aplican directamente.
Cómo probar PHP en Debian 11
Para comprobar la integración de PHP con el servicio web de nuestra máquina Debian 11 crearemos un pequeño script PHP:
~$ sudo nano /var/www/html/info.php
El contenido será únicamente una llamada a la función phpinfo():
<?php phpinfo();
Una vez guardado y cerrado el archivo, accederemos al mismo desde un navegador, indicando la dirección del servidor Debian 11 añadiendo la ruta /info.php.
Por ejemplo, la máquina sobre la que hemos preparado esta guía es accesible en el subdominio debian11.local.lan, así que añadiendo la ruta /info.php nos queda http://debian11.local.lan/info.php como URL.
Se mostrará una página de información de la versión de PHP actualmente instalado y sus valores de configuración.
Para PHP 7.4 procedente del repositorio de Debian 11:
Si preferiste la versión PHP 8.0 del repositorio alternativo:
Y si te atreves con la última versión disponible, PHP 8.1:
Conclusión
Ahora que sabes cómo instalar y configurar PHP en sus versiones más recientes sobre Debian 11 Bullseye, ya puedes desarrollar tus propias aplicaciones web basadas en este lenguaje, o establecer la base para instalar aplicaciones de terceros.
En caso de dudas o preguntas, deja un comentario. Aunque están moderados (por el SPAM y tal) se revisan prácticamente a diario.
Si te ha servido esta breve guía y quieres agradecérnoslo, cualquier pequeña contribución aporta mucho al mantenimiento en línea de este sitio y la creación de más guías y tutoriales.
Puedes ayudarnos dejando una propina de tan sólo 1 $ desde PayPal:
O, si te sientes especialmente generoso, puedes invitarnos a un café:
¡Gracias!