Rozdział 1 z 5

Instalacja PHP i rozszerzeń dla Laravela na Debianie 13

zweryfikowano 2 września 2026 · 4 min

Szybka odpowiedź

Debian 13 dostarcza PHP 8.4 we własnych repozytoriach: sudo apt install php-cli php-fpm php-mbstring php-xml php-curl php-zip php-bcmath php-intl php-mysql wystarczy Laravelowi 13, bez zewnętrznego repozytorium. Uwaga na dwa pakiety wymieniane bez powodu: php-json od PHP 8.0 nic już nie wnosi, a potrzebny jest php-mysql, nie php-mysqli, bo Laravel idzie przez PDO.

Laravel 13 wymaga co najmniej PHP 8.2 i garstki rozszerzeń. Dobra wiadomość: Debian 13 „trixie” dostarcza PHP 8.4 we własnych repozytoriach, więc zewnętrzne repozytorium Sury jest w typowym scenariuszu zbędne.

Kroki wykonane na czystym kontenerze z Debianem 13, 2 września 2026 roku. Ten rozdział należy do instalacji Laravela na Debianie, w ścieżce Programowanie webowe.

Sprawdź, co oferuje twój Debian

Zanim dołożysz jakiekolwiek repozytorium, zobacz, co daje sama dystrybucja:

bash
sudo apt update
apt-cache policy php-cli
code
php-cli:
  Installed: (none)
  Candidate: 2:8.4+96
  Version table:
     2:8.4+96 500
        500 http://deb.debian.org/debian trixie/main arm64 Packages

PHP 8.4 jest dostępne. Laravelowi 13 wystarcza to z zapasem i oszczędza ci utrzymywania zewnętrznego repozytorium. Zestawienie wersji Debiana i dostarczanej z nią wersji PHP:

Debian PHP z oficjalnych repozytoriów Wystarczy dla Laravela 13?
13 „trixie” 8.4 Tak
12 „bookworm” 8.2 Tak, dokładnie wymagane minimum
11 „bullseye” 7.4 Nie, potrzebne zewnętrzne repozytorium

Instalacja PHP i rozszerzeń

Jedno polecenie pokrywa podstawę wymaganą przez Laravela oraz sterowniki baz danych:

bash
sudo apt install -y php-cli php-fpm \
  php-mbstring php-xml php-curl php-zip \
  php-bcmath php-intl \
  php-mysql php-sqlite3 \
  unzip curl ca-certificates

Dwóch popularnych rozszerzeń nie ma na tej liście, bo zależą od twoich decyzji architektonicznych: php-redis, omówiony w rozdziale o Redisie, oraz php-gd lub php-imagick do obróbki obrazów.

Sprawdź uzyskaną wersję:

bash
php -v
code
PHP 8.4.24 (cli) (built: Jul 31 2026 05:11:11) (NTS)

Następnie upewnij się, że wszystkie rozszerzenia wymagane przez Laravela są na miejscu:

bash
for e in ctype curl dom fileinfo filter hash mbstring openssl \
         pcre pdo session tokenizer xml bcmath intl zip; do
  printf "%-10s %s\n" "$e" "$(php -m | grep -qix "$e" && echo OK || echo MANQUANT)"
done

Na instalacji testowej wszystkie szesnaście linii zwraca OK. Część z tych rozszerzeń jest wkompilowana w debianowy plik binarny PHP i nie ma osobnego pakietu: mimo to pojawiają się w php -m.

Dwa pakiety wymieniane bez powodu

php-json nie ma już racji bytu

Od PHP 8.0 rozszerzenie JSON jest wkompilowane w plik binarny i nie da się go wyłączyć. Pakiet php-json został w Debianie wyłącznie jako pakiet przejściowy. Instalacja niczego nie psuje, ale też niczego nie wnosi.

php-mysqli to nie ten pakiet

Laravel idzie przez PDO, nie przez mysqli. Potrzebny jest php-mysql, a on dostarcza jedno i drugie. Sprawdź, co PHP naprawdę widzi:

bash
php -r 'echo implode(", ", PDO::getAvailableDrivers()), PHP_EOL;'
code
mysql, sqlite

Jeśli mysql nie pojawi się na tej liście, Laravel nie połączy się ani z MySQL, ani z MariaDB, niezależnie od ustawień w pliku .env.

Ustawienia PHP pod aplikację webową

Obok siebie istnieją dwa pliki, z różnymi wartościami: jeden dla wiersza poleceń, drugi dla serwera WWW. Poprawianie niewłaściwego to klasyczne źródło nieporozumień.

bash
/etc/php/8.4/cli/php.ini    # artisan, composer, zadania cykliczne
/etc/php/8.4/fpm/php.ini    # żądania obsługiwane przez nginx lub Apache

Ustawienia, które liczą się dla aplikacji Laravel, siedzą w pliku FPM:

/etc/php/8.4/fpm/php.ini
memory_limit = 256M
upload_max_filesize = 20M
post_max_size = 21M
max_execution_time = 60

post_max_size musi pozostać większy niż upload_max_filesize, inaczej wysyłka o maksymalnym rozmiarze zostanie odrzucona, zanim dotrze do aplikacji. Następnie przeładuj usługę, bo bez tego wartości pozostaną bez zmian:

bash
sudo systemctl reload php8.4-fpm
php -i | grep memory_limit          # wartość dla CLI
sudo -u www-data php-fpm8.4 -i | grep memory_limit

PHP jest na miejscu, kolejnym krokiem jest instalacja Composera.

Instalacja innej wersji PHP z repozytorium Sury

Ten objazd ma sens tylko wtedy, gdy celujesz w wersję, której Debian nie dostarcza: PHP 8.5 na Debianie 13 albo PHP 8.2 na Debianie 11. Metoda się zmieniła: apt-key został usunięty w Debianie 12, trzeba przejść na osobny pęk kluczy.

bash
sudo apt install -y curl ca-certificates
sudo curl -fsSLo /etc/apt/keyrings/php.gpg https://packages.sury.org/php/apt.gpg

echo "deb [signed-by=/etc/apt/keyrings/php.gpg] https://packages.sury.org/php/ $(. /etc/os-release && echo $VERSION_CODENAME) main" \
  | sudo tee /etc/apt/sources.list.d/php.list

sudo apt update
sudo apt install -y php8.5-cli php8.5-fpm php8.5-mbstring php8.5-xml php8.5-curl php8.5-zip php8.5-bcmath php8.5-intl php8.5-mysql

Przy kilku zainstalowanych wersjach wybierz tę, która odpowiada na polecenie php:

bash
sudo update-alternatives --config php
Ile kosztuje zewnętrzne repozytorium

Trzeba je będzie utrzymywać: przy każdej zmianie wersji Debiana sprawdzać, czy repozytorium nadąża, i osobno pilnować aktualizacji bezpieczeństwa. Jeśli oficjalne repozytoria wystarczają, zostań przy nich.

Częste błędy

Instalacja php-mysqli zamiast php-mysql Laravel używa PDO. Bez pdo_mysql żadne połączenie z MySQL nie zadziała, niezależnie od ustawień w .env.
Dokładanie repozytorium Sury bez potrzeby Debian 13 dostarcza już PHP 8.4. Zewnętrzne repozytorium to dodatkowe utrzymanie i osobne pilnowanie aktualizacji bezpieczeństwa.
apt-key został usunięty w Debianie 12 Poradniki, które go używają, kończą się błędem. Potrzebny jest pęk kluczy w /etc/apt/keyrings i opcja signed-by.
Edycja niewłaściwego php.ini Plik w cli/ i plik w fpm/ to dwa różne pliki. Ustawienia istotne dla aplikacji webowej siedzą w fpm/.
Zapomniane przeładowanie PHP-FPM Wartości zmienione w php.ini wchodzą w życie dopiero po systemctl reload php8.4-fpm.
post_max_size mniejszy niż upload_max_filesize Wysyłka o maksymalnym rozmiarze zostaje odrzucona, zanim dotrze do aplikacji.
Newsletter

Nowe testy, poradniki i projekty — e-mailem.

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