Introdução
No mundo da internet, várias tecnologias se unem para formar uma solução que permite aos usuários da internet acessar conteúdo dinâmico na world wide web. A stack LEMP é uma dessas soluções. Ela reúne quatro tecnologias que formam uma solução de servidor completa para sites dinâmicos e de alto desempenho. LEMP é uma sigla para Linux, Nginx, MySQL e PHP. O Linux é o sistema operacional do servidor. O Nginx (que se pronuncia como Engine-X, daí a letra E na sigla) é o software do servidor web. Em seguida, o MySQL é o sistema de banco de dados que armazena os dados do site e dos usuários. O PHP é a linguagem de script do lado do servidor para processamento dinâmico.
Neste tutorial, guiaremos você sobre como instalar e configurar uma stack LEMP e verificar se tudo está funcionando como esperado. Vamos começar!
Passo 1: Configurando seu servidor com Ubuntu 20.04
O Ubuntu 20.04 é um sistema operacional baseado em Linux. Existem vários servidores baseados em Linux sistemas operacionais por aí, incluindo gratuitos e premium. O foco deste guia é o Ubuntu 20.04, que é gratuito e de código aberto. Este passo cuida do primeiro requisito na sigla da stack LEMP, o L. Você deve ter uma instalação real do Ubuntu 20.04 em seu VPS para prosseguir com as etapas subsequentes. Você pode seguir nosso guia sobre configuração do seu Servidor Ubuntu. Opcionalmente, se quiser seguir este guia em seu computador local, você pode baixar a imagem de instalação do servidor Ubuntu 20.04 diretamente do site do Ubuntu website. Você deve configurar um usuário comum não-root com privilégios sudo, pois executaremos alguns comandos que exigem permissões sudo.
Passo 2: Instalando e Configurando o Servidor Nginx
Servidores Web nos permitem servir conteúdo, como páginas web, para os visitantes do site. O Nginx é um servidor web popular, aparecendo entre os cinco principais de código aberto servidores web preferidos pelos desenvolvedores. Este passo cuida do segundo requisito na stack LEMP, E para Nginx. O Ubuntu possui um repositório de pacotes padrão de onde obteremos os pacotes para uso neste guia. O Ubuntu é baseado no Debian, que utiliza apt ou dpkg para gerenciar seus pacotes. Para pacotes do repositório padrão, usaremos o apt.
Como regra geral, você deve executar o comando de atualização antes de iniciar qualquer instalação em um sistema Linux. Comece digitando o seguinte comando no terminal:
|
1 |
sudo apt update |
Depois de atualizar, agora você pode instalar o Nginx com o seguinte comando:
|
1 |
sudo apt install nginx |
Assim que a instalação for concluída, o Nginx começa a rodar automaticamente. O próximo passo é configurar o firewall para permitir a passagem de tráfego. O Ubuntu usa o pacote ufw (Uncomplicated Firewall) para a configuração de firewalls. Após a instalação, o Nginx se registra como um serviço no ufw. O Ubuntu inicia o serviço de Firewall automaticamente na inicialização do sistema, mas para ter certeza, digite o seguinte comando para ativá-lo:
|
1 |
sudo ufw enable |
Para listar a configuração de aplicativos que o ufw permite, digite o seguinte comando:
|
1 |
sudo ufw app list |
Abaixo está uma captura de tela que mostra a saída do comando acima:

Como você pode ver, o Nginx já está registrado no ufw e possui três perfis, conforme explicado abaixo:
- Nginx Full – abre as portas 80 e 443. A porta 80 é para tráfego normal/não criptografado, ou seja, HTTP. A porta 443 é para tráfego criptografado TLS/SSL, ou seja, https.
- Nginx HTTP – abre apenas a porta 80 – tráfego não criptografado.
- Nginx HTTPS – abre apenas a porta 443 – tráfego criptografado TLS/SSL.
Embora o Nginx se registre automaticamente no ufw, nenhum tráfego é permitido para o seu servidor até que você mesmo o faça. Você pode optar por permitir todos ou qualquer um dos perfis, no entanto, é melhor permitir o perfil mais restritivo que ainda assim permita o tráfego configurado para o seu servidor web. Como não configuramos o SSL neste tutorial, permitiremos apenas o tráfego HTTP na porta 80. Se tiver curiosidade, temos um guia sobre como configurar o SSL no servidor Nginx a partir do Let's Encrypt usando o Certbot.
Vamos habilitar o tráfego na porta 80 inserindo o seguinte comando:
|
1 |
sudo ufw allow 'Nginx HTTP' |
Para verificar se a alteração foi bem-sucedida, digite o seguinte comando:
|
1 |
sudo ufw status |

A saída acima da execução do comando mostra que o tráfego HTTP agora é permitido. Você pode verificar se o servidor está em execução acessando seu domínio ou o IP público do servidor no navegador. Se você não configurou um nome de domínio e não tem certeza sobre o endereço IP público do seu servidor, você pode encontrá-lo usando curl executando o seguinte comando:
|
1 |
curl -4 icanhazip.com |
Copie a saída do comando acima, que é o seu endereço IP público, na barra de endereços do seu navegador. Ao carregar a página, você verá a página inicial padrão do Nginx:

A página acima indica que você instalou o Nginx com sucesso.
Passo 3: Instalando o Sistema de Gerenciamento de Banco de Dados MySQL
O gerenciamento de dados é uma parte crucial de qualquer site dinâmico. O MySQL é um sistema de gerenciamento de banco de dados que armazena e gerencia os dados de um site. Este passo cuida do terceiro requisito na pilha LEMP, o M. Insira o seguinte comando para instalar o MySQL:
|
1 |
sudo apt install mysql-server |
Após a conclusão da instalação do MySQL, você deve configurá-lo antes que ele esteja pronto para uso. Parte da configuração inclui a segurança do servidor de banco de dados. O MySQL vem com um script para orientá-lo na segurança e na configuração de senhas. O seguinte comando inicia o script:
|
1 |
sudo mysql_secure_installation |

O script pergunta se você deseja configurar o componente VALIDATE PASSWORD ou pressionar qualquer letra para prosseguir sem ativar o componente.
O componente VALIDATE PASSWORD é um recurso usado para verificar se a senha inserida para um determinado usuário no servidor de banco de dados atende a um critério específico. Você pode configurá-lo para verificar itens como comprimento, caracteres numéricos, disponibilidade de letras maiúsculas ou minúsculas, etc. Se não estiver ativado, você poderá configurar qualquer senha de sua escolha. No entanto, se estiver ativado, você deverá usar uma senha que corresponda aos critérios especificados. Ativá-lo pode causar problemas com pacotes que configuram automaticamente as credenciais de usuário do MySQL, como o pacote phpMyAdmin para Ubuntu. Ativá-lo ou não é uma escolha pessoal. Seu banco de dados ainda estará seguro se você não o ativar, apenas certifique-se de usar senhas fortes e exclusivas.
Se você pressionou Y para ativar o componente, o script solicitará que você selecione um nível de validação de senha:

O script fornece 3 níveis de validação de senha. O nível LOW exige que sua senha inclua apenas 8 ou mais caracteres. O nível MEDIUM exige que sua senha inclua 8 ou mais caracteres, que devem ser uma mistura de letras maiúsculas, letras minúsculas e caracteres especiais. O nível STRONG exige uma senha complexa com 8 ou mais caracteres, que deve ser uma mistura de letras maiúsculas, letras minúsculas, caracteres especiais e palavras, e não deve ser baseada em palavras comuns de dicionário, caso contrário, você receberá erros. Vamos escolher o nível Low, digite 0 e pressione enter.
O script solicita que você insira e reinsira a senha:

Digite y e enter para aceitar a senha digitada como sua senha root. As solicitações subsequentes servem para melhorar a segurança do servidor MySQL. Começando pela remoção dos usuários anônimos padrão que acompanham toda instalação do MySQL, desabilitando o login root de uma conexão remota e removendo os bancos de dados de teste. A solicitação final pede que você recarregue a tabela de privilégios para que os comandos entrem em vigor. Digite y e pressione enter para todas as solicitações:

A configuração de segurança inicial está concluída.
Você pode verificar a versão do MySQL que instalou executando o comando:
|
1 |
sudo mysql –V |
Aqui está a versão que estamos usando para este tutorial:
![]()
Para sistemas Ubuntu que executam versões do MySQL a partir da 5.7 e posteriores, o usuário root está configurado para se autenticar usando o plugin auth_socket e não com a senha. Isso garante maior segurança, no entanto, pode ser um problema com pacotes externos, como o pacote phpMyAdmin. Se você preferir prosseguir usando o plugin auth_socket, passe para a Etapa 4.
Se você quiser se conectar usando uma senha, deve configurar o método de autenticação para usar mysql_native_password.
Inicie o prompt do MySQL inserindo o seguinte comando:
|
1 |
sudo mysql |
O MySQL vem com vários bancos de dados padrão. Você pode visualizar uma lista de bancos de dados padrão inserindo a seguinte consulta no seu terminal:
|
1 |
show databases; |

O banco de dados chamado mysql armazena várias configurações relacionadas ao MySQL. Este banco de dados possui uma tabela chamada users que contém os detalhes do usuário e o método de autenticação de cada um. Podemos usar consultas SQL para recuperar, alterar e excluir informações de uma tabela. Insira a seguinte consulta no seu terminal para obter detalhes sobre qual método de autenticação cada usuário usa:
|
1 |
SELECT user, authentication_string, plugin, host FROM mysql.user; |

A saída acima mostra que o usuário root realmente se autentica usando o plugin auth_socket. Para alterar o método de autenticação para o usuário root, insira a seguinte instrução no seu terminal. Lembre-se de alterar para corresponder à força da senha para o nível médio que definimos em uma etapa anterior, caso contrário, causará um erro:
|
1 |
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mypassword'; |
Assim que a consulta for executada com sucesso, execute o comando flush privileges para que as alterações entrem em vigor imediatamente:
|
1 |
FLUSH PRIVILEGES; |
Execute novamente a instrução select abaixo para verificar se as alterações entraram em vigor:
|
1 |
SELECT user,authentication_string,plugin,host FROM mysql.user; |

A partir da saída, o usuário root agora se autenticará usando o mysql_native_password. Você pode sair do prompt do mysql digitando exit e pressionando enter.
Você pode tentar fazer login com a senha que definiu inserindo o seguinte comando:
|
1 |
mysql -u root –p |
O prompt solicitará sua senha. Se corresponder, você verá o prompt do MySQL. Você configurou com sucesso seu servidor com o MySQL. Em seguida, saia do prompt do MySQL.
Etapa 4: Instalando o PHP e Configurando o Nginx para Usar o Processador PHP
PHP é um acrônimo para PHP: Hypertext Preprocessor. É uma linguagem de script do lado do servidor de código aberto amplamente utilizada para sites e aplicativos web. O PHP cuida do quarto requisito na pilha LEMP. O PHP ajuda a gerar conteúdo dinâmico em um site. Ele pode ser usado como um intermediário entre suas páginas web e o sistema de banco de dados. Ele lê dados do banco de dados e os apresenta aos visitantes do seu site. Além disso, ele pode inserir, atualizar e excluir dados do banco de dados.
O Nginx carece de plugins nativos de processamento PHP como outros servidores web, então você deve instalar o php-fpm para passar as requisições do Nginx para o PHP para processamento. Primeiro, adicione o repositório universe do Ubuntu, que possui software livre e de código aberto mantido pela comunidade do Ubuntu. Insira o seguinte comando no seu terminal:
|
1 |
sudo add-apt-repository universe |
Em seguida, instale o pacote php-fpm junto com o pacote auxiliar php-msql para permitir que o PHP se comunique com o MySQL, usando o seguinte comando:
|
1 |
sudo apt install php-fpm php-mysql |
No momento da redação deste guia, a versão do PHP instalada a partir do comando acima é a 7.2.24. Portanto, ele instala o pacote php-fpm7.2. Tenha isso em mente ao atualizar os blocos do servidor e certifique-se de inserir a versão correta, caso contrário, sua página não será carregada.
Você pode verificar a versão do PHP inserindo o seguinte comando:
|
1 |
php -v |

Neste ponto, todos os componentes da pilha LEMP foram instalados. O que você precisa fazer a seguir é configurar o Nginx para direcionar as requisições para o processador PHP. No Nginx, a configuração é feita dentro de blocos de servidor. Os blocos de servidor são equivalentes aos virtual hosts do Apache. Para mais informações, você pode dar uma olhada no nosso tutorial sobre blocos de servidor do Nginx.
Para este tutorial, vamos criar um bloco de servidor para um domínio test.com com o mesmo nome, você é livre para escolher o nome de sua preferência. Os blocos de servidor ficam no diretório /etc/nginx/sites-available/. Use o nano para criar o arquivo do bloco de servidor inserindo o seguinte comando:
|
1 |
sudo nano /etc/nginx/sites-available/test.com |
Digite o seguinte script no arquivo:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
server { listen 80; root /var/www/html; index index.php index.html index.htm index.nginx-debian.html; server_name test.com; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; } location ~ /\.ht { deny all; } } |
Aqui está uma breve descrição do que cada diretiva faz:
- listen – define a porta na qual o Nginx irá escutar. A porta 80 é a porta padrão, no entanto, se você tivesse configurado o SSL, colocaria 443.
- root – contém o diretório no qual o diretório do site será armazenado.
- index – instrui o Nginx a priorizar o envio de arquivos index.php, caso estejam disponíveis mediante requisição.
- server_name – define o nome do bloco de servidor, ele contém o endereço IP público ou o nome de domínio do seu servidor.
- location/ – o primeiro bloco location possui a diretiva try_files. Ele verifica a existência de arquivos que correspondam a uma requisição URI; se não forem encontrados, um erro 404 é retornado.
- location ~ \.php$ – esta diretiva lida com o processamento do PHP direcionando as requisições do Nginx através do arquivo fastcgi-php.conf e do arquivo php7.2-fpm.sock, que define qual socket associar ao php-fpm. Este comando verifica o status do php-fpm, especificamos a versão como 7.2, que é a que temos. Certifique-se de verificar com a versão que você possui:
|
1 |
sudo service php7.2-fpm status |
- location ~ /\.ht – esta diretiva lida com os arquivos .htaccess, que não são processados pelo Nginx. A diretiva deny all garante que nenhum arquivo htaccess seja servido aos visitantes.
Depois de adicionar o script ao seu arquivo test.com, digite Ctrl + O e pressione Enter para salvar o arquivo. Digite Ctrl + X para fechar o editor.
Em seguida, você deve habilitar o bloco de servidor inserindo o seguinte comando para criar um link simbólico para o /etc/nginx/sites-enabled:
|
1 |
sudo ln -s /etc/nginx/sites-available/test.com /etc/nginx/sites-enabled/ |
Em seguida, desvincule o bloco de servidor padrão de sites-enabled inserindo o seguinte comando:
|
1 |
sudo unlink /etc/nginx/sites-enabled/default |
Teste sua nova configuração inserindo o seguinte comando:
|
1 |
sudo nginx -t |
Se a sintaxe estiver correta, recarregue o Nginx com o seguinte comando:
|
1 |
sudo systemctl reload nginx |
Nesta etapa, sua pilha LEMP foi instalada e configurada. Na próxima etapa, criaremos um arquivo de teste apenas para garantir que os vários componentes se conectem bem.
Passo 5: Criando um Arquivo PHP para Testar sua pilha LEMP
Nesta etapa, criamos um arquivo .php e o executamos no servidor Nginx para verificar se ele funciona corretamente. Usaremos a função global phpinfo() para verificar os pacotes php disponíveis. Insira o seguinte comando para abrir um arquivo .php no nano:
|
1 |
sudo nano /var/www/html/test.php |
No editor nano, digite o seguinte trecho de código:
|
1 |
<?php phpinfo(); |
Salve e feche o arquivo. Para visitar a página que você acabou de criar no seu navegador, encontre seu domínio ou endereço IP e navegue até ele da seguinte forma:
|
1 |
http://your_server_domain_or_IP/test.php |
Você deverá conseguir ver a página de informações do PHP:

A página acima mostra que você configurou o Nginx com sucesso. Como o arquivo que você criou para testes contém detalhes mais específicos sobre o seu servidor, você deve se lembrar de removê-lo. Insira o seguinte comando para remover o arquivo:
|
1 |
sudo rm /var/www/html/test.php |
Se você precisar testar suas configurações no futuro, poderá recriar o arquivo a qualquer momento.
Conclusão
Neste tutorial, você configurou uma pilha LEMP no seu Ubuntu 20.04, que é uma das pilhas de desenvolvimento de aplicações web mais poderosas disponíveis. A partir daqui, você deve ser capaz de hospedar quase qualquer site, aplicativo web ou lógica do lado do servidor para seu aplicativo móvel. Para garantir que seu site sirva conteúdo por meio de uma conexão SSL segura, temos um tutorial sobre como configurar certificados SSL no servidor Nginx que recomendamos que você dê uma olhada.
Feliz computação!
Comentários
Nenhum comentário ainda. Seja o primeiro.