Capítulo 2 de 5

Instalar Composer en Debian 13 verificando la firma

verificado el 2 septiembre 2026 · 3 min

Respuesta rápida

Descarga el instalador, compara su hash SHA-384 con el publicado en composer.github.io/installer.sig y ejecútalo solo si los dos coinciden. Instálalo en /usr/local/bin/composer para dejarlo disponible a todos los usuarios. Después no uses nunca sudo composer install: lanza Composer con la cuenta propietaria del proyecto.

Composer instala Laravel y todas sus dependencias. En Debian la cuestión no es solo instalarlo, sino hacerlo sin ejecutar a ciegas un script descargado de la red: el procedimiento oficial verifica el hash del instalador antes de lanzarlo.

Pasos ejecutados en Debian 13 «trixie» el 2 de septiembre de 2026, con PHP 8.4.24. Este capítulo forma parte de la instalación de Laravel en Debian, dentro del itinerario Desarrollo web.

Requisitos previos

Composer es un programa PHP: necesitas PHP en línea de comandos antes que él.

bash
php -v
sudo apt install -y php-cli unzip curl ca-certificates

unzip no está de adorno: sin él, Composer descomprime los archivos en PHP, mucho más despacio.

Instalar Composer con verificación de firma

Cuatro comandos, en este orden. El tercero es el que importa: compara el hash del archivo descargado con el que publica el proyecto.

bash
# 1. el hash de referencia, publicado por el proyecto Composer
EXPECTED="$(curl -sS https://composer.github.io/installer.sig)"

# 2. el instalador
curl -sS https://getcomposer.org/installer -o composer-setup.php

# 3. el hash del archivo recibido
ACTUAL="$(php -r 'echo hash_file("sha384", "composer-setup.php");')"

# 4. no se lanza nada si los dos difieren
if [ "$EXPECTED" = "$ACTUAL" ]; then
    sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
    rm composer-setup.php
else
    >&2 echo "Signature invalide : téléchargement corrompu ou altéré."
    rm composer-setup.php
    exit 1
fi

En la instalación de prueba, los dos hashes coinciden:

code
attendue : c8b085408188070d5f52bcfe4ecfbee5f727afa458b2573b8eaaf77b3419b0bf2768dc67c86944da1544f06fa544fd47
obtenue  : c8b085408188070d5f52bcfe4ecfbee5f727afa458b2573b8eaaf77b3419b0bf2768dc67c86944da1544f06fa544fd47
→ signature valide
Por qué este paso no es opcional

Sin él, ejecutas con permisos sudo un script PHP descargado de la red, sin ninguna garantía sobre su contenido. Por eso la documentación oficial publica un hash de referencia. Los tutoriales que encadenan curl y luego php composer-setup.php sin comparar nada se saltan la única protección disponible.

Comprueba el resultado:

bash
composer --version
code
Composer version 2.10.3 2026-08-27 13:34:23
PHP version 8.4.24 (/usr/bin/php8.4)

Colocarlo en /usr/local/bin con el nombre composer deja el comando disponible para todos los usuarios del servidor, sin tocar el PATH.

¿Y el paquete de Debian?

Debian ofrece un paquete composer. Funciona, pero sigue el ritmo de la distribución: la versión de los repositorios casi siempre va por detrás de la actual. Como Composer se actualiza solo con un comando, la instalación manual sigue siendo preferible en un servidor de aplicaciones.

bash
sudo composer self-update          # última versión estable
sudo composer self-update --rollback   # volver a la anterior

No lances Composer como root

Instalar el binario con sudo es normal. Usarlo con sudo no lo es.

bash
# a evitar
sudo composer install

# correcto: el usuario propietario del proyecto
su - deploy
cd /var/www/mon-projet
composer install --no-dev --optimize-autoloader

En un equipo macOS el problema se plantea de otra forma y suele acabar en un comando laravel que no se encuentra.

Hay dos razones. Los scripts post-install de las dependencias se ejecutan con los permisos que les das, así que sudo composer install es ejecutar código de terceros como root. Y los archivos creados pasan a pertenecer a root, lo que provoca errores de escritura en cuanto el servidor web intenta escribir en storage/.

De hecho, el propio Composer avisa cuando se lanza como root sin COMPOSER_ALLOW_SUPERUSER.

Opciones útiles en producción

bash
composer install --no-dev --optimize-autoloader --no-interaction
Opción Efecto
--no-dev ignora las dependencias de desarrollo (tests, herramientas de depuración)
--optimize-autoloader genera una tabla de clases estática, más rápida de cargar
--no-interaction no hace ninguna pregunta, imprescindible en despliegue automatizado

Despliega siempre el archivo composer.lock con el proyecto, y lanza composer install y no composer update: el primero instala exactamente las versiones del lock, el segundo las recalcula y puede colar cambios sin probar en plena puesta en producción.

Errores frecuentes

Ejecutar el instalador sin verificar la firma Lanzas con sudo un script PHP descargado de la red, sin garantía sobre su contenido. La comparación de hashes es la única protección disponible.
sudo composer install Los scripts post-install de las dependencias se ejecutan como root, y los archivos creados pertenecen a root, lo que después bloquea la escritura del servidor web.
composer update en producción Recalcula las versiones y puede introducir cambios sin probar. En despliegue toca composer install a partir del composer.lock.
Olvidar unzip Composer descomprime entonces los archivos en PHP, bastante más despacio.
Fiarse del paquete de Debian Funciona, pero va por detrás de la versión actual, mientras que Composer se actualiza solo con self-update.
Newsletter

Las nuevas pruebas, tutoriales y proyectos, por correo.

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