Você decide que serviços podemos ativar para análise, personalização e conteúdos externos.
Utilizamos cookies e tecnologias semelhantes no nosso site para personalizar conteúdos, integrar conteúdos externos e compreender melhor a uso de cada área.
Cookies necessários
Estas entradas asseguram funções essenciais, como segurança, estabilidade e processamento de formulários.
Seções opcionais
AnálisesMarketingPersonalizaçãoMídia externa
O tratamento de dados pode basear-se no seu consentimento ou em interesses legítimos. Nas configurações de cookies, pode rejeitar ou permitir cada categoria opcional.
Alguns serviços processam dados pessoais em outros países. Ao dar seu consentimento, você também aceita essa transferência. Encontre mais informações em nossa Política de Privacidade.
Pode voltar a abrir e ajustar sua seleção a qualquer momento. · 1.0.2
Como configurar uma stack LEMP em um servidor Linux – implante aplicações web de alto desempenho
Descubra como configurar uma stack LEMP para hospedar sites PHP dinâmicos em Servidores VPS Linux → Saiba mais
10 de novembro de 20269 min de leitura1 visualizações0 útil
Introdução
A stack LEMP é uma combinação popular de softwares de código aberto instalados em conjunto para facilitar a hospedagem de sites dinâmicos, com foco especial em sites e aplicativos PHP. O acrônimo significa: Linux como sistema operacional, "Engine x" (nginx) como servidor web, MySQL como banco de dados e, por último, PHP para o processamento. Neste guia, mostramos como configurar uma stack LEMP em um Servidor VPS Linux, com instruções detalhadas passo a passo e um exemplo de site de lista de tarefas.
FAQ
Perguntas frequentes
Linux como sistema operacional, Engine x (nginx) como servidor web, MySQL como banco de dados e PHP para processamento — uma combinação popular de softwares para hospedar sites PHP dinâmicos.
O Ubuntu. Os comandos são iguais no Debian e devem ser semelhantes em outras distribuições, embora a sintaxe possa variar um pouco.
Conecte-se ao servidor por SSH e atualize todos os pacotes com o comando apropriado, por exemplo, sudo apt update no Ubuntu ou Debian.
Execute sudo apt install nginx. Depois, configure as regras de firewall apropriadas para que o servidor web fique acessível pela internet.
Feedback
Este artigo foi útil?
Sua opinião nos ajuda a definir prioridades e a melhorar os conteúdos.
0 de 0 As avaliações consideraram este artigo útil.
Ajuda personalizada
As instruções não são suficientes?
A nossa equipe de suporte da ZAP conhece seu produto — descreva brevemente seu problema e ajudaremos pessoalmente.
O Zappy conhece este guia e te responde direto no chat.
Navegação
VPS
Preparação
Primeiro, conecte-se ao seu servidor por SSH. Se você não sabe como fazer isso, consulte nosso guia Primeiro acesso (SSH).
Neste guia, usamos o Ubuntu como distribuição Linux. Os comandos são iguais no Debian e devem ser semelhantes em outras distribuições, embora a sintaxe possa variar um pouco. Verifique se há um sistema operacional instalado e se você está conectado por SSH.
Como sempre, antes da instalação, atualize todos os pacotes com o seguinte comando:
Parabéns! Você instalou e configurou a stack LEMP com sucesso. Como próximo passo, recomendamos fortemente configurar um domínio e um certificado SSL para que seus dados sejam transmitidos com segurança. Consulte nosso guia do Certbot, com foco no plugin do Nginx, e siga as instruções interativas para obter um certificado para seu domínio de forma rápida e fácil.
Se tiver dúvidas ou problemas, nossa equipe de suporte está disponível todos os dias. Não hesite em entrar em contato! 🙂
Hospedagem de servidores a partir de € 2,49 / mês, disponível imediatamente, com proteção DDoS incluída.
A instalação pode ser dividida nos principais componentes da stack LEMP, começando pelo servidor web Nginx, seguido pelo banco de dados MySQL e, por último, pelo PHP. Durante a instalação, vamos configurar um site de teste escrito em PHP que acessa o banco de dados MySQL. Em seguida, cada solicitação da web será processada e atendida pelo servidor web Nginx.
Configurar o Nginx
O Nginx é o servidor web que processa solicitações recebidas e envia as respostas. Instale-o com o seguinte comando:
Code
sudo apt install nginx
Após a instalação, verifique se as regras de firewall apropriadas foram criadas para que o servidor web fique acessível pela internet. Neste exemplo, usamos o firewall UFW, pois o Nginx tem um aplicativo registrado nele.
Se você usa outro firewall, libere a porta 80 (HTTP). Saiba mais sobre firewalls no Linux em nosso guia Gerenciar firewall.
Ative o firewall UFW e crie uma regra para SSH:
Code
# Regel für SSH erstellen
sudo ufw allow OpenSSH
# UFW Firewall aktivieren
sudo ufw enable
Atenção
Se você usa o UFW, configure uma regra para SSH! Sem ela, você não poderá mais se conectar ao servidor por SSH se a sessão atual for interrompida!
Agora, crie a regra para o Nginx e verifique se as regras estão configuradas:
Code
# Regel für Nginx erstellen
sudo ufw allow in "Nginx Full"
# UFW Firewall Regeln anzeigen
sudo ufw status
Dica
Use o comando ufw app list para ver quais perfis estão disponíveis. No exemplo acima, Nginx Full libera tanto HTTP (porta 80) quanto HTTPS (porta 443).
Você deverá ver as regras Nginx e Nginx (v6) com o status ALLOW, o que confirma que o firewall está configurado corretamente. Também serão exibidas outras regras que talvez você já tenha configurado, incluindo a regra de SSH.
Depois de liberar o Nginx no firewall, teste se ele está funcionando. Para isso, abra o navegador e digite seu endereço IP, por exemplo: http://[seu_endereco_ip]
Se tudo estiver funcionando, você verá uma página de boas-vindas padrão. Caso contrário, verifique o status do serviço com: systemctl status nginx
Configurar o MySQL
Agora você vai instalar e configurar um servidor MySQL, que funcionará como banco de dados para armazenar dados relacionais de forma permanente. Instale-o com:
Code
sudo apt install mysql-server
Após a instalação, recomendamos executar o script de segurança para proteger seu servidor MySQL. Ele é opcional, mas altamente recomendado. Inicie-o com:
Code
sudo mysql_secure_installation
O script vai orientar você interativamente durante a configuração. Primeiro, será solicitada a validação de senha. Recomendamos escolher Y para permitir apenas senhas seguras e, em seguida, selecionar MEDIUM com 1 ou STRONG com 2.
Em seguida, será perguntado se você quer remover o usuário anonymous e desativar o login remoto do root. Por segurança, recomendamos confirmar ambas as opções com Y. Assim, o usuário de teste será removido e o acesso root ficará disponível somente localmente via SSH, reduzindo os riscos.
Por fim, será perguntado se você quer excluir o banco de dados test e recarregar as tabelas de permissões. Também recomendamos escolher Y, pois o banco de dados de teste não é necessário e as tabelas de permissões precisam ser recarregadas para que as alterações sejam aplicadas.
Agora, verifique se o banco de dados MySQL está funcionando fazendo login com o seguinte comando: sudo mysql -u root. Se tudo der certo, uma mensagem de boas-vindas será exibida. Use quit para sair do shell do MySQL.
Configurar o PHP
O último componente da stack LEMP é o PHP. Para o Nginx, é usado o programa externo php-fpm (PHP FastCGI Process Manager). O Nginx será configurado para encaminhar as solicitações ao php-fpm antes de elas serem processadas e atendidas.
Instale a versão mais recente do php-fpm e o plugin PHP para MySQL com:
Code
sudo apt install php-fpm php-mysql
Verifique se a instalação foi bem-sucedida consultando a versão do PHP. Se uma versão for exibida, o PHP está funcionando corretamente:
Code
php -v
Dica
Extensões do PHP
Para casos de uso mais avançados, talvez você precise de extensões adicionais do PHP. Use apt search php- | less para ver uma lista.
Use as teclas de seta para navegar e Q para sair. Para instalar uma extensão, basta usar:
Code
sudo apt install [php_erweiterung] [...]
Você pode instalar várias extensões ao mesmo tempo, separando-as com espaços.
Criar um site de teste
Depois de instalar todos os componentes da stack LEMP, vamos criar um site de teste para mostrar como eles trabalham juntos para oferecer um site dinâmico. Esta etapa é opcional, mas útil para entender como configurar seus próprios sites.
Neste exemplo, vamos criar uma pequena lista de tarefas em PHP que busca e exibe itens de um banco de dados MySQL. O site será servido pelo Nginx.
Usaremos o domínio de exemplo zapdocs.example.com, já que, na prática, você provavelmente usará um domínio. Você precisa criar um registro DNS A para o domínio apontando para o endereço IP do seu servidor. Encontre ajuda em nosso guia Registros de domínio.
Informações
Você também pode fazer isso sem um domínio e substituir [your_domain] por qualquer nome. Nesse caso, acesse o site pelo endereço IP. Porém, lembre-se de remover a linha server_name do arquivo de bloco do servidor mais adiante.
Configurar o Nginx
Os servidores web normalmente armazenam os arquivos dos sites no diretório /var/www. Por padrão, o Nginx tem uma pasta html nesse local, com uma página padrão. Para manter tudo organizado, especialmente se você hospedar vários sites, recomendamos criar uma pasta própria para cada site.
Portanto, crie uma nova pasta em /var/www/[your_domain]. Neste exemplo, o caminho será /var/www/zapdocs.example.com.
Code
sudo mkdir /var/www/[your_domain]
Agora, crie um novo arquivo de configuração de bloco do servidor Nginx no diretório sites-available para esse domínio:
Versão do PHP
Importante: substitua [your_phpversion] pela versão do PHP instalada atualmente. Verifique-a com php -v, por exemplo: PHP 8.3.6 (cli) (built: Mar 19 2025 10:08:38) (NTS).
Neste exemplo, a versão é 8.3, então a linha fica assim: fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
Este arquivo de bloco do servidor processa solicitações na porta 80 (HTTP) e verifica se elas correspondem ao server_name especificado, ou seja, ao seu domínio. Ele também aponta para a pasta /var/www/[your_domain], criada anteriormente, onde os arquivos do site serão servidos.
Salve o arquivo e saia do Nano com CTRL + X, depois pressione Y para confirmar e ENTER.
Ative a configuração criando um link simbólico no diretório sites-enabled:
Sem domínio
Se você não estiver usando um domínio, remova ou comente a linha server_name (adicionando # no início). Além disso, desative o bloco do servidor padrão com:
Code
sudo unlink /etc/nginx/sites-enabled/default
Recomendamos verificar a sintaxe com o seguinte comando:
Code
sudo nginx -t
Recarregue o Nginx para aplicar as alterações:
Code
sudo systemctl reload nginx
Criar o site
Depois de configurar o Nginx, vamos criar o site que será servido. A pasta está vazia no momento, então nada será exibido ainda. Como mencionado anteriormente, vamos criar uma pequena lista de tarefas.
Preparar o banco de dados
Faça login no seu servidor MySQL:
Code
sudo mysql -u root
Crie um novo banco de dados chamado todowebsite e uma tabela chamada todoitems:
Code
# Datenbank erstellen
CREATE DATABASE todowebsite;
# Datenbank auswählen
USE todowebsite;
# Tabelle erstellen
CREATE TABLE todoitems (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
is_completed BOOLEAN DEFAULT FALSE,
creation_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Adicione alguns itens de exemplo:
Code
INSERT INTO todoitems (name, is_completed) VALUES ('Create ZAP-Docs Guide', 0);
INSERT INTO todoitems (name, is_completed) VALUES ('Buy a ZAP-Hosting Server', 1);
INSERT INTO todoitems (name, is_completed) VALUES ('Join ZAP-Hosting Discord', 0);
INSERT INTO todoitems (name, is_completed) VALUES ('Have a great day!', 0);
Crie um usuário exclusivo chamado todo para o site:
Code
# Benutzer erstellen
# Ersetze [your_password] durch dein eigenes Passwort
CREATE USER todo@localhost IDENTIFIED BY '[your_password]';
# Rechte vergeben (alles in einer Zeile kopieren)
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER
ON todowebsite.*
TO todo@localhost;
# Rechte neu laden
FLUSH PRIVILEGES;
Saia do shell do MySQL com quit.
Arquivos do site em PHP
Agora vamos criar o arquivo PHP do site da lista de tarefas. Abra o editor Nano:
Code
sudo nano /var/www/[your_domain]/index.php
Insira o código a seguir. O primeiro bloco PHP estabelece a conexão com o MySQL.
Importante
Substitua [your_password] pela senha definida para o usuário todo.
A parte em HTML exibe a lista de tarefas buscando os dados no banco de dados.
Code
<?php
// MySQL-Verbindung vorbereiten
$servername = "localhost";
$username = "todo";
$password = "[your_password]";
$dbname = "todowebsite";
// Verbindung erstellen
$conn = new mysqli($servername, $username, $password, $dbname);
// Verbindung prüfen, bei Fehler abbrechen
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// SQL-Abfrage ausführen und Ergebnis speichern
$sql = "SELECT id, name, is_completed, creation_date FROM todoitems ORDER BY creation_date DESC";
$result = $conn->query($sql);
?>
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>To-Do Liste</title>
</head>
<body>
<h1>Coole To-Do Liste :D</h1>
<p>Für unseren tollen ZAP-Hosting Guide: <a href="https://zap-hosting.com/guides/docs/vserver-linux-lemp-stack">https://zap-hosting.com/guides/docs/vserver-linux-lemp-stack</a></p>
<ul>
<?php
// Prüfen, ob Ergebnisse vorhanden sind
if ($result->num_rows > 0) {
// Durch alle Einträge iterieren
foreach ($result as $entry) {
echo "<li>";
// Name anzeigen, htmlspecialchars schützt vor XSS
echo htmlspecialchars($entry["name"]);
// Status anzeigen
if ($entry["is_completed"]) {
echo " <strong>(Abgeschlossen)</strong>";
} else {
echo " <strong>(Offen)</strong>";
}
// Erstellungsdatum anzeigen
echo " - Erstellungsdatum: " . htmlspecialchars($entry['creation_date']);
echo "</li>";
}
} else {
// Falls keine Einträge vorhanden sind
echo "<li>Keine To-Do Einträge gefunden.</li>";
}
?>
</ul>
</body>
</html>
<?php
// Verbindung schließen
$conn->close();
?>
Salve o arquivo e saia do Nano com CTRL + X, depois pressione Y e ENTER.
Testar o site
Você configurou com sucesso um site de teste de lista de tarefas que usa todos os componentes da stack LEMP!
Agora você deve conseguir acessar o site pelo domínio (porta 80 / http) definido no bloco do servidor; neste exemplo, zapdocs.example.com. O resultado deverá ser parecido com este: