Capítulo 1 de 5

Instalar o PHP e as suas extensões no Debian 13 para Laravel

verificado a 2 Setembro 2026 · 4 min

Resposta rápida

O Debian 13 fornece o PHP 8.4 nos repositórios oficiais: sudo apt install php-cli php-fpm php-mbstring php-xml php-curl php-zip php-bcmath php-intl php-mysql chega para o Laravel 13, sem repositório externo. Atenção a dois pacotes citados sem razão: o php-json deixou de servir para alguma coisa a partir do PHP 8.0, e o que é preciso é o php-mysql, não o php-mysqli, porque o Laravel passa por PDO.

O Laravel 13 exige PHP 8.2 no mínimo e um punhado de extensões. Boa notícia: o Debian 13 «trixie» traz o PHP 8.4 nos repositórios oficiais, o que torna o repositório externo Sury desnecessário no caso corrente.

Passos executados num contentor Debian 13 limpo, a 2 de setembro de 2026. Este capítulo faz parte da instalação do Laravel num servidor Debian, no percurso Desenvolvimento web.

Ver o que o teu Debian já propõe

Antes de acrescentar seja que repositório for, olha para o que a distribuição oferece:

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

O PHP 8.4 está disponível. Chega e sobra para o Laravel 13, e poupa-te um repositório externo para manter. A correspondência entre a versão do Debian e a versão do PHP fornecida:

Debian PHP dos repositórios oficiais Chega para o Laravel 13?
13 «trixie» 8.4 Sim
12 «bookworm» 8.2 Sim, no mínimo exigido
11 «bullseye» 7.4 Não, é preciso um repositório externo

Instalar o PHP e as extensões

Um único comando cobre a base exigida pelo Laravel, mais os drivers de base de dados:

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

Duas extensões comuns não constam desta lista porque dependem das tuas escolhas de arquitetura: o php-redis, tratado no capítulo sobre o Redis, e o php-gd ou o php-imagick para o tratamento de imagens.

Confirma a versão obtida:

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

Verifica depois que todas as extensões esperadas pelo Laravel estão presentes:

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 instalação de teste, as dezasseis linhas devolvem OK. Várias destas extensões estão compiladas no binário PHP do Debian e não têm pacote próprio: aparecem à mesma no php -m.

Dois pacotes citados sem razão

O php-json já não tem razão de ser

Desde o PHP 8.0, a extensão JSON está compilada no binário e já não pode ser desativada. O pacote php-json subsiste no Debian como simples pacote de transição. Instalá-lo não parte nada, mas também não traz nada.

O php-mysqli não é o pacote certo

O Laravel passa por PDO, não por mysqli. O que é preciso é o php-mysql, e esse fornece os dois. Confirma o que o PHP vê realmente:

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

Se o mysql não aparecer nesta lista, o Laravel não conseguirá ligar-se ao MySQL nem ao MariaDB, sejam quais forem as definições do ficheiro .env.

Afinar o PHP para uma aplicação web

Coexistem dois ficheiros, com valores diferentes: o da linha de comandos e o do servidor web. Mexer no errado é uma fonte clássica de confusão.

bash
/etc/php/8.4/cli/php.ini    # artisan, composer, tarefas agendadas
/etc/php/8.4/fpm/php.ini    # pedidos servidos pelo nginx ou Apache

As definições que contam para uma aplicação Laravel estão no ficheiro do FPM:

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

O post_max_size tem de continuar acima do upload_max_filesize, senão um envio no tamanho máximo é rejeitado antes de chegar à aplicação. Recarrega em seguida o serviço, sem o que os valores ficam na mesma:

bash
sudo systemctl reload php8.4-fpm
php -i | grep memory_limit          # valor da CLI
sudo -u www-data php-fpm8.4 -i | grep memory_limit

Com o PHP no sítio, a etapa seguinte é a instalação do Composer.

Instalar outra versão do PHP com o repositório Sury

Este desvio só se justifica se precisares de uma versão que o Debian não fornece: PHP 8.5 no Debian 13, ou PHP 8.2 num Debian 11. O método mudou: o apt-key foi removido no Debian 12, é preciso passar por um chaveiro dedicado.

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

Com várias versões instaladas, escolhe a que responde ao comando php:

bash
sudo update-alternatives --config php
O que custa um repositório externo

Vais ter de o manter: a cada subida de versão do Debian, confirmar que o repositório acompanha, e vigiar as atualizações de segurança à parte. Se os repositórios oficiais chegarem, fica por eles.

Erros frequentes

Instalar o php-mysqli em vez do php-mysql O Laravel usa PDO. Sem pdo_mysql, nenhuma ligação MySQL funciona, sejam quais forem as definições do .env.
Acrescentar o repositório Sury sem necessidade O Debian 13 já fornece o PHP 8.4. Um repositório externo acrescenta manutenção e um acompanhamento de segurança à parte.
O apt-key foi removido no Debian 12 Os tutoriais que o usam falham. É preciso um chaveiro em /etc/apt/keyrings e a opção signed-by.
Mexer no php.ini errado O ficheiro em cli/ e o ficheiro em fpm/ são distintos. As definições que contam para uma aplicação web estão em fpm/.
Esquecer de recarregar o PHP-FPM Os valores alterados no php.ini só entram em vigor depois de systemctl reload php8.4-fpm.
post_max_size inferior a upload_max_filesize Um envio no tamanho máximo é rejeitado antes de chegar à aplicação.
Newsletter

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

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