O que é o Stack LEMP e por que ele é essencial?
A sigla LEMP representa um conjunto de software de código aberto amplamente utilizado para hospedar sites e aplicações web dinâmicas. Cada letra corresponde a um componente fundamental:
- L: Linux, o sistema operacional que serve como base.
- E: Nginx (pronunciado "Engine-X"), o servidor web de alto desempenho.
- M: MariaDB ou MySQL, o sistema de gerenciamento de banco de dados.
- P: PHP, a linguagem de script para processamento dinâmico (ou Python/Perl).
Diferente do popular LAMP (que usa Apache), o Nginx no stack LEMP é conhecido por sua eficiência em lidar com muitas conexões simultâneas e baixo consumo de memória, tornando-o ideal para VPS para iniciantes que precisam maximizar a performance dos recursos disponíveis. Este tutorial Linux guiará você pela instalação completa, configuração básica e hardening inicial do servidor.
Atenção: Certifique-se de ter acesso SSH como usuário root ou com privilégios sudo à sua VPS antes de iniciar o processo.
Passo 1: Atualização do Sistema Operacional
Antes de instalar qualquer software, é crucial garantir que os pacotes existentes estejam atualizados. Isso corrige vulnerabilidades de segurança e garante compatibilidade com as versões mais recentes dos componentes do LEMP.
No terminal, execute o comando abaixo para sincronizar o índice dos pacotes:
sudo apt update
Em seguida, atualize os pacotes instalados. Em sistemas Debian/Ubuntu, isso pode levar alguns minutos dependendo da largura de banda e do número de pacotes antigos:
sudo apt upgrade -y
O sinalizador -y confirma automaticamente a instalação, evitando que você precise digitar "Y" durante o processo. Após concluir, considere reiniciar o servidor para aplicar atualizações do kernel, se necessário:
sudo reboot
Passo 2: Instalação e Configuração do Nginx
O Nginx será responsável por servir seus arquivos estáticos (HTML, CSS, JavaScript) e atuar como proxy reverso para o PHP. Vamos instalá-lo agora.
Instale o pacote nginx:
sudo apt install nginx -y
Após a instalação, o serviço geralmente é iniciado automaticamente. Verifique o status do serviço:
sudo systemctl status nginx
Se o status indicar "active (running)", o servidor web está operacional. Caso contrário, inicie-o com:
sudo systemctl start nginx
Configuração do Firewall
A maioria das VPS modernas utiliza o UFW (Uncomplicated Firewall). Você precisa permitir o tráfego HTTP (porta 80) e, futuramente, HTTPS (porta 443).
sudo ufw allow 'Nginx Full'
Verifique se as regras foram aplicadas corretamente:
sudo ufw status
Acesse o endereço IP público da sua VPS em um navegador web. Você deverá ver a página padrão de boas-vindas do Nginx ("Welcome to nginx!"). Isso confirma que o servidor web está respondendo corretamente.
Passo 3: Instalação do MariaDB
O banco de dados armazenará as informações do seu site, como conteúdo de CMS (WordPress, Joomla) ou dados de aplicações customizadas. O MariaDB é um fork compatível e muito popular do MySQL.
sudo apt install mariadb-server mariadb-client -y
Assim como o Nginx, inicie e habilite o serviço:
sudo systemctl start mariadb
sudo systemctl enable mariadb
Hardening do Banco de Dados
Por padrão, a instalação do MariaDB vem com configurações inseguras (como senha vazia para root e acesso remoto habilitado). Execute o script de segurança incluído:
sudo mysql_secure_installation
O script fará uma série de perguntas. Recomendamos as seguintes respostas:
- VALIDATE PASSWORD COMPONENT?: Digite
Yse quiser impor políticas fortes de senha para usuários do banco de dados. - CHANGE ROOT PASSWORD?: Digite
N(o MariaDB usa autenticação unix_socket por padrão, que é segura). - Remove anonymous users?: Digite
Y. - Disallow root login remotely?: Digite
Y. O acesso root deve ser feito localmente via SSH. - Remove test database?: Digite
Y. - Reload privilege tables now?: Digite
Y.
Agora seu banco de dados está seguro e pronto para uso.
Passo 4: Instalação do PHP e Dependências
O PHP processará os scripts dinâmicos. Para interagir com o Nginx, precisamos instalar o php-fpm (FastCGI Process Manager) e módulos comuns.
sudo apt install php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-imagick php-readline libmagickcore-dev libmagickwand-dev -y
Neste comando, estamos instalando:
php-fpm: O gerenciador de processos PHP.php-mysql: Permite ao PHP conectar-se ao MariaDB.php-curl,php-gd, etc.: Bibliotecas essenciais para funcionalidades comuns de aplicações web.
Configuração do FPM
O Nginx não processa PHP nativamente; ele envia as requisições ao PHP-FPM via socket. Verifique onde o socket está localizado:
sudo nano /etc/php/8.1/fpm/pool.d/www.conf
Nota: O número da versão (ex: 8.1) pode variar dependendo do seu sistema. Use php -v para verificar a versão instalada.
Procure pela linha listen =. Ela deve estar configurada como:
listen = /run/php/php8.1-fpm.sock
Salve o arquivo (Ctrl+O, Enter) e saia (Ctrl+X). Reinicie o serviço PHP-FPM para aplicar alterações:
sudo systemctl restart php8.1-fpm
Passo 5: Configurando o Nginx para Processar PHP
Agora precisamos dizer ao Nginx para enviar requisições .php para o PHP-FPM em vez de tentar servi-las como arquivos estáticos.
Edite o arquivo de configuração do seu site. Se você ainda não criou um virtual host, usaremos a configuração padrão:
sudo nano /etc/nginx/sites-available/default
Dentro da seção server, faça as seguintes alterações:
- Adicione
index.phpà diretivaindex:
index index.html index.htm index.php;
- Descomente e ajuste a localização do PHP. Procure por
#location ~ \.php$e remova as hashtags, ajustando conforme abaixo:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
- Adicione uma verificação para garantir que o arquivo existe antes de enviar ao PHP (evita erros 500 em arquivos inexistentes):
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;
}
Importante: Se estiver usando HTTPS ou um domínio específico, certifique-se de que o bloco server corresponda à configuração correta.
Teste a configuração do Nginx para evitar erros de sintaxe:
sudo nginx -t
Se o teste for bem-sucedido, recarregue o Nginx:
sudo systemctl reload nginx
Passo 6: Testando a Instalação
Crie um arquivo PHP no diretório raiz do servidor web para verificar se tudo está funcionando.
sudo nano /var/www/html/info.php
Dentro do arquivo, escreva:
<?php
phpinfo();
?
Salve e saia. Em seguida, acesse http://SEU_IP/info.php no navegador.
Você verá uma página detalhada com todas as configurações do PHP, módulos instalados e versão do servidor. Atenção de segurança: Esta página expõe informações sensíveis do servidor. Assim que confirmar que o PHP está funcionando, remova o arquivo imediatamente:
sudo rm /var/www/html/info.php
Passo 7: Boas Práticas e Segurança Inicial
A instalação básica está completa, mas um servidor em produção requer configurações adicionais.
Criando Usuário Não-Root
Nunca opere o servidor diretamente como root. Crie um usuário administrativo:
sudo adduser novoadmin
sudo usermod -aG sudo novoadmin
Use esse novo usuário para gerenciar arquivos do site e fazer deploy de código.
Habilitando HTTPS com Let's Encrypt
Para criptografar o tráfego, instale o Certbot:
sudo apt install certbot python3-certbot-nginx -y
E obtenha um certificado SSL:
sudo certbot --nginx -d seu-dominio.com -d www.seu-dominio.com
O Certbot configurará automaticamente o redirecionamento HTTP para HTTPS e renovará os certificados.
Migração de Hospedagem: Considerações Finais
Se você está realizando uma migração hospedagem, lembre-se de:
- Exportar o Banco de Dados: Use
mysqldumpno servidor antigo emysqlpara importar no novo MariaDB. - Transferir Arquivos: Utilize
rsyncouscppara mover os arquivos do site com permissões corretas:
sudo chown -R www-data:www-data /var/www/html/seu-site
O stack LEMP oferece uma base robusta, escalável e segura. Com esta configuração inicial, você está preparado para hospedar desde blogs simples até aplicações web complexas em sua VPS Linux.