Rozdział 2 z 5

Instalacja Composera na Debianie 13 z weryfikacją podpisu

zweryfikowano 2 września 2026 · 3 min

Szybka odpowiedź

Pobierz program instalacyjny, porównaj jego skrót SHA-384 z tym opublikowanym na composer.github.io/installer.sig i uruchom go tylko wtedy, gdy oba są zgodne. Zainstaluj go w /usr/local/bin/composer, żeby był dostępny dla wszystkich użytkowników. Później nigdy nie używaj sudo composer install: uruchamiaj Composera z konta właściciela projektu.

Composer instaluje Laravela i cały zestaw jego zależności. Na Debianie pytanie nie brzmi tylko „jak go zainstalować”, ale „jak to zrobić bez uruchamiania pobranego skryptu w ciemno”: oficjalna procedura sprawdza skrót programu instalacyjnego, zanim go odpali.

Kroki wykonane na Debianie 13 „trixie” 2 września 2026 roku, z PHP 8.4.24. Ten rozdział wpisuje się w instalację Laravela na Debianie, w ścieżce Programowanie webowe.

Wymagania wstępne

Composer to program w PHP: najpierw potrzebujesz PHP w wierszu poleceń.

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

unzip nie jest ozdobą: bez niego Composer rozpakowuje archiwa w PHP, znacznie wolniej.

Instalacja Composera z weryfikacją podpisu

Cztery polecenia, w tej kolejności. Liczy się trzecie: porównuje skrót pobranego pliku ze skrótem opublikowanym przez projekt.

bash
# 1. wzorcowy skrót, publikowany przez projekt Composer
EXPECTED="$(curl -sS https://composer.github.io/installer.sig)"

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

# 3. skrót otrzymanego pliku
ACTUAL="$(php -r 'echo hash_file("sha384", "composer-setup.php");')"

# 4. nie uruchamiamy niczego, jeśli oba się różnią
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 instalacji testowej oba skróty się zgadzają:

code
attendue : c8b085408188070d5f52bcfe4ecfbee5f727afa458b2573b8eaaf77b3419b0bf2768dc67c86944da1544f06fa544fd47
obtenue  : c8b085408188070d5f52bcfe4ecfbee5f727afa458b2573b8eaaf77b3419b0bf2768dc67c86944da1544f06fa544fd47
→ signature valide
Dlaczego ten krok nie jest opcjonalny

Bez niego uruchamiasz z uprawnieniami sudo skrypt PHP pobrany z sieci, bez żadnej gwarancji co do jego zawartości. Właśnie dlatego oficjalna dokumentacja publikuje wzorcowy skrót. Poradniki, które składają curl i php composer-setup.php bez porównania, pomijają jedyne dostępne zabezpieczenie.

Sprawdź wynik:

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

Umieszczenie pliku w /usr/local/bin pod nazwą composer udostępnia polecenie wszystkim użytkownikom serwera, bez grzebania w PATH.

A co z pakietem Debiana?

Debian ma pakiet composer. Działa, ale idzie w rytmie dystrybucji: wersja z repozytoriów prawie zawsze jest w tyle za bieżącą. Ponieważ Composer aktualizuje się sam jednym poleceniem, na serwerze aplikacyjnym instalacja ręczna pozostaje lepszym wyborem.

bash
sudo composer self-update          # najnowsza stabilna wersja
sudo composer self-update --rollback   # powrót do poprzedniej

Nie uruchamiaj Composera jako root

Instalowanie binarki przez sudo jest normalne. Używanie jej przez sudo już nie.

bash
# do uniknięcia
sudo composer install

# poprawnie: użytkownik będący właścicielem projektu
su - deploy
cd /var/www/mon-projet
composer install --no-dev --optimize-autoloader

Na maszynie z macOS problem wygląda inaczej i najczęściej objawia się jako nieznalezione polecenie laravel.

Powody są dwa. Skrypty post-install zależności wykonują się z uprawnieniami, które im dasz, więc sudo composer install to uruchomienie cudzego kodu na koncie roota. Do tego utworzone pliki należą wtedy do root, co wywołuje błędy zapisu, gdy tylko serwer WWW spróbuje pisać do storage/.

Composer zresztą sam ostrzega, gdy uruchamiasz go jako root bez COMPOSER_ALLOW_SUPERUSER.

Przydatne opcje na produkcji

bash
composer install --no-dev --optimize-autoloader --no-interaction
Opcja Efekt
--no-dev pomija zależności deweloperskie (testy, narzędzia do debugowania)
--optimize-autoloader generuje statyczną tablicę klas, szybszą przy ładowaniu
--no-interaction żadnych pytań, niezbędne przy automatycznym wdrożeniu

Zawsze wdrażaj plik composer.lock razem z projektem i uruchamiaj composer install, a nie composer update: pierwsze polecenie instaluje dokładnie wersje z blokady, drugie przelicza je od nowa i może wprowadzić nieprzetestowane zmiany w środku wdrożenia.

Częste błędy

Uruchomienie instalatora bez weryfikacji podpisu Odpalasz przez sudo skrypt PHP pobrany z sieci, bez żadnej gwarancji co do jego zawartości. Porównanie skrótu to jedyne dostępne zabezpieczenie.
sudo composer install Skrypty post-install zależności wykonują się jako root, a utworzone pliki należą do roota, co potem blokuje zapis serwerowi WWW.
composer update na produkcji Przelicza wersje i może wprowadzić nieprzetestowane zmiany. Przy wdrożeniu używa się composer install na podstawie composer.lock.
Pominięcie unzip Composer rozpakowuje wtedy archiwa w PHP, wyraźnie wolniej.
Poleganie na pakiecie Debiana Działa, ale zostaje w tyle za bieżącą wersją, podczas gdy Composer aktualizuje się sam przez self-update.
Newsletter

Nowe testy, poradniki i projekty — e-mailem.

Powtarzalne testy, wersjonowany kod, datowane wyniki. Nigdy spamu.