Instalar um stack LAMP no Debian 13 e Debian 12: Apache2, PHP 8, MariaDB e phpMyAdmin

Publicado a Atualizado a 8 min de leitura

Apache2, PHP 8, MariaDB e phpMyAdmin no Debian 13 ou Debian 12: toda a configuração passo a passo, incluindo a proteção do sistema e a resolução de erros.

Quer instalar o Apache2, o PHP 8, uma base de dados MySQL e o phpMyAdmin, ou seja, um stack LAMP completo, no seu servidor Debian 13 (Trixie) ou Debian 12 (Bookworm)? Este guia acompanha-o passo a passo por toda a configuração, desde o servidor web até ao acesso protegido à base de dados.

Importante quanto ao servidor de base de dados: o Debian não inclui qualquer pacote mysql-server, em nenhuma versão atual. No Debian instala sempre o MariaDB. O MariaDB nasceu do MySQL, fala o mesmo protocolo e a mesma linguagem de consulta, e ferramentas como o phpMyAdmin ou a extensão PHP php-mysql continuam a trabalhar com ele sem qualquer adaptação. Por isso, quando este guia fala de bases de dados MySQL, o que corre por baixo é o MariaDB.

Pré-requisitos

Precisa de um acesso SSH com direitos de root (ou de um utilizador com permissão sudo) num Debian recente. Recomendamos o Debian 13 "Trixie" e o Debian 12 "Bookworm". O Debian 10 chegou ao fim do suporte em junho de 2024 e já não recebe atualizações de segurança regulares, pelo que deixou de ser adequado para utilização em produção.

Comece por atualizar a lista de pacotes e instale as atualizações disponíveis:

apt update

apt upgrade -y

Instalar o Apache2 e os pacotes de base

Instale o servidor web juntamente com os pacotes auxiliares de que vai precisar nos passos seguintes:

apt install -y nano curl wget unzip ca-certificates apt-transport-https lsb-release gnupg apache2

A seguir, abra http://<IP-do-seu-servidor>/ no navegador. Se aparecer a página predefinida do Apache2, o servidor web já está a funcionar.

Instalar o PHP 8

A versão do PHP que obtém a partir dos repositórios depende da sua distribuição. Por isso, um comando com um número de versão fixo como apt install php8.4 falha no Debian 12, onde existe apenas o PHP 8.2. Esta tabela mostra a versão fornecida por cada distribuição (dados de julho de 2026):

DistribuiçãoVersão do PHP nos repositórios
Debian 13PHP 8.4
Debian 12PHP 8.2
Debian 11PHP 7.4

Utilize por isso os metapacotes sem número de versão. Eles instalam automaticamente a versão adequada à sua distribuição e comportam-se da mesma forma em qualquer Debian:

apt install -y php php-cli php-common php-curl php-gd php-intl php-mbstring php-mysql php-opcache php-readline php-xml php-zip php-bz2 libapache2-mod-php

Se preferir executar o PHP através do FPM em vez do módulo do Apache, o princípio é o mesmo. Também aqui o metapacote leva ao objetivo de forma fiável, ao passo que nomes com versão fixa como php8.4-fpm só existem no Debian 13:

apt install -y php-fpm

Para saber que versão foi realmente instalada:

php -v

Se precisar de uma versão que a sua edição do Debian não traz (por exemplo, o PHP 8.4 no Debian 12), integre o repositório PHP de Ondřej Surý. A chave de assinatura é instalada através de um pacote keyring próprio e, na linha de sources, fica associada exatamente a esse repositório através de signed-by=:

curl -sSLo /tmp/debsuryorg-archive-keyring.deb https://packages.sury.org/debsuryorg-archive-keyring.deb

dpkg -i /tmp/debsuryorg-archive-keyring.deb

echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/php.list

apt update

O antigo método com apt-key add está descontinuado desde o Debian 11 e não deve continuar a ser usado, porque uma chave registada dessa forma seria válida para todos os repositórios do sistema.

Só através deste repositório é que os nomes de pacotes com versão ficam disponíveis em todas as edições do Debian. De seguida, instale a versão do PHP pretendida, juntamente com as extensões habituais:

apt install -y php8.4 php8.4-cli php8.4-common php8.4-curl php8.4-gd php8.4-intl php8.4-mbstring php8.4-mysql php8.4-opcache php8.4-readline php8.4-xml php8.4-zip php8.4-bz2 libapache2-mod-php8.4

Se depois disso ficarem várias versões do PHP a correr em paralelo, defina qual delas o Apache2 deve utilizar:

a2dismod php8.2

a2enmod php8.4

systemctl restart apache2

Com php -v verifica que versão está ativa na linha de comandos.

Instalar e proteger o MariaDB como servidor de base de dados

Como foi referido no início, no Debian não existe qualquer pacote mysql-server. O servidor de base de dados chama-se aqui MariaDB e vem nesta edição, consoante a versão do Debian:

DistribuiçãoServidor de base de dados nos repositórios
Debian 13MariaDB 11.8
Debian 12MariaDB 10.11
Debian 11MariaDB 10.5

Instale o servidor e inicie logo a seguir o processo de proteção:

apt install -y mariadb-server mariadb-client

mysql_secure_installation

O script coloca várias perguntas. As versões atuais do MariaDB perguntam primeiro se pretende mudar para a autenticação unix_socket. Esta opção faz sentido, porque o utilizador de base de dados root passa a poder iniciar sessão apenas como utilizador de sistema root. Responda y a todas as restantes perguntas (remover utilizadores anónimos, proibir o acesso remoto para root, apagar a base de dados de teste, recarregar as permissões). Defina além disso uma palavra-passe forte para a base de dados.

Verifique a seguir se o serviço está a correr:

systemctl status mariadb

Instalar o phpMyAdmin

Para o phpMyAdmin tem duas possibilidades. O pacote phpmyadmin está nos repositórios de todas as versões atuais do Debian e instala-se num único passo:

apt install phpmyadmin -y

É cómodo, mas essa versão fica muitas vezes atrás da que o fabricante disponibiliza. Quem quiser sempre a edição mais recente descarrega o phpMyAdmin diretamente. É exatamente esse o caminho descrito nos passos seguintes:

cd /usr/share && wget https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.zip -O phpmyadmin.zip && unzip phpmyadmin.zip && rm phpmyadmin.zip && mv phpMyAdmin-*-all-languages phpmyadmin && chmod -R 0755 phpmyadmin

De seguida, crie o ficheiro de configuração:

cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php

O phpMyAdmin precisa de um valor aleatório como blowfish_secret, com o qual os dados de sessão são cifrados no cookie. Gere um valor desses:

openssl rand -base64 32

Introduza-o depois no ficheiro de configuração:

nano /usr/share/phpmyadmin/config.inc.php

A linha em causa é a seguinte:

$cfg['blowfish_secret'] = 'INTRODUZA_AQUI_O_VALOR_GERADO';

Ligar o phpMyAdmin ao Apache2

Crie um ficheiro de configuração do Apache2 dedicado ao phpMyAdmin:

nano /etc/apache2/conf-available/phpmyadmin.conf

O conteúdo para phpmyadmin.conf:

#Configuração Apache2 do PHPMyAdmin

Alias /phpmyadmin /usr/share/phpmyadmin

<Directory /usr/share/phpmyadmin>
    Options SymLinksIfOwnerMatch
    DirectoryIndex index.php
</Directory>

<Directory /usr/share/phpmyadmin/templates>
    Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/libraries>
    Require all denied
</Directory>
<Directory /usr/share/phpmyadmin/setup/lib>
    Require all denied
</Directory>

Ative a configuração, recarregue o Apache2 e crie o diretório temporário com as permissões adequadas:

a2enconf phpmyadmin && systemctl reload apache2 && mkdir -p /usr/share/phpmyadmin/tmp/ && chown -R www-data:www-data /usr/share/phpmyadmin/tmp/

Criar um utilizador de base de dados

Inicie sessão na base de dados como utilizador de sistema root:

mysql -u root

Crie agora um utilizador de base de dados próprio. Não use "root", "admin", "user" ou "username" como nome, mas antes um nome de utilizador só seu e uma palavra-passe longa e aleatória:

#IMPORTANTE! SUBSTITUA USER E PASSWORD PELOS SEUS PRÓPRIOS DADOS DE ACESSO.

CREATE USER 'USER'@'localhost' IDENTIFIED BY 'PASSWORD';

GRANT ALL PRIVILEGES ON *.* TO 'USER'@'localhost' WITH GRANT OPTION;

FLUSH PRIVILEGES;

Para cada aplicação deve criar ainda utilizadores com permissões limitadas, que só podem aceder à sua própria base de dados:

CREATE DATABASE minhaapp;

CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'PASSWORD';

GRANT ALL PRIVILEGES ON minhaapp.* TO 'appuser'@'localhost';

FLUSH PRIVILEGES;

Pode sair da consola da base de dados a qualquer momento com:

exit

Testar o stack LAMP

Abra o phpMyAdmin em http://<IP-do-seu-servidor>/phpmyadmin e inicie sessão com o utilizador que acabou de criar. Se o início de sessão resultar, o Apache2, o PHP e o MariaDB estão a trabalhar corretamente em conjunto.

Pode verificar a integração do PHP com um pequeno ficheiro de teste adicional:

echo "<?php phpinfo();" > /var/www/html/info.php

Depois de consultar http://<IP-do-seu-servidor>/info.php, apague o ficheiro sem falta, porque ele revela detalhes sobre a configuração do seu servidor:

rm /var/www/html/info.php

Recomendações de segurança para produção

Um stack LAMP acabado de instalar ainda não está protegido. Deve completá-lo nos seguintes pontos:

  • O phpMyAdmin é um alvo de ataque muito procurado. Limite o acesso ao seu próprio endereço IP, usando Require ip 203.0.113.10 no bloco Directory em vez de uma autorização aberta a todos.
  • Configure HTTPS, para que as palavras-passe não sejam transmitidas em texto simples. Sem cifragem, os seus dados de acesso podem ser lidos no caminho até ao servidor.
  • Mantenha o phpMyAdmin atualizado. Como o instalou manualmente, o apt upgrade não trata disso automaticamente.
  • Crie backups regulares das bases de dados e guarde-os fora do servidor.

Erros frequentes e soluções

O navegador descarrega o ficheiro PHP em vez de o executar: o módulo PHP não está ativo no Apache2. Ative-o com a2enmod php8.4 e reinicie o servidor web com systemctl restart apache2.

O phpMyAdmin indica "The configuration file now needs a secret passphrase": falta o valor de blowfish_secret no config.inc.php. Gere-o com openssl rand -base64 32 e introduza-o no ficheiro.

"Access denied for user" ao iniciar sessão no phpMyAdmin: depois do mysql_secure_installation, o utilizador de base de dados root usa normalmente a autenticação unix_socket e por isso não se consegue autenticar através da interface web. Utilize o utilizador que criou adicionalmente.

O Apache2 deixou de arrancar após uma alteração à configuração: verifique a configuração com apachectl configtest, a saída indica o ficheiro e a linha do erro.

Perguntas frequentes

Porque é que o Debian instala o MariaDB em vez do MySQL?
Nenhuma versão atual do Debian contém um pacote chamado mysql-server. O servidor de base de dados fornecido é o MariaDB, um servidor que nasceu do MySQL, com o mesmo protocolo e a mesma linguagem de consulta. O Debian 13 traz o MariaDB 11.8, o Debian 12 a versão 10.11 e o Debian 11 a versão 10.5.
Que versão do PHP vem com o Debian?
O Debian 13 traz o PHP 8.4, o Debian 12 o PHP 8.2 e o Debian 11 ainda o PHP 7.4. Utilize por isso os metapacotes sem número de versão, ou seja, php ou php-fpm. Um comando com um número fixo como apt install php8.4 falha no Debian 12, onde esse pacote não existe.
Como obtenho uma versão do PHP mais recente do que a do Debian?
Através do repositório PHP de Ondřej Surý. A chave de assinatura entra no sistema como pacote keyring próprio e fica associada exatamente a esse repositório através de signed-by. Só depois disso é que os nomes de pacotes com versão, como php8.4-fpm, ficam disponíveis em qualquer edição do Debian.
Porque é que o navegador descarrega o ficheiro PHP em vez de o executar?
Nesse caso, o módulo PHP não está ativo no Apache2. Ative-o com a2enmod seguido do nome da sua versão do PHP, por exemplo a2enmod php8.4, e reinicie a seguir o Apache2 com systemctl restart apache2.
Porque não consigo iniciar sessão no phpMyAdmin como root?
Depois de executar o mysql_secure_installation, o utilizador de base de dados root usa normalmente a autenticação unix_socket e por isso não se consegue autenticar através da interface web. Crie para esse efeito um utilizador de base de dados próprio.

LAMP Apache2 PHP MariaDB MySQL phpMyAdmin Debian 13 Debian