Capítulo 2 de 5

Instalar o Composer no Debian 13 verificando a assinatura

verificado a 2 Setembro 2026 · 3 min

Resposta rápida

Descarrega o instalador, compara o seu hash SHA-384 com o publicado em composer.github.io/installer.sig, e só o executa se os dois coincidirem. Instala-o em /usr/local/bin/composer para o tornar disponível a todos os utilizadores. Depois nunca uses sudo composer install: lança o Composer com a conta proprietária do projeto.

O Composer instala o Laravel e todas as suas dependências. No Debian, a questão não é apenas instalá-lo, mas fazê-lo sem executar um script descarregado sem controlo: o procedimento oficial verifica o hash do instalador antes de o lançar.

Passos executados em Debian 13 «trixie» a 2 de setembro de 2026, com PHP 8.4.24. Este capítulo faz parte da instalação do Laravel num servidor Debian, no percurso Desenvolvimento web.

Pré-requisitos

O Composer é um programa PHP: precisas do PHP em linha de comandos antes dele.

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

O unzip não é decorativo: sem ele, o Composer descomprime os ficheiros em PHP, muito mais devagar.

Instalar o Composer com verificação da assinatura

Quatro comandos, por esta ordem. O terceiro é o que conta: compara o hash do ficheiro descarregado com o publicado pelo projeto.

bash
# 1. o hash de referência, publicado pelo projeto Composer
EXPECTED="$(curl -sS https://composer.github.io/installer.sig)"

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

# 3. o hash do ficheiro recebido
ACTUAL="$(php -r 'echo hash_file("sha384", "composer-setup.php");')"

# 4. não se executa nada se os dois diferirem
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

Na instalação de teste, os dois hashes coincidem:

code
attendue : c8b085408188070d5f52bcfe4ecfbee5f727afa458b2573b8eaaf77b3419b0bf2768dc67c86944da1544f06fa544fd47
obtenue  : c8b085408188070d5f52bcfe4ecfbee5f727afa458b2573b8eaaf77b3419b0bf2768dc67c86944da1544f06fa544fd47
→ signature valide
Porque é que este passo não é opcional

Sem ele, executas com direitos sudo um script PHP descarregado da rede, sem qualquer garantia sobre o seu conteúdo. É por isso que a documentação oficial publica um hash de referência. Os tutoriais que encadeiam curl e depois php composer-setup.php sem comparação saltam a única proteção disponível.

Confirma o 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)

Colocá-lo em /usr/local/bin com o nome composer torna o comando disponível para todos os utilizadores do servidor, sem mexer no PATH.

E o pacote Debian?

O Debian propõe um pacote composer. Funciona, mas segue o ritmo da distribuição: a versão dos repositórios está quase sempre atrasada face à versão corrente. Como o Composer se atualiza a si próprio com um comando, a instalação manual continua preferível num servidor aplicacional.

bash
sudo composer self-update          # última versão estável
sudo composer self-update --rollback   # voltar à anterior

Não lançar o Composer como root

Instalar o binário com sudo é normal. Usá-lo com sudo não é.

bash
# a evitar
sudo composer install

# correto: o utilizador proprietário do projeto
su - deploy
cd /var/www/mon-projet
composer install --no-dev --optimize-autoloader

Numa máquina macOS, o problema coloca-se de outra forma e traduz-se muitas vezes por um comando laravel que não é encontrado.

Duas razões. Os scripts post-install das dependências correm com os direitos que lhes deres, o que faz de sudo composer install uma execução de código de terceiros como root. E os ficheiros criados passam a pertencer ao root, o que provoca erros de escrita assim que o servidor web tenta escrever em storage/.

Aliás, o próprio Composer avisa quando é lançado como root sem COMPOSER_ALLOW_SUPERUSER.

Opções úteis em produção

bash
composer install --no-dev --optimize-autoloader --no-interaction
Opção Efeito
--no-dev ignora as dependências de desenvolvimento (testes, ferramentas de depuração)
--optimize-autoloader gera uma tabela de classes estática, mais rápida a carregar
--no-interaction nenhuma pergunta, indispensável em implantação automatizada

Envia sempre o ficheiro composer.lock com o projeto, e corre composer install e não composer update: o primeiro comando instala exatamente as versões do lock, o segundo recalcula-as e pode introduzir alterações por testar em plena colocação em produção.

Erros frequentes

Executar o instalador sem verificar a assinatura Lanças com sudo um script PHP descarregado da rede, sem garantia sobre o seu conteúdo. A comparação de hashes é a única proteção disponível.
sudo composer install Os scripts post-install das dependências correm como root, e os ficheiros criados pertencem ao root, o que bloqueia depois a escrita pelo servidor web.
composer update em produção Recalcula as versões e pode introduzir alterações por testar. Em implantação, usa-se composer install a partir do composer.lock.
Esquecer o unzip O Composer passa a descomprimir os ficheiros em PHP, bastante mais devagar.
Confiar no pacote Debian Funciona mas fica atrás da versão corrente, ao passo que o Composer se atualiza sozinho com self-update.
Newsletter

Os novos testes, tutoriais e projetos, por e-mail.

Testes reproduzíveis, código versionado, resultados datados. Nunca spam.