Como Instalar Linux, Nginx, MySQL, PHP (stack LEMP) no Ubuntu
Introdução
O stack de software LEMP serve páginas web dinâmicas e aplicações web escritas em PHP. Este é um acrónimo que descreve um sistema operativo Linux, com um servidor web Nginx (pronuncia-se como “Engine-X”). Os dados do backend são armazenados na base de dados MySQL e o processamento dinâmico é tratado pelo PHP.
Este guia demonstra como instalar um stack LEMP num servidor Ubuntu. O sistema operativo Ubuntu trata da parte Linux do stack. Vamos descrever como colocar os restantes componentes a funcionar.
Nota: Este tutorial destina-se principalmente ao Ubuntu 22.04 LTS com PHP 8.1. Para utilizadores do Ubuntu 24.04 LTS, ajuste as referências de versão do PHP de
php8.1-fpmparaphp8.3-fpmem todos os comandos. Além disso, certifique-se de atualizar quaisquer caminhos de socket do PHP-FPM na sua configuração Nginx (por exemplo, use/run/php/php8.3-fpm.sockpara Ubuntu 24.04).
Como Instalar Linux, Nginx, MySQL, PHP (stack LEMP) no Ubuntu
- Instalar o Servidor Web Nginx
- A instalar o MySQL
- Instalar PHP
- Configurando o Nginx para Usar o Processador PHP
- Testar PHP com Nginx
- Testar Conexão à Base de Dados a partir do PHP
Pré-requisitos
Use um utilizador sudo que não seja root no Ubuntu com o firewall UFW ativado. Siga o nosso guia de configuração inicial do servidor para Ubuntu para configurar isto.
Passo 1 – Instalar o Servidor Web Nginx
Para exibir páginas web aos visitantes do site, irá utilizar o Nginx, um servidor web de alto desempenho. Vai usar o gestor de pacotes APT para obter este software.
Atualize o índice de pacotes do seu servidor e, em seguida, instale o Nginx:
sudo apt updateDe seguida, execute apt install para instalar o Nginx:
sudo apt install nginxQuando solicitado, pressione Y e ENTER para confirmar que deseja instalar o Nginx. Assim que a instalação estiver concluída, o servidor web Nginx estará ativo e a funcionar no seu servidor Ubuntu.
Verifique se o Nginx está a funcionar:
sudo systemctl status nginxDeverá ver uma saída a indicar que o Nginx está activo:
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
Active: active (running) since...No Ubuntu, o Nginx é configurado para começar a correr após a instalação.
Permitir tráfego HTTP através do firewall ufw. O Nginx regista vários perfis de aplicação UFW durante a instalação. Verifique os perfis disponíveis:
sudo ufw app listAvailable applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSHAtive o perfil mais restritivo que permita o tráfego necessário. Como o SSL ainda não está configurado, permita apenas o tráfego HTTP na porta 80:
Ative isto executando o seguinte:
sudo ufw allow 'Nginx HTTP'
Verifique a alteração do firewall:
sudo ufw statusEsta saída mostra que o tráfego HTTP agora é permitido:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)Para testar a funcionalidade de domínio do servidor Nginx, aceda a http://your_domain utilizando o seu navegador preferido.
Se não tiver um nome de domínio apontado para o seu servidor e não souber o endereço IP público do seu servidor, pode encontrá-lo executando um dos seguintes comandos:
ip addr showhostname -IIsto irá imprimir alguns endereços IP. Pode experimentar cada um deles, por sua vez, no seu navegador web.
Como alternativa, pode verificar qual endereço IP é acessível, visto a partir de outros locais na internet:
curl -4 icanhazip.comDigite o endereço que recebe no seu navegador web e ele irá levá-lo à página inicial padrão do Nginx:
http://<server_domain_or_IP>Se recebeu esta página, significa que instalou com sucesso o Nginx e ativou o tráfego HTTP para o seu servidor web.
Passo 2 — Instalar o MySQL
Instale o MySQL para armazenar e gerir os dados do site. O MySQL é o sistema de gestão de bases de dados standard para ambientes PHP.
Novamente, use apt para adquirir e instalar este software:
sudo apt install mysql-serverQuando solicitado, confirme a instalação pressionando Y e depois ENTER.
Após a instalação, execute o script de segurança para remover as configurações padrão inseguras e restringir o acesso à base de dados:
sudo mysql_secure_installationSerá apresentada uma pergunta a perguntar se pretende configurar o VALIDATE PASSWORD PLUGIN.
Nota: Ativar esta funcionalidade é uma questão de julgamento. Se ativada, palavras-passe que não correspondam aos critérios especificados serão rejeitadas pelo MySQL com um erro. É seguro deixar a validação desativada, mas deve sempre usar palavras-passe fortes e únicas para as credenciais da base de dados.
Responda Y para sim, ou qualquer outra coisa para continuar sem ativar:
VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?
Press y|Y for Yes, any other key for No: Se responder "sim", será solicitado que selecione um nível de validação de palavra-passe. Tenha em mente que, se inserir 2 para o nível mais forte, receberá erros ao tentar definir qualquer palavra-passe que não contenha números, letras maiúsculas e minúsculas e caracteres especiais:
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1Independentemente de ter escolhido configurar o VALIDATE PASSWORD PLUGIN, o seu servidor irá pedir-lhe para selecionar e confirmar uma palavra-passe para o utilizador root do MySQL. Isto não deve ser confundido com o root do sistema. O utilizador root da base de dados é um utilizador administrativo com privilégios totais sobre o sistema de base de dados. Embora o método de autenticação padrão para o utilizador root do MySQL dispense a utilização de uma palavra-passe, mesmo quando uma é definida, deverá definir aqui uma palavra-passe forte como medida adicional de segurança. Falaremos sobre isto em breve.
Se ativou a validação de palavra-passe, será mostrada a força da palavra-passe que introduziu para o utilizador root e o seu servidor perguntará se deseja continuar com essa palavra-passe. Se estiver satisfeito com a sua palavra-passe atual, pressione Y para “sim” no aviso:
Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : yPara o resto das perguntas, pressione Y e prima a tecla ENTER em cada aviso. Isto irá remover alguns utilizadores anónimos e a base de dados de teste, desativar os logins remotos do root e carregar estas novas regras para que o MySQL respeite imediatamente as alterações que efetuou.
Quando terminar, teste se consegue iniciar sessão na consola MySQL:
sudo mysqlIsto irá ligar-se ao servidor MySQL como o utilizador administrativo da base de dados root, o que é inferido pelo uso de sudo ao executar este comando. Deverá receber a seguinte saída:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.28-0ubuntu4 (Ubuntu)
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>Para sair da consola MySQL, escreva o seguinte:
exitRepare que não precisou de fornecer uma palavra-passe para se ligar como utilizador root, mesmo tendo definido uma ao executar o script mysql_secure_installation. Isto deve-se ao facto de, quando instalado no Ubuntu, o método de autenticação por defeito para o utilizador administrativo do MySQL ser auth_socket, em vez de um método que utiliza palavra-passe. Isto pode parecer uma preocupação de segurança a princípio, mas torna o servidor de base de dados mais seguro, uma vez que os únicos utilizadores autorizados a iniciar sessão como utilizador MySQL root são os utilizadores do sistema com privilégios sudo, ligando-se a partir da consola ou através de uma aplicação a correr com os mesmos privilégios. Em termos práticos, isto significa que não será possível utilizar o utilizador administrativo da base de dados root para se ligar a partir da sua aplicação PHP.
Para uma maior segurança, é melhor ter contas de utilizador dedicadas com privilégios mais limitados configuradas para cada base de dados, especialmente se planeia ter várias bases de dados alojadas no seu servidor.
Nota: Certas versões mais antigas da biblioteca nativa do MySQL para PHP mysqlnd não suportam caching_sha2_authentication, o método de autenticação por defeito para utilizadores criados no MySQL 8. Por esse motivo, ao criar utilizadores de base de dados para aplicações PHP no MySQL 8, poderá ser necessário certificar-se de que estão configurados para usar mysql_native_password em vez disso. Iremos demonstrar como fazer isso no Passo 6.
O seu servidor MySQL está agora instalado e seguro. De seguida, irá instalar o PHP, o componente final na stack LEMP.
Passo 3 – Instalar o PHP
Instale o PHP para processar código e gerar conteúdo dinâmico. O Nginx necessita de um programa externo para processar PHP.
O PHP-FPM ("gestor de processos fastCGI") gere o processamento do PHP de forma eficiente com funcionalidades adicionais de segurança, proporcionando melhor desempenho para sites baseados em PHP. Instale php-fpm para encaminhar pedidos PHP a partir do Nginx, e php-mysql para permitir a comunicação entre PHP e MySQL. Os pacotes principais do PHP instalam-se automaticamente como dependências.
Para instalar os pacotes php8.1-fpm e php-mysql, execute:
sudo apt install php8.1-fpm php-mysqlQuando solicitado, pressione Y e ENTER para confirmar a instalação.
Verifique se o PHP-FPM está em execução:
sudo systemctl status php8.1-fpmDeverá ver uma saída a mostrar que o PHP-FPM está activo:
● php8.1-fpm.service - The PHP 8.1 FastCGI Process Manager
Loaded: loaded
Active: active (running)Também pode verificar a versão do PHP:
php -vPHP 8.1.x (cli) (built: ...)
Copyright (c) The PHP Group
Zend Engine v4.1.xConfigure o Nginx para usar estes componentes PHP.
Passo 4 — Configurar o Nginx para Usar o Processador PHP
Crie server blocks do Nginx (semelhantes aos virtual hosts do Apache) para encapsular a configuração e alojar múltiplos domínios num único servidor. Este guia utiliza o_seu_dominio como exemplo de nome de domínio.
Info: Para saber mais sobre como configurar um nome de domínio com a Linux-Console.net, leia a nossa introdução ao DNS da Linux-Console.net.
No Ubuntu 22.04, o Nginx ativa um bloco de servidor por defeito que serve documentos a partir de /var/www/html. Para múltiplos sites, crie uma estrutura de diretórios dentro de /var/www para seu_dominio, deixando /var/www/html como o diretório padrão de reserva.
Crie o diretório web raiz para your_domain da seguinte forma:
sudo mkdir /var/www/your_domainDe seguida, atribua a propriedade do diretório utilizando a variável de ambiente $USER, que irá referir-se ao seu utilizador atual do sistema:
sudo chown -R $USER:$USER /var/www/your_domainDe seguida, abra um novo ficheiro de configuração no diretório sites-available do Nginx usando o seu editor de linha de comandos preferido. Aqui, vamos usar o nano:
sudo nano /etc/nginx/sites-available/your_domainIsto irá criar um novo ficheiro em branco. Insira a seguinte configuração básica:
server {
listen 80;
server_name your_domain www.your_domain;
root /var/www/your_domain;
index index.html index.htm index.php;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
location ~ /\.ht {
deny all;
}
}Isto é o que cada uma destas directivas e blocos de localização fazem:
listen— Define em que porta o Nginx vai escutar. Neste caso, vai escutar na porta80, a porta por defeito para HTTP.root— Define a raiz do documento onde os ficheiros servidos por este website estão armazenados.index— Define em que ordem o Nginx irá priorizar os ficheiros index para este site. É prática comum listar ficheirosindex.htmlcom maior precedência do que ficheirosindex.php, para permitir configurar rapidamente uma página de manutenção em aplicações PHP. Pode ajustar estas definições para melhor adequar às necessidades da sua aplicação.server_name— Define quais nomes de domínio e/ou endereços IP este bloco de servidor deve responder. Aponte esta diretiva para o nome de domínio ou endereço IP público do seu servidor.location /— O primeiro bloco de localização inclui uma diretivatry_files, que verifica a existência de ficheiros ou diretórios correspondentes a uma solicitação de URL. Se o Nginx não conseguir encontrar o recurso apropriado, devolverá um erro 404.location ~ \.php$— Este bloco de localização trata do processamento real de PHP, apontando o Nginx para o ficheiro de configuraçãofastcgi-php.confe para o ficheirophp8.1-fpm.sock, que declara que socket está associado aophp8.1-fpm.localização ~ /\.ht— O último bloco de localização lida com ficheiros.htaccess, que o Nginx não processa. Ao adicionar a diretivade negar tudo, se algum ficheiro.htaccessaparecer na raiz do documento, não será entregue aos visitantes.
Quando terminar de editar, guarde e feche o ficheiro. Se estiver a usar nano, pode fazê-lo pressionando CTRL+X e depois Y e ENTER para confirmar.
Ative a sua configuração ligando ao ficheiro de configuração a partir do diretório sites-enabled do Nginx:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/Em seguida, desvincule o ficheiro de configuração predefinido do diretório /sites-enabled/:
sudo unlink /etc/nginx/sites-enabled/defaultNota: Se algum dia precisar de restaurar a configuração padrão, pode fazê-lo recriando o link simbólico, como segue:
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/Isto irá indicar ao Nginx para usar a configuração na próxima vez que for recarregado. Pode testar a sua configuração quanto a erros de sintaxe executando o seguinte:
sudo nginx -tSe forem reportados erros, volte ao seu ficheiro de configuração para rever o seu conteúdo antes de continuar.
Quando estiver pronto, recarregue o Nginx para aplicar as alterações:
sudo systemctl reload nginxO seu novo website já está ativo, mas a raiz do web /var/www/your_domain ainda está vazia. Crie um ficheiro index.html nesse local para que possa testar se o seu novo bloco de servidor funciona como esperado:
nano /var/www/your_domain/index.htmlInclua o seguinte conteúdo neste ficheiro:
<html>
<head>
<title>your_domain website</title>
</head>
<body>
<h1>Hello World!</h1>
<p>This is the landing page of <strong>your_domain</strong>.</p>
</body>
</html>Agora vá ao seu navegador e aceda ao nome de domínio ou endereço IP do seu servidor, conforme listado na diretiva server_name no ficheiro de configuração do seu bloco de servidor:
http://server_domain_or_IPReceberá uma página como a seguinte:
Se recebeu esta página, significa que o bloco do seu servidor Nginx está a funcionar como esperado.
Pode deixar este ficheiro no local como uma página de entrada temporária para a sua aplicação até configurar um ficheiro index.php para o substituir.
Aviso: Após adicionar o seu ficheiro index.php, certifique-se de remover ou renomear o ficheiro index.html da raiz do seu documento. Se ambos os ficheiros existirem, o Nginx servirá o index.html por defeito, e a sua página PHP não será exibida — esta é uma fonte comum de confusão para utilizadores iniciantes.
A sua stack LEMP está agora totalmente configurada. No próximo passo, irá criar um script PHP para testar se o Nginx consegue, de facto, processar ficheiros .php dentro do seu novo site configurado.
Passo 5 – Testar o PHP com Nginx
O seu stack LEMP deve agora estar completamente configurado. Pode testá-lo para validar se o Nginx consegue corretamente passar os ficheiros .php para o seu processador PHP.
Pode fazer isto criando um ficheiro PHP de teste na raiz dos seus documentos. Abra um novo ficheiro chamado info.php na raiz dos seus documentos no seu editor de texto preferido:
nano /var/www/your_domain/info.phpAdicione as seguintes linhas ao novo ficheiro. Este é código PHP válido que irá fornecer informações sobre o seu servidor:
<?php
phpinfo();Quando tiver terminado, guarde e feche o ficheiro.
Agora pode aceder a esta página no seu navegador web visitando o nome de domínio ou o endereço IP público que configurou no ficheiro de configuração do Nginx, seguido de /info.php:
http://server_domain_or_IP/info.phpReceberá uma página web com informações detalhadas sobre o seu servidor:
Após verificar as informações relevantes sobre o seu servidor PHP através dessa página, é melhor remover o ficheiro que criou, pois contém informações sensíveis sobre o seu ambiente PHP e o seu servidor Ubuntu. Pode usar rm para remover esse ficheiro:
sudo rm /var/www/your_domain/info.phpPode sempre regenerar este ficheiro se precisar dele mais tarde.
Passo 6 — Testar a Conexão à Base de Dados a partir do PHP (Opcional)
Se quiser testar se o PHP consegue ligar-se ao MySQL e executar consultas na base de dados, pode criar uma tabela de teste com dados fictícios e consultar o seu conteúdo a partir de um script PHP. Antes de o fazer, precisa de criar uma base de dados de teste e um novo utilizador MySQL corretamente configurado para aceder a ela.
Nota: Algumas versões mais antigas da biblioteca nativa MySQL PHP mysqlnd não suportam caching_sha2_authentication, o método de autenticação padrão do MySQL 8, poderá ser necessário certificar-se de que estão configuradas para usar mysql_native_password em vez disso.
Vamos criar uma base de dados chamada example_database e um utilizador chamado example_user, mas podes substituir estes nomes por outros valores.
Primeiro, ligue-se à consola MySQL usando a conta root:
sudo mysqlPara criar uma nova base de dados, execute o seguinte comando a partir do seu console MySQL:
CREATE DATABASE example_database;Agora pode criar um novo utilizador e conceder-lhe todos os privilégios na base de dados personalizada que criou.
O seguinte comando cria um novo utilizador chamado example_user, usando mysql_native_password como método de autenticação por defeito. Estamos a definir a palavra-passe deste utilizador como password, mas deve substituir este valor por uma palavra-passe segura à sua escolha.
CREATE USER 'example_user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';Agora precisamos dar permissão a este utilizador sobre a base de dados example_database:
GRANT ALL ON example_database.* TO 'example_user'@'%';Isto dará ao utilizador example_user privilégios completos sobre a base de dados example_database, ao mesmo tempo que impede que este utilizador crie ou modifique outras bases de dados no seu servidor.
Agora saia do shell do MySQL com o seguinte comando:
exitPode testar se o novo utilizador tem as permissões corretas ao iniciar sessão na consola MySQL novamente, desta vez usando as credenciais do utilizador personalizado. Note a opção -p neste comando, que irá solicitar-lhe a palavra-passe utilizada ao criar o utilizador example_user:
mysql -u example_user -pApós iniciar sessão na consola MySQL, confirme que tem acesso à base de dados example_database:
SHOW DATABASES;Isto irá retornar a seguinte saída:
+--------------------+
| Database |
+--------------------+
| example_database |
| information_schema |
+--------------------+
2 rows in set (0.000 sec)De seguida, vamos criar uma tabela de teste chamada todo_list. A partir da consola do MySQL, execute a seguinte instrução:
CREATE TABLE example_database.todo_list (
item_id INT AUTO_INCREMENT,
content VARCHAR(255),
PRIMARY KEY(item_id)
);Insira algumas linhas de conteúdo na tabela de teste. Pode querer repetir o próximo comando algumas vezes, usando valores diferentes:
INSERT INTO example_database.todo_list (content) VALUES ("My first important item");Para confirmar que os dados foram guardados com sucesso na sua tabela, execute:
SELECT * FROM example_database.todo_list;A sua saída deve ser apresentada da seguinte forma:
+---------+--------------------------+
| item_id | content |
+---------+--------------------------+
| 1 | My first important item |
| 2 | My second important item |
| 3 | My third important item |
| 4 | and this one more thing |
+---------+--------------------------+
4 rows in set (0.000 sec)Após confirmar que possui dados válidos na sua tabela de teste, pode sair da consola MySQL:
exitAgora pode criar o script PHP que se ligará ao MySQL e fará consultas ao seu conteúdo. Crie um novo ficheiro PHP no seu diretório raiz da web personalizado usando o seu editor preferido. Vamos usar o nano para isso:
nano /var/www/your_domain/todo_list.phpO seguinte script PHP liga-se à base de dados MySQL e consulta o conteúdo da tabela todo_list, exibindo os resultados numa lista. Se houver algum problema com a ligação à base de dados, será lançada uma exceção.
Adicione o seguinte conteúdo ao seu script todo_list.php:
<?php
$user = "example_user";
$password = "password";
$database = "example_database";
$table = "todo_list";
try {
$db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
echo "<h2>TODO</h2><ol>";
foreach($db->query("SELECT content FROM $table") as $row) {
echo "<li>" . $row['content'] . "</li>";
}
echo "</ol>";
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
Guarde e feche o ficheiro quando tiver terminado de o editar.
Agora pode aceder a esta página no seu navegador web visitando o nome de domínio ou o endereço IP público configurado para o seu site, seguido de /todo_list.php:
http://server_domain_or_IP/todo_list.phpDeverá receber uma página como a seguinte, mostrando o conteúdo que inseriu na sua tabela de teste:
Isso significa que o seu ambiente PHP está pronto para se conectar e interagir com o seu servidor MySQL.
Perguntas Frequentes
Para que é usado o stack LEMP?
A stack LEMP hospeda websites dinâmicos e aplicações baseadas em PHP, incluindo WordPress, Laravel, Magento, Drupal e projetos PHP personalizados. É particularmente eficaz para sites com elevado tráfego que exigem uma gestão eficiente de ligações simultâneas.
Qual é a diferença entre as stacks LEMP e LAMP?
LEMP utiliza Nginx, que gere as ligações de forma assíncrona com uma arquitetura orientada a eventos—eficiente para utilizadores simultâneos. LAMP utiliza Apache, que tradicionalmente cria um thread por pedido (embora o Apache moderno suporte modos orientados a eventos). O LEMP geralmente oferece melhor desempenho para conteúdos estáticos e cenários de alta concorrência, enquanto o LAMP proporciona uma configuração .htaccess mais fácil e um suporte mais amplo a módulos.
Qual versão do Ubuntu devo usar para LEMP?
Ubuntu 22.04 LTS é o principal alvo deste guia, contando com PHP 8.1, MySQL 8.0 e Nginx com suporte a longo prazo. Ubuntu 24.04 LTS (última versão) inclui PHP 8.3 por defeito e funciona com este guia ajustando os caminhos dos sockets do PHP-FPM e os números das versões de acordo.
Como instalar o stack LEMP no Ubuntu 24.04?
Siga estes passos principais:
- Instalar o Nginx:
sudo apt install nginx - Instalar o MySQL:
sudo apt install mysql-server - Execute o script de segurança do MySQL:
sudo mysql_secure_installation - Instalar PHP-FPM:
sudo apt install php-fpm php-mysql - Configurar bloco de servidor Nginx com integração PHP-FPM
- Teste com
info.phpe ligação à base de dados
Veja o passo a passo completo nos Passos 1-6 acima.
Que versão do PHP devo instalar com Nginx e MySQL?
Use a versão do PHP predefinida no seu Ubuntu para melhor compatibilidade:
- Ubuntu 22.04: PHP 8.1 (instalado via
php8.1-fpm) - Ubuntu 24.04: PHP 8.3 (ajuste os comandos para
php8.3-fpmpara esta versão)
Ambas as versões funcionam excelentemente com Nginx e MySQL 8.0, suportam frameworks modernos e recebem atualizações de segurança ativas.
Como configurar o Nginx para processar ficheiros PHP?
Adicione um bloco location ~ \.php$ à configuração do seu servidor Nginx que encaminhe pedidos PHP para o PHP-FPM através de um socket Unix:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}Ajuste o caminho do socket com base na sua versão do PHP, teste com sudo nginx -t, e recarregue com sudo systemctl reload nginx.
Porque é que recebo um erro "502 Bad Gateway" depois de instalar o PHP-FPM?
Os erros 502 indicam que o Nginx não consegue comunicar com o PHP-FPM. Causas comuns:
- PHP-FPM não está a correr: Verifique com
sudo systemctl status php8.1-fpme inicie se necessário - Caminho de socket errado: Verifique se
/run/php/php8.1-fpm.sockexiste e corresponde à configuração do seu Nginx - Problema de permissões: Certifique-se de que o utilizador do Nginx (www-data) consegue aceder ao socket
- Erro na configuração do PHP-FPM: Verifique os logs em
/var/log/php8.1-fpm.log
Solução: Reinicie ambos os serviços:
sudo systemctl restart php8.1-fpm nginxComo posso proteger o MySQL após a instalação?
Execute o script de segurança incorporado:
sudo mysql_secure_installationSiga as instruções para:
- Ativar plugin de validação de senha
- Definir uma palavra-passe forte para o root
- Remover utilizadores anónimos
- Desativar login remoto como root
- Remover base de dados de teste
- Recarregar privilégios
Para bases de dados de aplicações, crie utilizadores dedicados com privilégios limitados em vez de usar a conta root.
Posso alojar vários sites num único servidor LEMP?
Sim, crie blocos de servidor Nginx separados para cada domínio:
- Criar diretório:
sudo mkdir -p /var/www/second_domain - Criar bloco de servidor:
sudo nano /etc/nginx/sites-available/second_domain - Configure com diretivas
server_nameerootúnicas - Ativar:
sudo ln -s /etc/nginx/sites-available/second_domain /etc/nginx/sites-enabled/ - Testar e recarregar:
sudo nginx -t && sudo systemctl reload nginx
Cada site pode ter definições de PHP e utilizadores de base de dados separados.
Como posso atualizar o PHP para uma versão mais recente?
As atualizações de pacotes do Ubuntu tratam automaticamente as versões menores. Para atualizações de versões principais:
Adicione o PHP PPA de Ondřej (repositório de terceiros confiável):
sudo add-apt-repository ppa:ondrej/php sudo apt updateInstalar nova versão do PHP-FPM:
sudo apt install php8.3-fpm php8.3-mysql -yAtualizar o caminho do socket na configuração do Nginx para
/run/php/php8.3-fpm.sockTestar e recarregar o Nginx
Opcionalmente remova a versão antiga:
sudo apt purge php8.1-fpm
Sempre teste no ambiente de pré-produção antes de atualizar os sistemas de produção.
Resolução de Problemas Comuns
Erro 502 - Gateway Inválido
O problema mais comum na stack LEMP ocorre quando o Nginx não consegue comunicar com o PHP-FPM:
Verificar o Estado do PHP-FPM:
sudo systemctl status php8.1-fpmVerificar Caminho do Soquete:
ls -la /run/php/A saída esperada deve mostrar o ficheiro php8.1-fpm.sock.
Correções Comuns:
- Reiniciar PHP-FPM:
sudo systemctl restart php8.1-fpm - Verifique se o caminho do socket no bloco de servidor Nginx corresponde ao socket real do PHP-FPM
- Verifique as permissões do ficheiro:
sudo chown www-data:www-data /run/php/php8.1-fpm.sock
Erros de Permissão Negada
Corrigir permissões do diretório web:
sudo chown -R www-data:www-data /var/www/your_domain
sudo chmod -R 755 /var/www/your_domainProblemas de Conexão MySQL
Repor a palavra-passe root do MySQL:
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';
FLUSH PRIVILEGES;
EXIT;Verificar o serviço MySQL:
sudo systemctl status mysqlPHP Não Está Processando
Verificar módulos PHP:
php -m | grep -E 'mysql|fpm'Verificar configuração do PHP-FPM:
sudo nginx -t
sudo php-fpm8.1 -tDepurar Erros 404:
- Verifique se
index.phpestá listado na diretivaindexdo Nginx - Verificar se o ficheiro existe:
ls -la /var/www/your_domain/ - Rever os logs de erros do Nginx:
sudo tail -f /var/log/nginx/error.log
Conclusão
Neste guia, construiu uma base flexível para servir websites e aplicações PHP aos seus visitantes, usando o Nginx como servidor web e o MySQL como sistema de base de dados. Também pode fazer isto com um servidor web Apache, consulte o nosso tutorial sobre Como Instalar o stack Linux, Apache, MySQL, PHP (LAMP) no Ubuntu. Pode também proteger o seu site com o Let’s Encrypt, que fornece certificados gratuitos e confiáveis. Saiba como fazer isto com o nosso guia sobre Let’s Encrypt para Apache.
Obrigado por aprender com a comunidade Linux-Console.net.



