Instalar o stack LAMP no Ubuntu 24.04 e 22.04: Apache2, PHP 8, MySQL e phpMyAdmin
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ção | Versão de PHP nos repositórios |
|---|---|
| Ubuntu 24.04 LTS | PHP 8.3 |
| Ubuntu 22.04 LTS | PHP 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:
| Pacote | Ubuntu 24.04 LTS | Ubuntu 22.04 LTS |
|---|---|---|
| mysql-server | MySQL 8.0.46 | MySQL 8.0.46 |
| mariadb-server | disponível | disponí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.10em 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 upgradenã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?
Que versão de PHP vem com o Ubuntu?
Como obtenho uma versão de PHP mais recente do que a do Ubuntu?
Porque é que o browser descarrega o ficheiro PHP em vez de o executar?
Porque não consigo iniciar sessão no phpMyAdmin como root?
2022-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.

