Instalar Composer en Debian 13 verificando la firma
verificado el 2 septiembre 2026 · 3 min
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.
php -v
sudo apt install -y php-cli unzip curl ca-certificatesunzip 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.
# 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
fiEn la instalación de prueba, los dos hashes coinciden:
attendue : c8b085408188070d5f52bcfe4ecfbee5f727afa458b2573b8eaaf77b3419b0bf2768dc67c86944da1544f06fa544fd47
obtenue : c8b085408188070d5f52bcfe4ecfbee5f727afa458b2573b8eaaf77b3419b0bf2768dc67c86944da1544f06fa544fd47
→ signature valideSin é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:
composer --versionComposer 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.
sudo composer self-update # última versión estable
sudo composer self-update --rollback # volver a la anteriorNo lances Composer como root
Instalar el binario con sudo es normal. Usarlo con sudo no lo es.
# a evitar
sudo composer install
# correcto: el usuario propietario del proyecto
su - deploy
cd /var/www/mon-projet
composer install --no-dev --optimize-autoloaderEn 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
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
composer install a partir del composer.lock.