Instale a pilha LAMP no Ubuntu 24.04 com Apache 2.4, MySQL ou MariaDB e PHP 8.3, deixe o banco seguro e teste tudo antes de publicar o site.
LAMP é a sigla de Linux, Apache, MySQL (ou MariaDB) e PHP: o conjunto que roda a maior parte dos sites em PHP, de WordPress a sistemas próprios. No Ubuntu 24.04 tudo vem do repositório oficial: Apache 2.4, MySQL 8.0 ou MariaDB 10.11 e PHP 8.3.
Antes de começar
- Um servidor com Ubuntu 24.04 e acesso SSH com um usuário que tenha
sudo. - O IP público do servidor. Se não souber, rode
hostname -I. - Sistema atualizado:
sudo apt update && sudo apt upgrade -y
Passo 1: instale o Apache e libere o firewall
sudo apt install -y apache2
sudo ufw allow OpenSSH
sudo ufw allow 'Apache Full'
sudo ufw enable
OpenSSH antes do ufw enable. Se ativar o firewall sem essa regra, sua sessão SSH cai e você fica sem acesso ao servidor.Abra http://IP-DO-SERVIDOR no navegador. Deve aparecer a página Apache2 Default Page.
Passo 2: instale o MySQL ou o MariaDB
Escolha um dos dois. Para sites PHP comuns, ambos funcionam igual.
# MySQL 8.0
sudo apt install -y mysql-server
# ou MariaDB 10.11
sudo apt install -y mariadb-server
O MySQL que vem no Ubuntu 24.04 é da série 8.0, que deixou de receber correções da Oracle em abril de 2026. Para um projeto novo de longo prazo, o MariaDB 10.11 do próprio Ubuntu ou o MySQL 8.4 do repositório oficial da Oracle são escolhas mais duradouras.
Depois, rode o assistente de segurança (no MariaDB o comando também pode ser chamado de mariadb-secure-installation):
sudo mysql_secure_installation
Responda sim para remover usuários anônimos, impedir login remoto do root, apagar o banco de teste e recarregar as permissões. No MySQL, o assistente também oferece um componente que exige senhas fortes; é opcional.
sudo mysql (ou sudo mariadb). Por isso o assistente pode pular a definição de senha do root, e isso é normal.Agora crie o banco e o usuário do site:
sudo mysql
CREATE DATABASE meusite CHARACTER SET utf8mb4;
CREATE USER 'meusite'@'localhost' IDENTIFIED BY 'Troque-Esta-Senha-2026';
GRANT ALL PRIVILEGES ON meusite.* TO 'meusite'@'localhost';
EXIT;
Passo 3: instale o PHP 8.3
sudo apt install -y php libapache2-mod-php php-mysql \
php-curl php-gd php-mbstring php-xml php-zip php-intl
php -v
O php -v deve mostrar PHP 8.3. As extensões da segunda linha são as que quase todo sistema pede (requisições externas, imagens, acentuação, XML, ZIP, tradução). O pacote libapache2-mod-php já liga o PHP no Apache. Reinicie para garantir:
sudo systemctl restart apache2
Passo 4: teste o PHP e a conexão com o banco
Crie um arquivo de teste que conecta no banco com o usuário criado:
sudo nano /var/www/html/teste.php
<?php
$db = new mysqli('localhost', 'meusite', 'Troque-Esta-Senha-2026', 'meusite');
echo 'PHP ' . PHP_VERSION . ' conectado ao banco ' . $db->server_info;
Abra http://IP-DO-SERVIDOR/teste.php. Se aparecer a versão do PHP e a do banco, a pilha está pronta. Apague o arquivo logo em seguida, porque ele tem a senha do banco:
sudo rm /var/www/html/teste.php
Opcional: PHP-FPM no lugar do mod_php
O mod_php é simples, mas obriga o Apache a usar o modo prefork, que gasta mais memória com muitos acessos. Com o PHP-FPM, o Apache usa o modo event, mais leve, e o PHP roda em processos separados:
sudo apt install -y php-fpm
sudo a2dismod php8.3 mpm_prefork
sudo a2enmod mpm_event proxy_fcgi setenvif
sudo a2enconf php8.3-fpm
sudo systemctl restart apache2
Repita o teste do passo 4 para confirmar que o PHP continua respondendo.
Próximos passos
- Crie um Virtual Host no Apache para cada domínio, com HTTPS grátis do Let's Encrypt.
- Instale o WordPress sobre esta pilha LAMP.
- Crie usuários de banco com permissões só no banco de cada site.
Problemas comuns
O navegador baixa o arquivo .php ou mostra o código
O PHP não está ligado no Apache. Com mod_php, rode sudo a2enmod php8.3; com PHP-FPM, sudo a2enconf php8.3-fpm. Depois, sudo systemctl restart apache2.
ERROR 1045: Access denied for user 'root'@'localhost'
Você tentou mysql -u root -p, mas o root do Ubuntu entra pelo sistema, não por senha. Use sudo mysql. Sistemas e sites devem usar o usuário próprio criado no passo 2, nunca o root.
SET PASSWORD has no significance for user 'root'@'localhost'
Algumas versões do assistente tentam definir a senha do root, que usa login pelo sistema, e ficam repetindo esse erro. Interrompa com Ctrl+C. As outras opções do assistente podem ser feitas rodando-o de novo e recusando a troca de senha.
Call to undefined function mysqli_connect() ou class "mysqli" not found
Falta a extensão do banco no PHP: sudo apt install -y php-mysql e reinicie o Apache.