O LEMP é um grupo de software que pode ser usado para mostrar páginas/aplicativos dinâmicos da web. Este é um acrônimo que descreve um sistema operacional Linux, com um servidor web Nginx (pronuncia-se como “Engine-X”). Os dados de back-end são armazenados no banco de dados MySQL e o processamento dinâmico é feito por PHP.

Este guia demonstra como instalar o LEMP em um servidor Ubuntu 18.04. O sistema operacional Ubuntu cuida do primeiro requisito.

Pré-requisitos

Antes de concluir este tutorial, você deve ter uma conta de usuário normal não root em seu servidor com privilégios de sudo.

Assim que tiver seu usuário disponível, você estará pronto para iniciar as etapas seguintes descritas neste guia.

Etapa 1 - Instalando o Nginx Web Server

Para exibir as páginas web aos visitantes que acessam o nosso site, vamos utilizar o Nginx, um servidor web moderno e eficiente.

Todo o software usado neste procedimento virá dos repositórios de pacotes padrão do Ubuntu (apt). Você pode verificar uma instalação mais completa dele no seguinte artigo: Como instalar o Nginx no Ubuntu 18.04

Já que esta é a primeira vez que usamos apt para esta sessão, comece atualizando o comando para atualização dos pacotes em seu servidor e em seguida, instale o servidor nginx. Conforme ilustrado abaixo:

$$

sudo apt update && apt upgrade -y sudo apt install nginx -y

No Ubuntu 18.04, o Nginx é configurado para iniciar a execução após a instalação.

Se você não tiver um nome de domínio apontado para seu servidor e não souber o endereço IP público do seu servidor, poderá encontrá-lo executando o seguinte comando no shell:

  sudo ip addr show eth0 | grep inet | awk '{imprimir $ 2; } '| sed 's //.*$//' 

O comando vai mostrar os dois endereços IP:

IPV4(203.0.113.13) IPV6 (2001:DB8::/323)

Teste o IP do IPV4 em seu navegador chrome, firefox ou safari. O navegador em si não importa use o de sua preferencia.

Como alternativa, você pode verificar qual endereço IP está acessível, visto de outros locais na Internet:

sudo curl -4 ifconfig.me

Digite o endereço que você recebeu em seu navegador e ele o levará para a página de destino padrão do Nginx:

server_domain_or_IP

Nginx Default Web Page

Imagem do blog Nginx

Se você vir a página acima, significa que instalou o Nginx com sucesso.

Etapa 2 - Instalação do MySQL para gerenciar dados do site

Agora que você tem um servidor web, precisa instalar o MySQL (um sistema de gerenciamento de banco de dados) para armazenar e gerenciar os dados do seu site na web.

Instale o MySQL digitando:

$

sudo apt install mysql-server-5.7 -y

O software de banco de dados MySQL agora está instalado, mas sua configuração ainda não está completa.

Para proteger a instalação, o MySQL vem com um script que perguntará se queremos modificar alguns padrões não seguros. Inicie o script digitando:

$

sudo mysql_secure_installation

Este script solicitará que você forneça uma senha para uso no sistema MySQL. Depois disso, ele vai perguntar se você deseja configurar o VALIDATE PASSWORD PLUGIN,

Aviso: ativar esse recurso é uma questão de julgamento. Se ativado, as senhas que não correspondem aos critérios especificados serão rejeitadas pelo MySQL com um erro. Isso causará problemas se você usar uma senha fraca em conjunto com um software que configura automaticamente as credenciais do usuário MySQL, como os pacotes do Ubuntu para phpMyAdmin. É seguro deixar a validação desativada, mas você deve sempre usar senhas fortes e exclusivas para credenciais de banco de dados.

Responda Y para sim, ou qualquer outra coisa para continuar sem habilitar.

VALIDATE PASSWORD PLUGIN pode ser usado para testar senhas e melhorar a segurança. Ele verifica a força da senha e permite que os usuários definam apenas as senhas que são seguro o suficiente. Deseja configurar o plugin VALIDATE PASSWORD?

Press y|Y para Yes, qualquer outra tecla para Não:

Se você ativou a validação com Sim , o script também solicitará que você selecione um nível de validação de senha. Lembre-se de que se você inserir == 2 == (para o nível mais forte), receberá erros ao tentar definir qualquer senha que não contenha números, letras maiúsculas e minúsculas e caracteres especiais, ou que seja baseada em um dicionário comum palavras.

Existem três níveis de política de validação de senha:

LOW Length >= 8 MEDIUM Length >= 8, numeric, mixed case, and special characters STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

Se você habilitou a validação de senha, será mostrado um nível de força para a senha root existente e será perguntado se deseja alterar essa senha. Se você concordar com sua senha atual, digite == N == para "não" no prompt:

Using existing password for root. Estimated strength of the password: 100 Change the password for root ? (Press y|Y for Yes, any other key for No): N

Para o resto das perguntas, você deve pressionar == Y == e pressionar a tecla == ENTER == em cada prompt. Isso removerá algum usuário anônimo, banco de dados de teste, desabilitará o login de root remoto e carregará essas novas regras para que o MySQL respeite imediatamente as mudanças que fizemos. Neste ponto, seu sistema de banco de dados está configurado e você pode prosseguir com a instalação do PHP.

Observe que em sistemas Ubuntu executando MySQL 5.7 (e versões posteriores), o usuário raiz do MySQL é configurado para autenticar usando o plug-in == auth_socket == por padrão em vez de uma senha. Isso permite maior segurança e usabilidade em muitos casos, mas também pode complicar as coisas quando você precisa permitir que um programa externo (por exemplo, phpMyAdmin ) acesse o usuário.

Se você preferir usar uma senha ao conectar-se ao MySQL como root , você precisará mudar seu método de autenticação de == auth_socket == para == mysql_native_password ==.

Para fazer isso, abra o prompt do MySQL em seu terminal:

$

sudo mysql

Em seguida, verifique qual método de autenticação cada uma de suas contas de usuário MySQL usa com o seguinte comando:

mysql>

SELECT user,authentication_string,plugin,host FROM mysql.user;

+------------------+---------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-------------------------+ | root | | auth_socket | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPACANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7DSW17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-------------------------+

4 rows in set (0.00 sec) ::

Neste exemplo, você pode ver que o usuário root de fato autentica usando o plug-in == auth_socket ==. Para configurar a conta root para autenticação com senha, execute o seguinte comando == ALTER USER ==. Certifique-se de alterar a senha para uma ** senha forte ** de sua escolha:

mysql>

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

Estão, digite:

mysql>

FLUSH PRIVILEGES;

Which tells the server to reload the grant tables and put your new changes into effect.

Check the authentication methods employed by each of your users again to confirm that root no longer authenticates using the ==auth_socket== plugin:
mysql>

SELECT user,authentication_string,plugin,host FROM mysql.user;

+------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+

Você pode ver neste exemplo de saída que o usuário MySQL raiz agora se autentica usando uma senha. Depois de confirmar isso em seu próprio servidor, você pode sair do shell do MySQL:

mysql>

exit;

Neste ponto, seu sistema de banco de dados está configurado e você pode prosseguir com a instalação do PHP.

Etapa 3 - Instalando o PHP

Agora você tem o Nginx instalado e o MySQL instalado para armazenar e gerenciar seus dados. No entanto, você ainda não tem nada que possa gerar conteúdo dinâmico. É aqui que entra o PHP no jogo.

Como o Nginx não contém processamento PHP nativo como alguns outros servidores da web, você precisará instalar php-fpm, que significa "gerenciador de processo fastCGI". Diremos ao Nginx para passar as solicitações de PHP para este software para processamento.

Instale este módulo junto com um pacote auxiliar adicional que permitirá ao PHP se comunicar com o back-end do seu banco de dados. A instalação puxará os arquivos principais do seu PHP. Faça isso digitando o seguinte comando em seu shell.

$

sudo apt install php-fpm php-mysql -y

Agora você tem seus componentes PHP instalados, mas precisa fazer uma pequena mudança na configuração para torná-la mais segura.

Abra o arquivo de configuração principal php-fpm com privilégios de root :

$

sudo vim /etc/php/7.2/fpm/php.ini

Neste arquivo, encontre o parâmetro que define cgi.fix_pathinfo . Isso será comentado com um ponto-e-vírgula (;) e definido como "1" por padrão.

Esta é uma configuração extremamente insegura porque diz ao PHP para tentar executar o arquivo mais próximo que puder encontrar se o arquivo PHP solicitado não puder ser encontrado. Isso poderia permitir que os usuários elaborassem solicitações de PHP de uma forma que lhes permitiria executar scripts que não deveriam ser executados.

Altere essas duas condições removendo o comentário da linha e definindo-a como "0" , assim:

cgi.fix_pathinfo = 0

Salve e feche o arquivo quando terminar. Em seguida, reinicie o processador PHP digitando:

$

sudo systemctl restart php7.2-fpm

This will implement the change that you have made.

Etapa 4 - Configurando o Nginx para usar o processador PHP

Atualmente, você tem todos os componentes necessários instalados. A única mudança de configuração que você ainda precisa fazer é dizer ao Nginx para usar o processador PHP para conteúdo dinâmico.

Isso é feito no nível do bloco do servidor (os blocos do servidor são semelhantes aos hosts virtuais do Apache). Abra o arquivo de configuração de bloco do servidor Nginx padrão digitando:

$

sudo vim /etc/nginx/sites-available/default

Atualmente, com os comentários removidos, o arquivo de bloqueio do servidor padrão Nginx devem estar parecidos com este:

server { listen 80 default_server; listen [::]:80 default_server;

server_name _; root /var/www/html; index index.html index.htm index.nginx-debian.html;

location / { try_files $uri $uri/ =404; } }

Existem várias alterações que você precisa fazer neste bloco de servidor:

  • Primeiro, adicione ==index.php== como o primeiro valor da diretiva ==index== para que os arquivos denominados ==index.php== sejam servidos, se disponíveis, quando um diretório for solicitado
  • Modifique a diretiva ==server_name== para apontar para o nome de domínio ou endereço IP público do seu servidor.
    • Para o processamento PHP real, descomente um segmento do arquivo que trata as solicitações PHP removendo os símbolos de libra (#) da frente de cada linha. Este será o ==location ~/.php $== bloco de localização, o snippet fastcgi-php.conf incluído e o soquete associado a ==php-fpm==.

      < / li>
    • Além disso, descomente o bloco de localização que lida com arquivos ==.htaccess== usando o mesmo método. Nginx não processa esses arquivos. Se algum desses arquivos encontrar seu caminho para a raiz do documento, eles não devem ser exibidos aos visitantes.

As alterações que devem ser feitas estão destacadas no texto abaixo: ::: output servidor { listen 80 default_server; listen [::]: 80 default_server; root/var/www/tml; index ==index.php== index.html index.htm index.nginx-debian.html;

server_name your_server_domain_or_IP;

location / { try_files $uri $uri/ =404; } location ~ .php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php7.2-fpm.sock; } location ~ /.ht { deny all; } } :::

Por último, pode haver uma discrepância entre o arquivo referenciado pela diretiva fastcgi_pass dentro do bloco location ~/.php $. Você deve garantir que o nome deste arquivo esteja alinhado com o que está realmente armazenado no diretório /run/php em seu servidor.

Para verificar isso, salve o arquivo e feche o editor de texto e execute o seguinte comando:

$

ls /run/php/

php7.2-fpm.pid

Neste exemplo, você pode ver que o arquivo em questão é na verdade php7.2-fpm.pid, não php7.2-fpm.sock, que é o que está listado em local ~. diretiva php $. Se houver uma inconsistência semelhante em sua máquina, abra o arquivo /etc/nginx/sites-available/default mais uma vez e atualize a diretiva fastcgi_pass:

$

sudo vim /etc/nginx/sites-available/default

location ~ .php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php7.2-fpm.pid; }

Novamente, salve e feche o arquivo. Em seguida, teste seu arquivo de configuração para erros de sintaxe digitando:

$

sudo nginx -t

Se algum erro for relatado, volte e verifique novamente o seu arquivo antes de continuar.

Quando estiver pronto, recarregue o Nginx para fazer as alterações necessárias:

$

sudo systemctl reload nginx

This concludes the installation and configuration of your LEMP stack. However, it’s prudent to confirm that all of the components can communicate with one another.

Etapa 5 - Criando um arquivo PHP para testar a configuração

Sua pilha LEMP agora deve estar completamente configurada. Você pode testá-lo para validar se o Nginx pode entregar corretamente os arquivos .php para o processador PHP.

Para fazer isso, use seu editor de texto para criar um arquivo PHP de teste chamado info.php na raiz do documento:

$

sudo vim /var/www/html/info.php

Insira as seguintes linhas no novo arquivo. Este é um código PHP válido que retornará informações sobre o seu servidor:

&lt;?php phpinfo();?&gt;

Quando terminar, salve e feche o arquivo.

Agora, você pode visitar esta página em seu navegador, visitando o nome de domínio ou endereço IP público do seu servidor seguido por /info.php:

http://your_server_domain_or_IP/info.php

Você deve ver uma página da web que foi gerada por PHP com informações sobre o seu servidor:

php

Se vir uma página parecida com esta, você configurou o processamento de PHP com Nginx com sucesso.

Depois de verificar se o Nginx renderiza a página corretamente, é melhor remover o arquivo que você criou, pois ele pode, na verdade, dar aos usuários não autorizados algumas dicas sobre sua configuração que podem ajudá-los a tentar invadir. Você sempre pode regenerar esse arquivo se precisar dele mais tarde.

Por enquanto, remova o arquivo digitando:

$

sudo rm /var/www/html/info.php

Com isso, agora você tem uma pilha LEMP totalmente configurada e funcional em seu servidor Ubuntu 18.04.

Conclusão

Uma pilha LEMP é uma plataforma poderosa que permitirá que você configure e atenda praticamente qualquer site ou aplicativo de seu servidor.

Existem várias etapas a seguir que você pode realizar a partir daqui. Por exemplo, você deve garantir que as conexões com o seu servidor sejam seguras. Para isso, você pode proteger seu Instalação do Nginx com Let's Encrypt . Seguindo este guia, você adquirirá um certificado TLS / SSL gratuito para o seu servidor, permitindo que ele forneça conteúdo por HTTPS.

Read more about: Ubuntu