A pilha de software LEMP é um grupo de software que pode ser usado para atender páginas e aplicativos Web dinâmicos. Este é um acrônimo que descreve um sistema operacional Linux, com um servidor Web Nginx (se pronuncia "Engine-X). Os dados backend são armazenados no banco de dados MySQL e o processamento dinâmico é tratado pelo PHP.
Este guia demonstra como instalar uma pilha LEMP em um servidor Ubuntu 18.04. O sistema operacional Ubuntu cuida do primeiro requisito. Vamos descrever como colocar o resto dos componentes em funcionamento.
Antes de completar este tutorial, será necessário ter uma conta de usuário regular e sem root no seu servidor com privilégios sudo
. Configure esta conta completando nosso guia de configuração inicial do servidor para o Ubuntu 18.04 .
Assim que tiver seu usuário disponível, você está pronto para iniciar as etapas delineadas neste guia.
Para mostrar páginas Web aos visitantes de nosso site, vamos usar o Nginx, um moderno e eficiente servidor Web.
Todo software usado neste procedimento virão dos repositórios de pacote padrão do Ubuntu. Isso significa que podemos usar o conjunto de gerenciamento de pacotes apt
para completar as instalações necessárias.
Uma vez que essa é a primeira vez que vamos usar o apt
para esta sessão, atualize o índice de pacotes do seu servidor. Em seguida, instale o servidor:
- sudo apt update
- sudo apt install nginx
No Ubuntu 18.04, o Nginx está configurado para começar a executar após a instalação.
Se tiver o firewall ufw
funcionando como descrito no guia de configuração inicial, será necessário permitir as conexões ao Nginx. O Nginx registra-se com o ufw
após a instalação, então o procedimento é bastante simples.
É recomendável que habilite o perfil mais restritivo que ainda assim permitirá o tráfego que quiser. Como ainda não configurou o SSL para seu servidor neste guia, será necessário apenas permitir o tráfego na porta 80
.
Habilite isso digitando:
- sudo ufw allow 'Nginx HTTP'
Verifique a mudança executando:
- sudo ufw status
Este comando irá mostrar que o tráfego HTTP é permitido:
OutputStatus: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)
Com essas novas regras adicionadas no firewall, você pode testar se o servidor está funcionando acessando o nome do domínio do seu servidor ou endereço IP público no seu navegador Web.
Se você não tiver um nome de domínio apontando no seu servidor e você não sabe o endereço IP público do seu servidor, é possível encontrá-lo executando o seguinte comando:
- ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
Isso irá mostrar na tela alguns endereços IP. Você pode testar cada um deles em seu navegador Web.
Como uma alternativa, verifique qual endereço IP está acessível, como visto por outras locações na internet:
- curl -4 icanhazip.com
Digite o endereço que receber no seu navegador Web e ele irá levá-lo para a página inicial do Nginx:
http://server_domain_or_IP
Se ver a página acima, você instalou o Nginx com sucesso.
Agora que você tem um servidor Web, será necessário instalar o MySQL (um sistema de gerenciamento de banco de dados) para armazenar e gerenciar os dados para seu site.
Instale o MySQL digitando:
- sudo apt install mysql-server
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 irá perguntar se queremos modificar alguns padrões não-seguros. Inicie o script digitando:
- sudo mysql_secure_installation
Este script irá perguntar se deseja configurar o VALIDATE PASSWORD PLUGIN
.
Aviso: Ativar esta característica é uma decisão sua. Se habilitada, as senhas que não corresponderem o critério especificado serão rejeitadas pelo MySQL com um erro. Isso causará problemas caso utilize uma senha fraca em conjunto com o software que configura automaticamente as credenciais de usuário do MySQL, como os pacotes Ubuntu para o phpMyAdmin. É seguro deixar a validação desativada, mas sempre utilize senhas fortes e únicas para as credenciais do banco de dados.
Responda Y
para sim, ou qualquer outra coisa para continuar sem a habilitar.
VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?
Press y|Y for Yes, any other key for No:
Se tiver habilitado a validação, o script também irá pedir a você para selecionar um nível de validação de senha. Lembre-se de que se digitar 2 para o níveis 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 se baseiam em palavras do dicionário comuns.
There are three levels of password validation policy:
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
Em seguida, será solicitado que envie e confirme uma senha root:
Please set the password for root here.
New password:
Re-enter new password:
Para o resto das perguntas, pressione Y
e clique na tecla ENTER
em cada prompt. Isso removerá alguns usuários anônimos e o banco de dados teste, desativará os logins remotos ao root, e carregará essas novas regras para que o MySQL respeite imediatamente as alterações que fizemos.
Note que os sistemas Ubuntu que rodam o MySQL 5.7 (e as versões posteriores), o usuário root MySQL está definido para autenticar usando o plug-in do auth_socket
por padrão ao invés de um com uma senha. Isso permite maior segurança e a usabilidade na maioria dos casos, mas também pode complicar as coisas quando for necessário permitir que um programa externo (por exemplo, o phpMyAdmin) acesse o usuário.
Se usar o plug-in auth_socket
para acessar o MySQL se encaixar com seu fluxo de trabalho, vá para o Passo 3. Se, no entanto, preferir usar uma senha quando se conectar ao MySQL como root, será necessário alterar seu método de autenticação do auth_socket
para o mysql_native_password
. Para fazer isso, abra o prompt do MySQL do seu terminal:
- sudo mysql
Em seguida, verifique quais os métodos de autenticação cada conta de usuário do seu MySQL utilizam com o seguinte comando:
- SELECT user,authentication_string,plugin,host FROM mysql.user;
Output+------------------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+-------------------------------------------+-----------------------+-----------+
| root | | auth_socket | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)
Neste exemplo, é possível ver que o usuário root autenticou usando o plug-in auth_socket
. Para configurar a conta root para autenticar com uma senha, execute o comando ALTER USER
. Certifique-se de trocar a senha
por uma senha forte de sua escolha:
- ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Então, execute o comando FLUSH
o qual diz para o servidor recarregar as tabelas de permissões e colocar as suas alterações em vigor:
- FLUSH PRIVILEGES;
Verifique novamente os métodos de autenticação utilizados por cada um dos seus usuários para confirmar que **root **já não autentica utilizando o plug-in do auth_socket
:
- SELECT user,authentication_string,plugin,host FROM mysql.user;
Output+------------------+-------------------------------------------+-----------------------+-----------+
| 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 |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)
Neste exemplo, é possível ver o resultado que agora o usuário root MySQL autentica utilizando uma senha. Assim que confirmar isso no seu servidor, saia do shell MySQL:
- exit
Nota: Após configurar seu usuário root MySQL para autenticar com uma senha, você já não será capaz de acessar o MySQL com o comando sudo mysql
usado anteriormente. Ao invés disso, execute o seguinte:
- mysql -u root -p
Após digitar a senha que acabou de definir, você verá o prompt do MySQL.
Neste ponto, seu sistema de banco de dados está configurado e você pode seguir em frente para a instalação do PHP.
Agora você tem o Nginx instalado para servir suas páginas e o MySQL instalado para armazenar e gerenciar seus dados. No entanto, você ainda não tem nada instalado que possa gerar conteúdo dinâmico. Aqui é onde o PHP entra em jogo.
Uma vez que o Nginx não contém o processamento nativo do PHP como outros servidores Web, você precisará instalar o php-fpm
, que significa “gerenciador de processos fastCGI”. Diremos ao Nginx para passar os pedidos PHP para este software para processamento.
Nota: Dependendo do seu fornecedor de nuvem, talvez seja necessário adicionar o repositório universe
do Ubuntu que inclui o software de código aberto mantido pela comunidade Ubuntu, antes de instalar o pacote php-fpm
. Faça isso digitando:**
- sudo add-apt-repository universe
Instale o módulo php-fpm
junto com um pacote auxiliar adicional, php-mysql
, que permitirá que o PHP se comunique com seu backend do banco de dados. A instalação irá puxar os arquivos principais e necessários do PHP. Faça isso digitando:
- sudo apt install php-fpm php-mysql
Agora você tem todos os componentes de pilha LEMP necessários instalados, mas ainda assim será necessário fazer algumas alterações de configuração para dizer ao Nginx para usar o processador PHP para conteúdo dinâmico.
Isto é feito no nível de bloco do servidor ( os blocos do servidor são semelhantes aos hosts virtuais do Apache). Para fazer isso, abra um novo arquivo de configuração de bloco de servidor dentro do diretório /etc/nginx/sites-available/
. Neste exemplo, o novo arquivo de configuração de bloco de servidor se chama example.com
, embora você possa dar o nome que quiser:
- sudo nano /etc/nginx/sites-available/example.com
Ao editar um novo arquivo de configuração de bloco de servidor, ao invés de editar o padrão, você será capaz de restaurar facilmente a configuração padrão caso seja necessário.
Adicione o seguinte conteúdo, que foi tomado e ligeiramente modificado do arquivo de configuração padrão do bloco de servidor, ao seu novo arquivo de configuração de bloco de servidor:
server {
listen 80;
root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name example.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á o que cada um desses blocos de localização e diretrizes fazem:
listen
— Define o que a porta Nginx irá escutar. Neste caso, ele irá escutar na porta 80
, a porta padrão para o HTTP.root
— Define o documento root onde os arquivos apresentados pelo site são armazenados.index
— Configura o Nginx para dar prioridade a arquivos de serviço designados index.php
quando um arquivo index é solicitado, se eles estiverem disponíveis.server_name
— Define qual bloco de servidor deve ser usado para um dado pedido ao seu servidor.** Aponte esta diretriz para o nome de domínio do seu servidor ou endereço IP público.**location /
— O primeiro bloco de localização inclui uma diretriz try_files
, que verifica a existência de arquivos que correspondam a um pedido URI. Se o Nginx não puder encontrar o arquivo apropriado, ele irá retornar um erro 404.location ~ \.php$
— Este bloco de localização lida o processamento atual do PHP apontando o Nginx para o arquivo de configuração fastcgi-php.conf
e o arquivo php7.2-fpm.sock
que declara qual soquete está associado ao php-fpm
.location ~ /\.ht
— O último bloco de localização lida com os arquivos .htaccess
, que o Nginx não processa. Ao adicionar a diretriz deny all
, se algum arquivo .htaccess
encontrar seu caminho para a root do documento ele não será apresentado aos visitantes.Após adicionar este conteúdo, salve e feche o arquivo. Habilite seu novo bloco de servidor criando um link simbólico do seu novo arquivo de configuração de bloco de servidor (no diretório /etc/nginx/sites-available/
) para o diretório /etc/nginx/sites-enabled/
:
- sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
Então, desvincule o arquivo de configuração padrão do diretório /sites-enabled/
:
- sudo unlink /etc/nginx/sites-enabled/default
Nota**: Se for necessário restaurar a configuração padrão, recrie o link simbólico, desta forma:**
- sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/
Teste seu novo arquivo de configuração para erros de sintaxe digitando:
- sudo nginx -t
Se algum erro for reportado, volte e verifique novamente seu arquivo antes de continuar.
Quando estiver pronto, recarregue o Nginx para fazer as alterações necessárias:
- sudo systemctl reload nginx
Isto conclui a instalação e configuração da sua pilha LEMP. No entanto, é prudente confirmar que todos os componentes podem se comunicar uns com os outros.
Sua pilha LEMP agora deve estar configurada completamente. Teste ela para validar que o Nginx pode passar corretamente os arquivos .php
para o processador PHP.
Para fazer isso, utilize seu editor de texto para criar um arquivo de teste PHP chamado info.php
na sua root do documento:
- sudo nano /var/www/html/info.php
Digite as linhas a seguir para o novo arquivo. Este é um código PHP válido que irá retornar informações sobre seu servidor:
<?php
phpinfo();
Quando você terminar, salve e feche o arquivo.
Agora, visite esta página no seu navegador Web visitando o nome de domínio do seu servidor ou endereço IP público seguido por /info.php
:
http://your_server_domain_or_IP/info.php
Você deve ver uma página Web que foi gerada pelo PHP com informações sobre seu servidor:
Se você ver uma página que se pareça com essa, o processamento PHP com o Nginx foi configurado com sucesso.
Após verificar que o Nginx renderiza a página corretamente, é melhor remover o arquivo que você criou uma vez que ele pode de fato dar a usuários não autorizados algumas dicas sobre sua configuração que podem ajudá-los a tentar invadir. Você sempre pode gerar novamente este arquivo se precisar dele mais tarde.
Agora, remova o arquivo digitando:
- sudo rm /var/www/html/info.php
Com isso, você agora tem uma pilha LEMP totalmente configurada e funcionando no seu servidor Ubuntu 18.04.
Uma pilha LEMP é uma plataforma poderosa que permitirá que você configure e apresente quase qualquer site ou aplicativo do seu servidor.
Há um número de passos que você pode tomar a partir daqui. Por exemplo, certifique-se de que as conexões para seu servidor estejam seguras. Para isso, você pode proteger sua instalação Nginx com o Let’s Encrypt. Ao seguir este guia, você receberá um certificado TLS/SSL gratuito para seu servidor, permitindo que apresente conteúdo sobre o HTTPS.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
Sign up for Infrastructure as a Newsletter.
Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.
Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.