Instalar um stack LAMP no Debian 13 e Debian 12: Apache2, PHP 8, MariaDB e phpMyAdmin
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ção | Versão do PHP nos repositórios |
|---|---|
| Debian 13 | PHP 8.4 |
| Debian 12 | PHP 8.2 |
| Debian 11 | PHP 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ção | Servidor de base de dados nos repositórios |
|---|---|
| Debian 13 | MariaDB 11.8 |
| Debian 12 | MariaDB 10.11 |
| Debian 11 | MariaDB 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.10no 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 upgradenã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?
Que versão do PHP vem com o Debian?
Como obtenho uma versão do PHP mais recente do que a do Debian?
Porque é que o navegador descarrega o ficheiro PHP em vez de o executar?
Porque não consigo iniciar sessão no phpMyAdmin como root?
2023-2026 KernelHost GmbH. Todos os direitos reservados. Este guia está protegido por direitos de autor. A sua republicação noutros sites, na íntegra, em parte ou de forma editada, não é permitida sem o nosso consentimento por escrito. Citações com indicação da fonte e ligação são expressamente bem-vindas.

