Capítulo 1 de 5

Instalar PHP y sus extensiones para Laravel en Debian 13

verificado el 2 septiembre 2026 · 4 min

Respuesta rápida

Debian 13 ofrece PHP 8.4 en sus repositorios oficiales: sudo apt install php-cli php-fpm php-mbstring php-xml php-curl php-zip php-bcmath php-intl php-mysql basta para Laravel 13, sin repositorio externo. Ojo con dos paquetes que se recomiendan por error: php-json ya no sirve para nada desde PHP 8.0, y el que hace falta es php-mysql, no php-mysqli, porque Laravel pasa por PDO.

Laravel 13 exige PHP 8.2 como mínimo y un puñado de extensiones. Buena noticia: Debian 13 «trixie» trae PHP 8.4 en sus repositorios oficiales, lo que deja sin sentido el repositorio externo Sury en el caso habitual.

Pasos ejecutados en un contenedor Debian 13 limpio, el 2 de septiembre de 2026. Este capítulo forma parte de la instalación de Laravel en Debian, dentro del itinerario Desarrollo web.

Comprobar qué ofrece tu Debian

Antes de añadir ningún repositorio, mira lo que trae la distribución:

bash
sudo apt update
apt-cache policy php-cli
code
php-cli:
  Installed: (none)
  Candidate: 2:8.4+96
  Version table:
     2:8.4+96 500
        500 http://deb.debian.org/debian trixie/main arm64 Packages

PHP 8.4 está disponible. Es de sobra suficiente para Laravel 13 y te ahorra mantener un repositorio externo. Qué versión de PHP trae cada versión de Debian:

Debian PHP de los repositorios oficiales ¿Suficiente para Laravel 13?
13 «trixie» 8.4 Sí
12 «bookworm» 8.2 Sí, en el mínimo exigido
11 «bullseye» 7.4 No, hace falta un repositorio externo

Instalar PHP y las extensiones

Un solo comando cubre la base que exige Laravel, más los drivers de base de datos:

bash
sudo apt install -y php-cli php-fpm \
  php-mbstring php-xml php-curl php-zip \
  php-bcmath php-intl \
  php-mysql php-sqlite3 \
  unzip curl ca-certificates

Dos extensiones habituales no están en esa lista porque dependen de tus decisiones de arquitectura: php-redis, tratada en el capítulo sobre Redis, y php-gd o php-imagick para el tratamiento de imágenes.

Comprueba la versión obtenida:

bash
php -v
code
PHP 8.4.24 (cli) (built: Jul 31 2026 05:11:11) (NTS)

Verifica después que todas las extensiones que Laravel espera están presentes:

bash
for e in ctype curl dom fileinfo filter hash mbstring openssl \
         pcre pdo session tokenizer xml bcmath intl zip; do
  printf "%-10s %s\n" "$e" "$(php -m | grep -qix "$e" && echo OK || echo MANQUANT)"
done

En la instalación de prueba, las dieciséis líneas devuelven OK. Varias de esas extensiones vienen compiladas en el binario de PHP de Debian y no tienen paquete propio: aun así aparecen en php -m.

Dos paquetes que se recomiendan por error

php-json ya no tiene razón de ser

Desde PHP 8.0, la extensión JSON viene compilada en el binario y ya no se puede desactivar. El paquete php-json sigue en Debian como simple paquete de transición. Instalarlo no rompe nada, pero tampoco aporta nada.

php-mysqli no es el paquete correcto

Laravel pasa por PDO, no por mysqli. El que hace falta es php-mysql, y trae los dos. Comprueba lo que ve PHP de verdad:

bash
php -r 'echo implode(", ", PDO::getAvailableDrivers()), PHP_EOL;'
code
mysql, sqlite

Si mysql no aparece en esa lista, Laravel no podrá conectarse a MySQL ni a MariaDB, sea cual sea la configuración del archivo .env.

Ajustar PHP para una aplicación web

Conviven dos archivos, con valores distintos: el de la línea de comandos y el del servidor web. Modificar el equivocado es una fuente clásica de confusión.

bash
/etc/php/8.4/cli/php.ini    # artisan, composer, tareas programadas
/etc/php/8.4/fpm/php.ini    # peticiones servidas por nginx o Apache

Los ajustes que cuentan para una aplicación Laravel están en el archivo de FPM:

/etc/php/8.4/fpm/php.ini
memory_limit = 256M
upload_max_filesize = 20M
post_max_size = 21M
max_execution_time = 60

post_max_size debe mantenerse por encima de upload_max_filesize, si no, un envío al tamaño máximo se rechaza antes de llegar a la aplicación. Recarga después el servicio, o los valores seguirán como estaban:

bash
sudo systemctl reload php8.4-fpm
php -i | grep memory_limit          # valor de la CLI
sudo -u www-data php-fpm8.4 -i | grep memory_limit

Con PHP ya en su sitio, el paso siguiente es la instalación de Composer.

Instalar otra versión de PHP con el repositorio Sury

Este rodeo solo se justifica si buscas una versión que Debian no ofrece: PHP 8.5 en Debian 13, o PHP 8.2 en una Debian 11. El método ha cambiado: apt-key ya no existe desde Debian 12, hay que pasar por un llavero dedicado.

bash
sudo apt install -y curl ca-certificates
sudo curl -fsSLo /etc/apt/keyrings/php.gpg https://packages.sury.org/php/apt.gpg

echo "deb [signed-by=/etc/apt/keyrings/php.gpg] https://packages.sury.org/php/ $(. /etc/os-release && echo $VERSION_CODENAME) main" \
  | sudo tee /etc/apt/sources.list.d/php.list

sudo apt update
sudo apt install -y php8.5-cli php8.5-fpm php8.5-mbstring php8.5-xml php8.5-curl php8.5-zip php8.5-bcmath php8.5-intl php8.5-mysql

Con varias versiones instaladas, elige la que responde al comando php:

bash
sudo update-alternatives --config php
Lo que cuesta un repositorio externo

Habrá que mantenerlo: en cada subida de versión de Debian, comprobar que el repositorio la sigue, y vigilar sus actualizaciones de seguridad por separado. Si los repositorios oficiales bastan, quédate con ellos.

Errores frecuentes

Instalar php-mysqli en lugar de php-mysql Laravel usa PDO. Sin pdo_mysql no funciona ninguna conexión MySQL, sea cual sea la configuración del .env.
Añadir el repositorio Sury sin necesidad Debian 13 ya ofrece PHP 8.4. Un repositorio externo añade su propio mantenimiento y un seguimiento de seguridad aparte.
apt-key ya no existe desde Debian 12 Los tutoriales que lo usan fallan. Hace falta un llavero en /etc/apt/keyrings y la opción signed-by.
Modificar el php.ini equivocado El archivo de cli/ y el de fpm/ son distintos. Los ajustes que cuentan para una aplicación web están en fpm/.
Olvidar recargar PHP-FPM Los valores cambiados en php.ini no surten efecto hasta systemctl reload php8.4-fpm.
post_max_size por debajo de upload_max_filesize Un envío al tamaño máximo se rechaza antes de llegar a la aplicación.
Newsletter

Las nuevas pruebas, tutoriales y proyectos, por correo.

Pruebas reproducibles, código versionado, resultados fechados. Nunca spam.