Pesquisa de site

Instale Nginx, MySQL, PHP (pilha LEMP) no Ubuntu 20.04 LTS


Em nosso tutorial anterior, discutimos como instalar a pilha LAMP no servidor Ubuntu 20.04 LTS. Neste tutorial, veremos como instalar Nginx, MySQL, PHP (pilha LEMP) na edição do servidor Ubuntu 20.04 LTS. LEMP é o acrônimo de Linux, Engine-x, MariaDB/MySQL, MariaDB/MySQL, M >PHP/Perl/Python.

Instale Nginx, MySQL, PHP (pilha LEMP) no Ubuntu 20.04 LTS

Para os fins deste tutorial, usarei a seguinte máquina de teste:

  • Sistema operacional: Servidor Ubuntu 20.04 LTS
  • Endereço IP: 192.168.225.52/24

Vamos começar.

1. Instale o Nginx no Ubuntu

Execute o seguinte comando no Terminal para instalar o servidor web Nginx:

sudo apt install nginx

Após instalar o Nginx, verifique se o serviço Nginx está rodando ou não usando o comando:

sudo systemctl status nginx

Exemplo de resultado:

● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-05-29 10:13:47 UTC; 56s ago
       Docs: man:nginx(8)
   Main PID: 1349 (nginx)
      Tasks: 2 (limit: 2283)
     Memory: 4.4M
     CGroup: /system.slice/nginx.service
             ├─1349 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
             └─1350 nginx: worker process

May 29 10:13:46 ubuntuserver systemd[1]: Starting A high performance web server and a reverse proxy server...
May 29 10:13:47 ubuntuserver systemd[1]: Started A high performance web server and a reverse proxy server.

Se você vir uma saída como a acima, o serviço Nginx foi iniciado.

Caso o serviço Nginx ainda não tenha sido iniciado, você pode iniciá-lo usando o comando:

sudo systemctl enable nginx
sudo systemctl start nginx

1.1 Permitir servidor web Nginx via firewall UFW

UFW, significa Uncomplicated Firewall, é um programa para gerenciar um firewall netfilter projetado para ser fácil de usar. O UFW está disponível por padrão em todas as versões do Ubuntu.

Por padrão, o navegador Nginx não pode ser acessado de sistemas remotos se você tiver habilitado o firewall UFW no Ubuntu 20.04 LTS. Você deve permitir as portas http e https seguindo as etapas abaixo.

Primeiro, vamos ver quais aplicativos instalaram um perfil usando o comando:

sudo ufw app list

Exemplo de resultado:

Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

Como você pode ver, os aplicativos Nginx e OpenSSH possuem perfis UFW instalados.

Se você olhar o perfil “Nginx Full ”, verá que ele permite o tráfego para as portas 80 e 443:

sudo ufw app info "Nginx Full"

Exemplo de resultado:

Profile: Nginx Full
Title: Web Server (Nginx, HTTP + HTTPS)
Description: Small, but very powerful and efficient web server

Ports:
80,443/tcp

Agora, execute o seguinte comando para permitir o tráfego de entrada HTTP e HTTPS para este perfil:

sudo ufw allow in "Nginx Full"

Você verá uma saída semelhante a abaixo:

Rules updated
Rules updated (v6)

Se você deseja permitir o tráfego https, mas apenas o tráfego http (80), execute:

sudo ufw app info "Nginx HTTP"

Vamos prosseguir e executar a página de teste do Nginx.

Para fazer isso, abra seu navegador da Web e navegue até http://localhost/ ou http://IP-Address/.

Você verá a página de boas-vindas do Nginx conforme mostrado abaixo.

Parabéns! O servidor Nginx está funcionando!

2. Instale MySQL no Ubuntu

Para instalar o MySQL no Ubuntu, execute:

sudo apt install mysql-server

Verifique se o serviço MySQL está rodando ou não usando o comando:

sudo systemctl status mysql

Exemplo de resultado:

● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since Fri 2020-05-29 10:31:56 UTC; 51s ago
   Main PID: 2288 (mysqld)
     Status: "Server is operational"
      Tasks: 39 (limit: 2283)
     Memory: 325.6M
     CGroup: /system.slice/mysql.service
             └─2288 /usr/sbin/mysqld

May 29 10:31:49 ubuntuserver systemd[1]: Starting MySQL Community Server...
May 29 10:31:56 ubuntuserver systemd[1]: Started MySQL Community Server.

Como você pode ver na saída acima, o Mysql está rodando!

2.1 Configurar senha do usuário administrativo do banco de dados (root) para Mysql

Por padrão, a senha do usuário root do MySQL está em branco. Não é recomendado usar senha vazia para conta administrativa do banco de dados. Você precisa proteger seu servidor MySQL executando o seguinte script:

sudo mysql_secure_installation

Você será perguntado se deseja configurar o componente "VALIDATE PASSWORD" ou não. Este componente permite que os usuários configurem uma senha forte para credenciais de banco de dados. Se ativado, ele verificará automaticamente a força da senha e obrigará os usuários a definir apenas as senhas que sejam seguras o suficiente. É seguro deixá-lo desativado. No entanto, você deve usar uma senha forte e exclusiva para credenciais de banco de dados. Caso não queira habilitar este componente, basta pressionar qualquer tecla para pular a parte de validação de senha e continuar o restante das etapas.

Se sua resposta for Sim, você será solicitado a escolher o nível de validação de senha.

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

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 y

As validações de senha disponíveis são baixa, média e forte. Basta inserir o número apropriado (0 para baixa, 1 para média e 2 para senha forte) e pressionar a tecla ENTER.

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: 0

Agora, digite a senha do usuário root do MySQL. Lembre-se de que você deve usar a senha do usuário root do MySQL, dependendo da política de senha escolhida na etapa anterior. Se você não habilitou o plugin, basta usar qualquer senha forte e exclusiva de sua escolha.

Please set the password for root here.

New password:

Re-enter new password:

Estimated strength of the password: 100 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

Depois de inserir a senha duas vezes, você verá a força da senha (no nosso caso é 100). Se estiver tudo bem para você, pressione Y para continuar com a senha fornecida. Se não estiver satisfeito com o tamanho da senha, pressione qualquer outra tecla e defina uma senha forte. Estou bem com minha senha atual, então escolhi y.

Para o restante das perguntas, basta digitar y e pressionar ENTER. Isso removerá o usuário anônimo, impedirá o login do usuário root remotamente e removerá o banco de dados de teste.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
- Dropping test database...
Success.

- Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!

Feito! Definimos a senha do usuário root do MySQL.

2.2 Alterar método de autenticação para usuário root do MySQL

Por padrão, o usuário root do MySQL está configurado para autenticar usando o plugin "auth_socket" a partir do MySQL 5.7 e versões mais recentes no Ubuntu. Embora aumente a segurança, também complicará as coisas quando você acessar seu servidor de banco de dados usando qualquer programa externo, por exemplo phpMyAdmin. Para corrigir esse problema, você precisa alterar o método de autenticação de auth_socket para "caching_sha2_password" ou "mysql_native_password".

A partir da versão 8.0 do MySQL, o plugin de autenticação preferido e padrão é caching_sha2_password. O plugin de autenticação caching_sha2_password fornece criptografia de senha mais segura do que o plugin mysql_native_password.

Para alterar o plugin de autenticação, faça login no prompt do MySQL usando o comando:

sudo mysql

Execute o seguinte comando no prompt do mysql para encontrar o método de autenticação atual para todas as contas de usuário do mysql:

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

Exemplo de resultado:

+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user             | authentication_string                                                  | plugin                | host      |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$=s%UO"�o@>.@320vBX9Agb0kvpTpyiqIsh6XlD0UqNXLcl3KLzp46.Le. | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session    | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys        | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| root             |                                                                        | auth_socket           | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
5 rows in set (0.00 sec)

Como você pode ver, o usuário root do mysql usa o plugin auth_socket para autenticação.

Para alterar o plugin auth_socket para caching_sha2_password, execute o seguinte comando no prompt do mysql. Se você ativou o plug-in VALIDATE PASSWORD, certifique-se de ter usado uma senha forte com base nos requisitos da política atual. Um must forte consiste em pelo menos 8 caracteres, incluindo uma letra maiúscula, uma letra minúscula, um número e um caractere especial.

mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'Password123#@!';

Substitua "Password123#@!" por uma senha forte e exclusiva de sua escolha no comando acima.

Atualize as alterações usando o comando:

mysql> FLUSH PRIVILEGES;

Agora verifique se o plugin de autenticação atual foi alterado ou não usando o comando:

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

Exemplo de resultado:

Bom! Agora o usuário root do myql pode autenticar usando senha para acessar o shell do mysql.

Saia do prompt do mysql:

mysql> exit

Nota:

Embora o plugin caching_sha2_password forneça criptografia segura aprimorada, ele apresenta alguns problemas de compatibilidade com instalações existentes do MySQL. Para obter detalhes, consulte este link. Se você encontrar algum problema de compatibilidade, será necessário definir o plug-in "mysql_native_password" como plug-in de autenticação padrão.

Para mudar para o plugin mysql_native_password, execute o seguinte comando no prompt do mysql.

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

Atualize as alterações usando o comando:

mysql> FLUSH PRIVILEGES;

Agora verifique novamente se o método de autenticação foi alterado ou não usando o comando:

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

Exemplo de resultado:

Saia do prompt do mysql digitando o seguinte comando:

exit

3. Instale PHP no Ubuntu

Para instalar o PHP, execute:

sudo apt-get install php-fpm php-mysql

Após instalar o PHP, precisamos protegê-lo fazendo uma simples alteração no arquivo php.ini.

Para fazer isso, edite o arquivo php.ini usando seu editor favorito:

sudo vi /etc/php/7.4/fpm/php.ini

Encontre a seguinte linha:

;cgi.fix_pathinfo=1

Remova o comentário e altere seu valor de 1 para 0 (zero).

cgi.fix_pathinfo=0

Salve e feche o arquivo. Em seguida, reinicie o serviço PHP-FPM para que as alterações tenham efeito.

sudo systemctl restart php7.4-fpm

Verifique se o serviço PHP-FPM está funcionando ou não usando o comando:

sudo systemctl status php7.4-fpm

Exemplo de resultado:

● php7.4-fpm.service - The PHP 7.4 FastCGI Process Manager
     Loaded: loaded (/lib/systemd/system/php7.4-fpm.service; enabled; vendor preset: en>
     Active: active (running) since Fri 2020-05-29 10:40:45 UTC; 11s ago
       Docs: man:php-fpm7.4(8)
    Process: 10711 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/ph>
   Main PID: 10693 (php-fpm7.4)
     Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
      Tasks: 3 (limit: 2283)
     Memory: 7.0M
     CGroup: /system.slice/php7.4-fpm.service
             ├─10693 php-fpm: master process (/etc/php/7.4/fpm/php-fpm.conf)
             ├─10709 php-fpm: pool www
             └─10710 php-fpm: pool www

May 29 10:40:44 ubuntuserver systemd[1]: Starting The PHP 7.4 FastCGI Process Manager...
May 29 10:40:45 ubuntuserver systemd[1]: Started The PHP 7.4 FastCGI Process Manager.

3.1 Configure o Nginx para usar PHP-FPM

Precisamos configurar o Nginx para usar PHP-FPM.

Para fazer isso, edite o arquivo vhost (bloco de servidor) /etc/nginx/sites-available/default padrão do Nginx:

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

Encontre a seção Servidor e defina o FQDN ou endereço IP do seu servidor Ubuntu conforme mostrado abaixo. E também, verifique se você adicionou a linha index.php. Todas as alterações são mostradas em negrito.

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

[...]

root /var/www/html;

 # Add index.php to the list if you are using PHP
 index index.php index.html index.htm index.nginx-debian.html;

 server_name 192.168.225.52;
[...]

Aqui,

  • ouvir 80; -> ouvir ipv4.
  • ouvir [::]:80 default_server ; -> ouvir ipv6.
  • index.php -> Adicione isto se você usa PHP.
  • root /var/www/html; -> diretório raiz do documento Nginx.
  • server_name 192.168.225.52; -> Endereço IP do nosso servidor Ubuntu.

Em seguida, role um pouco para baixo e encontre a seção "#location ~ \.php$" .

Remova o comentário e modifique as seguintes linhas conforme mostrado abaixo.

location ~ \.php$ {
include snippets/fastcgi-php.conf;
#
# With php-fpm (or other unix sockets):
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
# With php-cgi (or other tcp sockets):
fastcgi_pass 127.0.0.1:9000;
}
deny access to .htaccess files, if Apache's document root
 # concurs with nginx's one
 #
 location ~ /\.ht {
 deny all;
 }
}

Consulte a captura de tela a seguir. As alterações são marcadas/sublinhadas em vermelho.

Salve e saia do arquivo.

Preste muita atenção ao modificar a diretiva fastcgi_pass dentro do bloco location ~ \.php$. Você deve mencionar o nome correto do arquivo com o que realmente está armazenado no diretório /var/run/php do seu servidor. Para verificar, execute:

$ ls /var/run/php/
php-fpm.sock php7.4-fpm.pid php7.4-fpm.sock

Como você pode ver, o nome do arquivo é php7.4-fpm.sock. Certifique-se de ter mencionado o nome correto nesta diretiva.

Verifique se há erros de sintaxe no arquivo de configuração do Nginx usando o comando:

sudo nginx -t

Exemplo de resultado:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Se você não encontrar nenhum erro, reinicie o serviço nginx para que as alterações tenham efeito.

Para fazer isso, execute:

sudo systemctl restart nginx

Agora, vamos criar um arquivo PHP de amostra para testar a configuração do PHP via navegador.

Para fazer isso, crie um arquivo chamado “info.php” na pasta raiz do documento Nginx.

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

Adicione as seguintes linhas:

<?php
phpinfo();
?>

Salve e saia do arquivo. Reinicie o serviço nginx para que as alterações tenham efeito.

sudo systemctl restart nginx

Em seguida, abra seu navegador e navegue até http://IP-address/info.php.

Você verá os detalhes do PHP.

Parabéns! PHP está funcionando!!

3.2 Instale módulos PHP

Para melhorar a funcionalidade do PHP, você pode instalar alguns módulos PHP adicionais.

Para listar os módulos PHP disponíveis, execute:

sudo apt-cache search php- | less

Exemplo de resultado:

Use as setas e para mover para cima e para baixo entre o resultado. Para sair, digite q.

Para encontrar os detalhes de qualquer módulo php específico, por exemplo php-gd, execute:

sudo apt-cache show php-gd

Para instalar um módulo php, execute:

sudo apt-get install php-gd

Para instalar todos os módulos (embora não seja necessário), execute:

sudo apt-get install php*

Não se esqueça de reiniciar o serviço Nginx após instalar qualquer módulo php.

Parabéns! Configuramos com sucesso a pilha LEMP no servidor Ubuntu 20.04 LTS. Comece a implantar sites e aplicativos web em sua nova pilha web LEMP.

Leia a seguir:

  • Instale o phpMyAdmin com pilha LEMP no Ubuntu 20.04 LTS

Artigos relacionados