Guia Completo para Iniciantes: Como Configurar um Servidor LEMP (Linux, Nginx, MySQL, PHP)

lemp

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.

valuehost

Pré-requisitos

Antes de começar, você precisará:

  1. Um servidor Linux: Ubuntu 20.04/22.04 LTS ou Debian 10/11 (recomendados para iniciantes)
  2. Acesso SSH ao servidor
  3. Privilégios de superusuário (sudo)
  4. 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
alphimedia

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!";
?>
vps hostinger

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

  1. Configurar SSL/TLS com Certbot para HTTPS
  2. Implementar backup automático dos bancos de dados
  3. Configurar monitoramento do servidor
  4. Otimizar performance com cache e compressão
  5. 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!