Instalar o stack LAMP no Ubuntu 24.04 e 22.04: Apache2, PHP 8, MySQL e phpMyAdmin

Publicado a Atualizado a 8 min de leitura

Apache2, PHP 8, MySQL ou MariaDB e phpMyAdmin no Ubuntu 24.04 LTS ou 22.04 LTS: a instalação completa passo a passo, incluindo a proteção do acesso.

Pretende instalar o Apache2, o PHP 8, o MySQL e o phpMyAdmin, ou seja, um stack LAMP completo, no seu servidor Ubuntu 24.04 LTS ou Ubuntu 22.04 LTS? Este guia acompanha-o passo a passo por toda a instalação, desde o servidor web até ao acesso protegido à base de dados.

Uma vantagem em relação ao Debian: o Ubuntu tem os dois servidores de base de dados nos repositórios, tanto o mysql-server como o mariadb-server. A escolha é sua. Já o Debian fornece exclusivamente o MariaDB. Este guia mostra as duas variantes, todos os restantes passos são idênticos.

Requisitos

Precisa de um acesso SSH com privilégios de root (ou de um utilizador com permissão sudo) num Ubuntu atual. Recomendam-se o Ubuntu 24.04 LTS "Noble Numbat" e o Ubuntu 22.04 LTS "Jammy Jellyfish". O Ubuntu 20.04 LTS chegou ao fim do suporte regular em maio de 2025 e já não deve ser utilizado em produção.

Atualize primeiro a lista de pacotes e aplique as atualizações disponíveis:

apt update && apt upgrade -y

Instalar o Apache2 e os pacotes 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 software-properties-common apache2

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

Se houver uma firewall ativa no servidor, liberte as portas do servidor web:

ufw allow "Apache Full"

Instalar o PHP 8

A versão de PHP que obtém dos repositórios depende da sua distribuição. Por isso, um comando com número de versão fixo como apt install php8.3 falha no Ubuntu 22.04 LTS. Esta tabela mostra a versão fornecida em cada caso (dados de julho de 2026):

DistribuiçãoVersão de PHP nos repositórios
Ubuntu 24.04 LTSPHP 8.3
Ubuntu 22.04 LTSPHP 8.1

Use por isso os metapacotes sem número de versão. Estes instalam automaticamente a versão adequada à sua distribuição e funcionam da mesma forma em qualquer Ubuntu:

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 usar o PHP através de 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, enquanto um nome com versão como php8.3-fpm só existe no Ubuntu 24.04 LTS:

apt install -y php-fpm

A versão que foi realmente instalada é mostrada por:

php -v

Se precisar de uma versão que a sua edição do Ubuntu não traz (por exemplo o PHP 8.4), adicione o conhecido repositório de PHP de Ondřej Surý:

add-apt-repository ppa:ondrej/php

apt update

O add-apt-repository guarda a chave de assinatura automaticamente num ficheiro keyring próprio e associa-a exatamente a este repositório. O comando apt-key, muito usado no passado, está descontinuado e já não deve ser utilizado, 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 pacote com número de versão ficam disponíveis para todas as edições do Ubuntu. De seguida, instale a versão de PHP pretendida 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 de PHP em paralelo, defina qual delas o Apache2 deve utilizar:

a2dismod php8.3

a2enmod php8.4

systemctl restart apache2

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

Instalar e proteger o servidor de base de dados

O Ubuntu oferece-lhe os dois servidores de base de dados habituais, nestas versões:

PacoteUbuntu 24.04 LTSUbuntu 22.04 LTS
mysql-serverMySQL 8.0.46MySQL 8.0.46
mariadb-serverdisponíveldisponível

Para o MySQL, ou seja, o original da Oracle:

apt install -y mysql-server mysql-client

mysql_secure_installation

Para o MariaDB, o servidor que nasceu do MySQL e que fala o mesmo protocolo e a mesma linguagem de consulta:

apt install -y mariadb-server mariadb-client

mysql_secure_installation

Instale apenas uma das duas variantes, porque ambas ocupam a mesma porta. Para os passos seguintes deste guia não faz diferença qual escolheu.

O script mysql_secure_installation coloca várias perguntas. As versões atuais do MariaDB perguntam primeiro se deve passar para a autenticação por unix_socket. Esta opção faz sentido, porque o utilizador de base de dados root passa a poder autenticar-se apenas como utilizador de sistema root. A todas as outras perguntas (remover utilizadores anónimos, proibir o início de sessão remoto do root, apagar a base de dados de teste, recarregar as permissões) responda sempre y. Defina também uma palavra-passe forte para a base de dados.

Verifique a seguir se o serviço está a correr. O nome da unidade systemd depende do servidor escolhido:

systemctl status mysql

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 Ubuntu e instala-se num único passo:

apt install phpmyadmin -y

É cómodo, mas a versão fica muitas vezes atrás daquilo 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 no cookie são cifrados. 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 é esta:

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

Ligar o phpMyAdmin ao Apache2

Crie um ficheiro de configuração próprio do Apache2 para o phpMyAdmin:

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

O conteúdo para o phpmyadmin.conf:

#Configuração do PHPMyAdmin para o Apache2

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

Autentique-se na base de dados como utilizador de sistema root:

mysql -u root

Crie agora um utilizador de base de dados próprio. Ao fazê-lo, não utilize "root", "admin", "user" ou "username" como nome, mas sim um nome de utilizador próprio 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 aplicações individuais deve criar adicionalmente utilizadores com permissões limitadas, que só possam 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 funcionar, o Apache2, o PHP e o seu servidor de base de dados estão a trabalhar corretamente em conjunto.

Verifique adicionalmente a integração do PHP com um pequeno ficheiro de teste:

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

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

rm /var/www/html/info.php

Notas de segurança para o uso em produção

Um stack LAMP acabado de instalar ainda não está protegido. Deve completar estes pontos:

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

Erros frequentes e soluções

O browser 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 em config.inc.php o valor de blowfish_secret. Gere-o com openssl rand -base64 32 e introduza-o.

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

O Apache2 já não arranca depois de uma alteração na configuração: verifique a configuração com apachectl configtest, a saída indica o ficheiro e a linha do erro.

Perguntas frequentes

Devo instalar o MySQL ou o MariaDB no Ubuntu?
O Ubuntu oferece os dois: o mysql-server fornece o MySQL 8.0.46 e o mariadb-server o servidor MariaDB, que nasceu a partir dele. Para este guia a escolha não faz diferença. Instale apenas uma das duas variantes, porque ocupam a mesma porta. O Debian, já agora, não tem pacote mysql-server, aí só resta o MariaDB.
Que versão de PHP vem com o Ubuntu?
O Ubuntu 24.04 LTS traz o PHP 8.3 e o Ubuntu 22.04 LTS o PHP 8.1. Use por isso os metapacotes sem número de versão, ou seja, php e php-fpm. Um comando com número fixo como apt install php8.3 falha no Ubuntu 22.04 LTS.
Como obtenho uma versão de PHP mais recente do que a do Ubuntu?
Adicione o conhecido repositório de PHP com add-apt-repository ppa:ondrej/php. O comando guarda a chave de assinatura automaticamente num ficheiro keyring próprio e associa-a exatamente a esse repositório. Só depois ficam disponíveis nomes de pacote como php8.4-fpm.
Porque é que o browser 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 e o nome da sua versão de 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 por regra a autenticação unix_socket e por isso não consegue iniciar sessão através da interface web. Crie para esse efeito um utilizador de base de dados próprio.

LAMP Apache2 PHP MariaDB MySQL phpMyAdmin Ubuntu 24.04 Ubuntu