Capitolo 2 di 5

Installare Composer su Debian 13 con verifica della firma

verificato il 2 Settembre 2026 · 3 min

Risposta rapida

Scarica il programma di installazione, confronta la sua impronta SHA-384 con quella pubblicata su composer.github.io/installer.sig, ed eseguilo solo se le due coincidono. Installalo in /usr/local/bin/composer per renderlo disponibile a tutti gli utenti. Da lì in poi non usare mai sudo composer install: lancia Composer con l'account proprietario del progetto.

Composer installa Laravel e tutte le sue dipendenze. Su Debian la questione non è solo installarlo, ma farlo senza eseguire uno script scaricato senza controlli: la procedura ufficiale verifica l’impronta del programma di installazione prima di lanciarlo.

Passaggi eseguiti su Debian 13 « trixie » il 2 settembre 2026, con PHP 8.4.24. Questo capitolo fa parte dell’installazione di Laravel su Debian, nel percorso Sviluppo web.

Prerequisiti

Composer è un programma PHP: prima di lui serve PHP da riga di comando.

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

unzip non è decorativo: senza di lui Composer decomprime gli archivi in PHP, molto più lentamente.

Installare Composer con verifica della firma

Quattro comandi, in quest’ordine. Il terzo è quello che conta: confronta l’impronta del file scaricato con quella pubblicata dal progetto.

bash
# 1. l'impronta di riferimento, pubblicata dal progetto Composer
EXPECTED="$(curl -sS https://composer.github.io/installer.sig)"

# 2. il programma di installazione
curl -sS https://getcomposer.org/installer -o composer-setup.php

# 3. l'impronta del file ricevuto
ACTUAL="$(php -r 'echo hash_file("sha384", "composer-setup.php");')"

# 4. non si lancia niente se le due differiscono
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

Sull’installazione di prova le due impronte coincidono:

code
attendue : c8b085408188070d5f52bcfe4ecfbee5f727afa458b2573b8eaaf77b3419b0bf2768dc67c86944da1544f06fa544fd47
obtenue  : c8b085408188070d5f52bcfe4ecfbee5f727afa458b2573b8eaaf77b3419b0bf2768dc67c86944da1544f06fa544fd47
→ signature valide
Perché questo passaggio non è facoltativo

Senza, esegui con i diritti sudo uno script PHP scaricato dalla rete, senza nessuna garanzia sul suo contenuto. È il motivo per cui la documentazione ufficiale pubblica un’impronta di riferimento. I tutorial che concatenano curl e poi php composer-setup.php senza confronto saltano l’unica protezione disponibile.

Verifica il risultato:

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

Metterlo in /usr/local/bin con il nome composer rende il comando disponibile per tutti gli utenti del server, senza toccare il PATH.

E il pacchetto Debian?

Debian propone un pacchetto composer. Funziona, ma segue il ritmo della distribuzione: la versione dei repository è quasi sempre indietro rispetto a quella corrente. Dato che Composer si aggiorna da solo con un comando, l’installazione manuale resta preferibile su un server applicativo.

bash
sudo composer self-update          # ultima versione stabile
sudo composer self-update --rollback   # tornare alla precedente

Non lanciare Composer da root

Installare il binario con sudo è normale. Usarlo con sudo non lo è.

bash
# da evitare
sudo composer install

# corretto: l'utente proprietario del progetto
su - deploy
cd /var/www/mon-projet
composer install --no-dev --optimize-autoloader

Su una macchina macOS il problema si presenta in modo diverso e si traduce spesso in un comando laravel non trovato.

Due ragioni. Gli script post-install delle dipendenze girano con i diritti che gli concedi, il che fa di sudo composer install un’esecuzione di codice di terzi da root. E i file creati appartengono allora a root, il che provoca errori di scrittura appena il server web prova a scrivere in storage/.

Del resto Composer avvisa da solo quando viene lanciato da root senza COMPOSER_ALLOW_SUPERUSER.

Opzioni utili in produzione

bash
composer install --no-dev --optimize-autoloader --no-interaction
Opzione Effetto
--no-dev ignora le dipendenze di sviluppo (test, strumenti di debug)
--optimize-autoloader genera una tabella di classi statica, più rapida da caricare
--no-interaction nessuna domanda posta, indispensabile in deploy automatizzato

Porta sempre il file composer.lock insieme al progetto, e lancia composer install e non composer update: il primo comando installa esattamente le versioni del lock, il secondo le ricalcola e può introdurre modifiche non testate in piena messa in produzione.

Errori frequenti

Eseguire il programma di installazione senza verificare la firma Lanci con sudo uno script PHP scaricato dalla rete, senza garanzie sul suo contenuto. Il confronto delle impronte è l'unica protezione disponibile.
sudo composer install Gli script post-install delle dipendenze girano da root, e i file creati appartengono a root, il che blocca poi la scrittura da parte del server web.
composer update in produzione Ricalcola le versioni e può introdurre modifiche non testate. In deploy si usa composer install a partire dal composer.lock.
Dimenticare unzip Composer decomprime allora gli archivi in PHP, nettamente più lentamente.
Fidarsi del pacchetto Debian Funziona ma resta indietro rispetto alla versione corrente, mentre Composer si aggiorna da solo con self-update.
Newsletter

I nuovi test, tutorial e progetti, via e-mail.

Test riproducibili, codice versionato, risultati datati. Mai spam.