Cómo instalar PHP en Debian 10 Buster

En esta entrada explico cómo instalar PHP en Debian 10 Buster paso a paso, así que podremos disfrutar de PHP 7.4 ó PHP 8.0 en nuestro sistema favorito con los paquetes del repositorio alternativo, o de PHP 7.3 con el repositorio de Debian. Al final de esta guía dispondrás de PHP instalado y configurado para tu servidor web dentro de tu servidor o VPS Debian.

Antes de instalar PHP en Debian 10 Buster

Si vas a seguir esta guía de instalación de PHP en Debian 10 Buster es conveniente que cumplas al menos estos requisitos:

  • Un sistema Debian 10 actualizado.
  • Un servidor web instalado del que conozcas los fundamentos de su configuración.
  • Conexión a Internet.
  • Acceso por consola como root o usuario con permisos de sudo.

En esta guía te mostramos cómo configurar los servidores web Apache y Nginx, pero no debería haber muchas diferencias con otras alternativas.

Cómo instalar PHP en Debian 10

Para instalar PHP en Debian 10 Buster podemos optar entre que este trabaje como módulo del servidor web o como servicio independiente. Según el servidor web que usemos es más fácil una u otra configuración, teniendo en cuenta la preconfiguración que incluyen los paquetes de PHP.

Vamos a ver cómo hacerlo para los servidores web más populares: Apache y Nginx.

El primer paso, como siempre, es actualizar el sistema:

~$ sudo apt update && sudo apt -y upgrade

Cómo instalar el repositorio alternativo de PHP para Debian 10 Buster

Instalamos la clave pública para comprobar las firmas de los paquetes del nuevo repositorio de PHP:

~$ sudo wget -O /etc/apt/trusted.gpg.d/php-sury.org.gpg https://packages.sury.org/php/apt.gpg

Creamos el archivo de configuración para el repositorio:

~$ sudo nano /etc/apt/sources.list.d/php-sury.org.list

Con la siguiente línea como contenido:

deb http://packages.sury.org/php/ buster main

Guardamos los cambios y actualizamos la información de las listas de paquetes:

~$ sudo apt update

Seguramente haya actualizaciones al activar este repositorio, así que actualizaremos los paquetes necesarios:

~$ sudo apt upgrade -y

Nomenclatura de los paquetes

Si decides mantener la versión PHP nativa de Debian 10 Buster, es decir, PHP 7.3, los nombres de los paquetes no incluyen número de versión.

Si has decidido instalar el repositorio alternativo, los paquetes sin número de versión en el nombre harán referencia a la versión considerada estable por el mantenedor del repositorio (PHP 7.4 en el momento de actualizar esta guía). Para el resto de versiones tendrás que usar nombres con número de versión, usando en lugar de la partícula php las partículas php5.6, php7.0, php7.1, php7.2, php7.3, php7.4 ó php8.0.

Cómo instalar PHP para Apache 2 en Debian 10

Con el sistema actualizado, instalamos el módulo de PHP para Apache, que incluye como dependencia también la versión de consola:

~$ sudo apt -y install libapache2-mod-php

El comando anterior instala PHP 7.3 si usas la versión nativa y PHP 7.4 si usas el repositorio alternativo. Si quisieras otra versión, como PHP 8.0, deberías indicarlo:

~$ sudo apt -y install libapache2-mod-php8.0

Tras la instalación del paquete y sus dependencias PHP queda instalado y perfectamente integrado para funcionar como módulo de Apache. No es necesario reiniciar ni recargar la configuración del servidor web, así que podemos pasar directamente a confirmar que funciona.

Cómo instalar PHP para Nginx en Debian 10

En el caso de que servidor web sea Nginx, PHP funcionará como un servicio FastCGI independiente de Nginx, en lugar de como un módulo de servidor web.

El paquete que demos instalar es php-fpm, ya que si intentamos instalar el paquete php este instalará Apache como dependencia.

~$ sudo apt -y install php-fpm

Se crea el nuevo servicio php7.3-fpm que queda activado y en ejecución, como podemos comprobar con systemctl:

~$ systemctl status php7.3-fpm
● php7.3-fpm.service - The PHP 7.3 FastCGI Process Manager
   Loaded: loaded (/lib/systemd/system/php7.3-fpm.service; enabled; vendor prese
   Active: active (running) since Sun 2019-07-14 19:34:53 CEST; 8min ago
     Docs: man:php-fpm7.3(8)
 Main PID: 6555 (php-fpm7.3)
   Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/se
    Tasks: 3 (limit: 1150)
   Memory: 13.5M
   CGroup: /system.slice/php7.3-fpm.service
           ├─6555 php-fpm: master process (/etc/php/7.3/fpm/php-fpm.conf)
           ├─6556 php-fpm: pool www
           └─6557 php-fpm: pool www

En el caso de Nginx la configuración no es automática y debemos realizar unos ajustes en los archivos de configuración del servidor virtual por defecto y en el del resto de servidores virtuales para los que queramos activar PHP.

Estos archivos están en /etc/nginx/sites-available/ y el correspondiente al servidor por defecto es /etc/nginx/sites-available/default:

~$ sudo nano /etc/nginx/sites-available/default

Editamos la directiva index para que considere también como archivo por defecto los index.php:

...
        index index.php index.html index.htm index.nginx-debian.html;
...

Buscamos también un bloque location claramente relacionado con PHP que está desactivado:

...
        # 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.3-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        #}
...

Debemos activar el bloque y dentro de este la directiva include y la directiva fastcgi_pass_unix, que corresponde al funcionamiento del servicio FastCGI como servicio de sockets de Unix (el modo de funcionamiento del servicio php7.3-fpm). Quedaría algo así:

...
        # 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.3-fpm.sock;
        #       # With php-cgi (or other tcp sockets):
        #       fastcgi_pass 127.0.0.1:9000;
        }
...

Si tienes más servidores virtuales configurados, deberás realizar ajustes similares en sus respectivos archivos de configuración.

Guardados los cambios, hay que reiniciar Nginx:

~$ sudo systemctl restart nginx

Cómo probar PHP en Debian 10

Vamos a crear un pequeño script PHP en una ruta fácilmente accesible vía web, que es común tanto en Apache como en Nginx:

~$ sudo nano /var/www/html/info.php

El contenido será mínimo, solamente una llamada a la función phpinfo():

<?php phpinfo();

Una vez guardados los cambios, accedemos a través de un navegador a nuestra máquina Debian 10, a través de su dirección IP, nombre de máquina o dominio, añadiendo al final /info.php. En este ejemplo accedo a través del dominio debian10.local.lan, usando http://debian10.local.lan/info.php como URL.

En el caso de haber instalado PHP 8.0:

como instalar php 8 en debian 10 buster

Si hemos instalado PHP 7.4:

php 7.4 en debian 10 buster

Y si decidimos usar la versión nativa de Debian 10, PHP 7.3:

como instalar php en debian 10 buster

Podemos ver que funciona y nos ofrece mucha información, desde la versión de PHP en uso hasta la localización de archivos de configuración, módulos cargados, etc.

Cómo configurar PHP en Debian 10

Para configurar PHP en Debian 10 debemos editar el archivo principal de configuración. Para Nginx y servidores web que usen FastCGI FPM lo podemos encontrar en /etc/php/X.Y/fpm/php.ini, mientras que en el caso de Apache lo encontramos en /etc/php/X.Y/apache2/php.ini, donde X.Y hace referencia a la versión de PHP instalada en nuestro sistema Debian 10. También encontraremos un archivo de configuración para PHP de consola en la ruta ~$ sudo nano /etc/php/X.Y/cli/php.ini.

Editamos el archivo correspondiente y nos disponemos a realizar modificaciones.

Zona horaria

Deberíamos configurar la zona horaria correspondiente a nuestra máquina Debian. Para ello debemos encontrar la directiva date.timezone:

...
[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
;date.timezone =
...

Podemos comprobar que la directiva está desactivada y no tiene asignado ningún valor. Lo que procede es asignarle un valor (puedes consultar los valores disponibles en la URL que aparece en el comentario) y activarla. En el caso de España peninsular quedaría así:

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone = Europe/Madrid

Manejo de errores

PHP puede tener dos comportamientos con respecto a los errores que pueden aparecer en páginas web con scripts realizados en este lenguaje.

Una configuración de desarrollo mostrará amplia información en pantalla cada vez que se produzca un error, y así ayudar a su corrección.

Pero una configuración de producción, ocultará estos mensajes, ya que pueden mostrar información sensible que ayude a explotar vulnerabilidades.

Para configurar estos mensajes de error buscaremos las siguientes directivas:

; Development Value: E_ALL
; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT
; http://php.net/error-reporting
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT

...
; Development Value: On
; Production Value: Off
; http://php.net/display-errors
display_errors = Off

...
; Development Value: On
; Production Value: Off
; http://php.net/display-startup-errors
display_startup_errors = Off

...

Si echamos un vistazo a las comentarios que acompañan a las directivas vemos los valores posibles que podemos asignarles. Es fácil comprobar que los valores por defecto corresponden a un entorno de producción, que oculta los errores al usuario.

Si queremos configurar estos valores para un entorno de desarrollo sólo hay que hacer los cambios sugeridos:

; Development Value: E_ALL
; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT
; http://php.net/error-reporting
error_reporting = E_ALL

...
; Development Value: On
; Production Value: Off
; http://php.net/display-errors
display_errors = On

...
; Development Value: On
; Production Value: Off
; http://php.net/display-startup-errors
display_startup_errors = On

...

Los comentarios nos ayudarán a restablecer una configuración u otra.

Cómo cargar la nueva configuración de PHP

Sea cual sea el modo en el que trabaja PHP con el servidor web, si hacemos cambios de configuración tendremos que recargar la configuración.

En el caso de tener PHP funcionando como módulo (Apache), recargaremos la configuración del servidor web:

~$ sudo systemctl reload apache2

Si PHP funciona como servicio FastCGI (el caso de Nginx), entonces se recargará la configuración de dicho servicio:

~$ sudo systemctl reload php7.3-fpm.service

Conclusión

Ahora que ya sabes instalar PHP en Debian 10 Buster puedes configurar tu servidor web para ofrecer potentes aplicaciones web o crear tus propios desarrollos basados en este popular lenguaje de programación.

Para dudas, preguntas, sugerencias, etc. siempre puedes dejar un comentario.

¡Apoya este sitio!

¿Qué te ha parecido esta guía de instalación y configuración de PHP en Debian 10 Buster? ¿Te ha sacado de algún atolladero? Pues si te sientes en deuda conmigo no lo pases mal, puedes agradecérmelo dejando 1 $ de propina con PayPal:

O, si te sientes especialmente agradecido, puedes invitarme a un café:

¡Gracias!

5/5 - (1 voto)

Deja un comentario

Este sitio esta protegido por reCAPTCHA y laPolítica de privacidady losTérminos del servicio de Googlese aplican.

El periodo de verificación de reCAPTCHA ha caducado. Por favor, recarga la página.