Uma stack LAMP (Linux, Apache, MariaDB, PHP) é a base clássica do WordPress, do Laravel e da maioria das aplicações PHP. Neste guia, vai montá-la passo a passo num VPS Linux Infrawire novo com Ubuntu 24.04, com um virtual host dedicado e uma firewall que expõe apenas o necessário.
📋 Pré-requisitos
- Um VPS KVM com Ubuntu 24.04 (o IP e a palavra-passe root estão na sua área de cliente)
- Acesso SSH como root ou como utilizador com permissões
sudo - Um domínio
example.comcujos registos A (e AAAA) apontam paraVPS_IP
Os comandos abaixo assumem que é root. Caso contrário, anteponha sudo.
1. Atualizar o sistema
Bashapt update && apt upgrade -y
2. Instalar o Apache
Bashapt install -y apache2 systemctl enable --now apache2 apache2 -v
O serviço arranca de imediato e inicia com o sistema.
3. Instalar o MariaDB
O MariaDB está nos repositórios do Ubuntu e substitui o MySQL sem alterações. Se preferir o MySQL da Oracle, instale mysql-server, mas nunca os dois na mesma máquina.
Bashapt install -y mariadb-server systemctl enable --now mariadb mysql_secure_installation
No assistente, mantenha a autenticação unix_socket para o root, defina uma palavra-passe forte se lhe for pedida, remova os utilizadores anónimos, proíba o login remoto do root e elimine a base de dados de teste. Depois crie uma base de dados e um utilizador dedicados à sua aplicação:
Bashmariadb
SQL1CREATE DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; 2CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'STRONG_PASSWORD'; 3GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'localhost'; 4FLUSH PRIVILEGES; 5EXIT;
4. Instalar o PHP 8.3
O Ubuntu 24.04 inclui o PHP 8.3 nos repositórios predefinidos, por isso não precisa de nenhum PPA adicional.
Bashapt install -y php libapache2-mod-php php-mysql php-cli php-curl php-gd php-mbstring php-xml php-zip php-intl php -v
O pacote libapache2-mod-php muda o Apache para o MPM prefork automaticamente e carrega o módulo PHP.
5. Criar um virtual host e ativar o mod_rewrite
Bashmkdir -p /var/www/example.com/public_html chown -R www-data:www-data /var/www/example.com nano /etc/apache2/sites-available/example.com.conf
Apache1<VirtualHost *:80> 2 ServerName example.com 3 ServerAlias www.example.com 4 DocumentRoot /var/www/example.com/public_html 5 6 <Directory /var/www/example.com/public_html> 7 AllowOverride All 8 Require all granted 9 </Directory> 10 11 ErrorLog ${APACHE_LOG_DIR}/example.com-error.log 12 CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined 13</VirtualHost>
AllowOverride All ativa os ficheiros .htaccess, dos quais dependem os URL amigáveis do WordPress ou do Laravel. Ative agora o módulo e o site e desative a página predefinida:
Basha2enmod rewrite a2ensite example.com.conf a2dissite 000-default.conf apache2ctl configtest systemctl reload apache2
configtest deve responder Syntax OK antes de recarregar.
6. Configurar a firewall
Permita primeiro o SSH, caso contrário ficará bloqueado ao ativar a firewall.
Bashufw allow OpenSSH ufw allow 'Apache Full' ufw enable ufw status
O perfil Apache Full abre as portas 80 e 443. Não abra a porta 3306: o MariaDB só precisa de escutar localmente.
7. Testar o PHP e apagar o ficheiro de teste
Bashecho '<?php phpinfo();' > /var/www/example.com/public_html/info.php curl -sI http://example.com/info.php | head -n 1
Deverá obter HTTP/1.1 200 OK. Abra http://example.com/info.php no navegador para ver a página de configuração do PHP. Uma página phpinfo() revela versões, caminhos e módulos, por isso apague-a de imediato:
Bashrm /var/www/example.com/public_html/info.php
Verifique também os restantes componentes:
Bashapache2ctl -M | grep -E 'rewrite|php' php -m | grep -E 'mysqli|pdo_mysql' systemctl is-active apache2 mariadb
🛠️ Resolução de problemas
A página predefinida do Apache continua a aparecer. O site predefinido ainda está ativo ou o DNS ainda não propagou. Execute a2dissite 000-default.conf, recarregue o Apache e teste com curl -I -H 'Host: example.com' http://VPS_IP/.
403 Forbidden. Verifique se o diretório tem Require all granted, se o www-data consegue ler os ficheiros (ls -ld /var/www/example.com/public_html) e consulte o registo /var/log/apache2/example.com-error.log.
O navegador descarrega o ficheiro PHP em vez de o executar. O módulo PHP não está carregado. Execute apache2ctl -M | grep php e depois systemctl restart apache2. Se nada aparecer, reinstale o libapache2-mod-php.
As regras de reescrita são ignoradas (404 em URL amigáveis). Confirme que executou a2enmod rewrite e que o seu bloco <Directory> contém AllowOverride All.
🎉 A sua stack LAMP está pronta: Apache, MariaDB e PHP 8.3 preparados para alojar o seu primeiro site.