
O stack LEMP é uma das plataformas mais populares para hospedagem de sites e aplicações web. Diferente do mais conhecido LAMP (que usa Apache), o LEMP utiliza o Nginx (pronuncia-se “engine-x”) como servidor web, oferecendo melhor performance e menor consumo de recursos.
LEMP significa:
- L – Linux (sistema operacional)
- E – Nginx (servidor web)
- M – MySQL/MariaDB (banco de dados)
- P – PHP (linguagem de programação)
Este guia prático vai ensinar passo a passo como configurar um servidor LEMP do zero, mesmo que você seja iniciante em administração de servidores.
Pré-requisitos
Antes de começar, você precisará:
- Um servidor Linux: Ubuntu 20.04/22.04 LTS ou Debian 10/11 (recomendados para iniciantes)
- Acesso SSH ao servidor
- Privilégios de superusuário (sudo)
- Conexão estável com a internet
Passo 1: Atualização do Sistema
Primeiro, sempre atualize a lista de pacotes e o sistema:
sudo apt update sudo apt upgrade -y sudo apt autoremove -y
Passo 2: Instalação do Nginx
O Nginx será nosso servidor web:
sudo apt install nginx -y
Inicie e habilite para iniciar automaticamente:
sudo systemctl start nginx sudo systemctl enable nginx
Verifique o status:
sudo systemctl status nginx
Acesse o IP do seu servidor no navegador. Você deve ver a página padrão do Nginx.
Passo 3: Configuração do Firewall (UFW)
Habilite o firewall e libere as portas necessárias:
sudo ufw enable sudo ufw allow 'OpenSSH' sudo ufw allow 'Nginx Full' # Libera HTTP (80) e HTTPS (443) sudo ufw status
Passo 4: Instalação do MySQL
Instale o MySQL para gerenciar seus bancos de dados:
sudo apt install mysql-server -y
Execute o script de segurança:
sudo mysql_secure_installation
Siga as instruções para:
- Definir senha para root
- Remover usuários anônimos
- Desabilitar login root remotamente
- Remover banco de teste
- Recarregar privilégios
Passo 5: Instalação do PHP
Instale o PHP com extensões necessárias:
sudo apt install php-fpm php-mysql php-cli php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip -y
Verifique a instalação:
php -v
Passo 6: Configurar o Nginx para Processar PHP
Crie um arquivo de configuração para seu site:
sudo nano /etc/nginx/sites-available/meusite
Adicione a configuração básica:
server {
listen 80;
server_name seu_dominio.com www.seu_dominio.com;
root /var/www/meusite;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
Habilite o site:
sudo ln -s /etc/nginx/sites-available/meusite /etc/nginx/sites-enabled/
Teste a configuração do Nginx:
sudo nginx -t
Recarregue o Nginx:
sudo systemctl reload nginx
Passo 7: Criar Estrutura de Diretórios e Arquivo de Teste
Crie o diretório do site:
sudo mkdir -p /var/www/meusite sudo chown -R www-data:www-data /var/www/meusite sudo chmod -R 755 /var/www/meusite
Crie um arquivo de teste PHP:
sudo nano /var/www/meusite/info.php
Adicione o conteúdo:
<?php phpinfo(); ?>
Acesse http://seu_ip/info.php para ver as informações do PHP.
Passo 8: Configurações de Segurança Adicionais
Ajustar permissões do PHP
Edite o arquivo principal do PHP:
sudo nano /etc/php/8.1/fpm/php.ini
Altere as seguintes diretivas:
expose_php = Off display_errors = Off upload_max_filesize = 16M post_max_size = 16M
Criar usuário específico para o MySQL (opcional mas recomendado)
sudo mysql -u root -p
No prompt do MySQL:
CREATE DATABASE meubanco; CREATE USER 'meuusuario'@'localhost' IDENTIFIED BY 'senha_segura'; GRANT ALL PRIVILEGES ON meubanco.* TO 'meuusuario'@'localhost'; FLUSH PRIVILEGES; EXIT;
Passo 9: Otimizações Básicas
Otimizar o Nginx
Ajuste o número de workers no Nginx:
sudo nano /etc/nginx/nginx.conf
Ajuste de acordo com seu número de CPUs (verifique com nproc):
worker_processes auto;
Otimizar o PHP-FPM
Ajuste o pool do PHP-FPM:
sudo nano /etc/php/8.1/fpm/pool.d/www.conf
Ajuste conforme sua memória disponível:
pm = dynamic pm.max_children = 10 pm.start_servers = 3 pm.min_spare_servers = 2 pm.max_spare_servers = 4
Passo 10: Teste Final e Verificação
Reinicie todos os serviços:
sudo systemctl restart nginx sudo systemctl restart php8.1-fpm sudo systemctl restart mysql
Verifique o status de todos os serviços:
sudo systemctl status nginx sudo systemctl status php8.1-fpm sudo systemctl status mysql
Troubleshooting Básico
Verificar logs em caso de erro:
# Logs do Nginx sudo tail -f /var/log/nginx/error.log # Logs do PHP-FPM sudo tail -f /var/log/php8.1-fpm.log # Logs do MySQL sudo tail -f /var/log/mysql/error.log
Testar configuração PHP com MySQL:
Crie um arquivo de teste:
<?php
$conn = new mysqli('localhost', 'meuusuario', 'senha_segura', 'meubanco');
if ($conn->connect_error) {
die("Conexão falhou: " . $conn->connect_error);
}
echo "Conectado ao MySQL com sucesso!";
?>
Conclusão
Parabéns! Você configurou com sucesso um servidor LEMP completo. Agora você tem:
✅ Servidor web Nginx funcionando
✅ Banco de dados MySQL/MariaDB seguro
✅ PHP processando corretamente
✅ Configurações básicas de segurança
✅ Ambiente pronto para hospedar aplicações web
Próximos Passos
- Configurar SSL/TLS com Certbot para HTTPS
- Implementar backup automático dos bancos de dados
- Configurar monitoramento do servidor
- Otimizar performance com cache e compressão
- Implementar um sistema de deploy automatizado
Lembre-se: Esta é uma configuração básica. Para ambientes de produção, sempre considere medidas de segurança adicionais e monitoramento contínuo.
Recursos Adicionais
Este guia oferece uma base sólida para iniciantes começarem com servidores LEMP. Pratique, experimente e consulte a documentação oficial para se aprofundar em cada componente!



