Tutorial

Como instalar o Linux, Nginx, MySQL, pilha PHP (LEMP) no CentOS 8

NginxCentOSPHPLEMPCentOS 8

Introdução

A pilha de software LEMP é um grupo de software que pode ser usado para atender páginas e aplicativos Web dinâmicos escritos em PHP. O nome “LEMP” é uma sigla que descreve um sistema operacional do Linux com um servidor Web Nginx (pronunciado como “Engine-X”). Os dados do backend são armazenados no banco de dados MariaDB e o processamento dinâmico é tratado pelo PHP.

A camada de banco de dados em uma pilha LEMP é normalmente um servidor de banco de dados do MySQL, mas antes da versão do CentOS 8, o MySQL não estava disponível a partir dos repositórios padrão do CentOS. Por isso, o MariaDB, uma bifurcação comunitária do MySQL, tornou-se uma alternativa amplamente aceita ao MySQL como o sistema padrão de banco de dados para as pilhas LEMP em máquinas CentOS. O MariaDB funciona como uma substituição drop-in para o servidor original do MySQL, o que na prática significa que você pode mudar para o MariaDB sem precisar fazer nenhuma alteração ou programar alterações no seu aplicativo.

Neste guia, você irá instalar uma pilha LEMP em um servidor do CentOS 8. Embora o MySQL esteja disponível a partir dos repositórios padrão no CentOS 8, este guia irá guiá-lo pelo processo de configuração de uma pilha LEMP com o MariaDB como o sistema de gerenciamento de banco de dados.

Pré-requisitos

Para seguir este guia, você precisará de acesso a um servidor CentOS 8 como um usuário não raiz com privilégios sudo, e um firewall ativo instalado no seu servidor. Para configurar isso, siga nosso guia Configuração inicial de servidor para o CentOS 8.

Passo 1 — Como instalar o servidor Web Nginx

Para mostrar páginas Web aos visitantes de nosso site, vamos usar o Nginx, um servidor Web de alto desempenho. Usaremos o gerenciador de pacotes dnf, que é o novo gerenciador de pacotes padrão no CentOS 8, para instalar esse software.

Instale o pacote nginx com:

  • sudo dnf install nginx

Quando solicitado, digite y para confirmar se deseja instalar o nginx.

Após a instalação terminar, execute o seguinte comando para habilitar e iniciar o servidor:

  • sudo systemctl start nginx

Caso tenha habilitado o firewall firewalld, conforme nosso guia de configuração inicial do servidor, será necessário permitir conexões ao Nginx. O comando a seguir irá habilitar permanentemente conexões HTTP, que são executadas na porta 80 por padrão:

  • sudo firewall-cmd --permanent --add-service=http

Para verificar se a mudança foi aplicada, execute:

  • sudo firewall-cmd --permanent --list-all

Você verá um resultado como esse:

Output
public target: default icmp-block-inversion: no interfaces: sources: services: cockpit dhcpv6-client http ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:

Será necessário recarregar a configuração do firewall para que as alterações surtam efeito:

  • sudo firewall-cmd --reload

Com a nova regra de firewall adicionada, teste se o servidor está em funcionamento acessando o endereço IP público do seu servidor ou nome de domínio do seu navegador Web.

Nota: caso esteja usando a DigitalOcean como provedor de hospedagem DNS, verifique nossos docs de produto para instruções detalhadas sobre como configurar um novo nome de domínio e apontá-lo para seu servidor.

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:

Configuração padrão do Nginx do CentOS 8

Caso veja essa página, então seu servidor Web está agora corretamente instalado.

Passo 2 — Instalando o MariaDB

Agora que tem um servidor Web em funcionamento, é necessário instalar um sistema de banco de dados capaz de armazenar e gerenciar os dados do seu site. Agora, vamos instalar o MariaDB, uma bifurcação do servidor MySQL original do Oracle desenvolvida pela comunidade.

Para instalar esse software, execute:

  • sudo dnf install mariadb-server

Quando a instalação terminar, habilite e inicie o servidor MariaDB com:

  • sudo systemctl start mariadb

Para melhorar a segurança do seu servidor banco de dados, é recomendável que execute um script de segurança que vem pré-instalado com o MariaDB. Esse script removerá algumas configurações padrão inseguras e irá bloquear o acesso ao seu sistema de banco de dados. Inicie o script interativo executando:

  • sudo mysql_secure_installation

Esse script levará você através de uma série de prompts onde é possível fazer algumas alterações na sua instalação do MariaDB. O primeiro prompt pedirá que digite a senha root do banco de dados atual. Isso não deve ser confundido com o usuário root do sistema. O usuário root do banco de dados é um usuário administrativo com privilégios totais no sistema de banco de dados. Como você instalou o MariaDB e ainda não fez nenhuma alteração de configuração, essa senha estará em branco. Dessa forma, pressione apenas ENTER no prompt.

O próximo prompt pergunta a você se deseja configurar uma senha root do banco de dados. Como o MariaDB usa um método especial de autenticação para o usuário root que normalmente é mais seguro do que usar uma senha, você não precisa definir isso agora. Digite N e então pressione ENTER.

A partir daí, pressione Y e então ENTER para aceitar as configurações padrão para todas as perguntas subsequentes. Isso irá remover alguns usuários anônimos e o banco de dados teste, desativará o login remoto ao root, e carregará essas novas regras para que o servidor respeite imediatamente as alterações que você fez.

Quando terminar, faça login no console do MariaDB digitando:

  • sudo mysql

Isso criará uma conexão ao servidor MariaDB como o usuário administrativo do banco de dados root, que fica inferido pelo uso de sudo ao executar esse comando. Você deve ver um resultado como este:

Output
Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 9 Server version: 10.3.17-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>

Note que você não precisou fornecer uma senha para se conectar como o usuário root. Isso funciona, já que o método de autenticação padrão para o usuário administrativo do MariaDB é unix_socket, ao invés de password (senha). Embora isso possa parecer num primeiro momento um problema para a segurança, tal medida torna o servidor banco de dados mais seguro, já que os únicos usuários autorizados a fazer login como usuário root do MariaDB são os usuários do sistema com privilégios sudo que se conectam pelo console ou através de um aplicativo executando com os mesmos privilégios. Em termos práticos, isso significa que você não será capaz de usar o usuário root do banco de dados administrativo para se conectar ao seu aplicativo PHP.

Para o aumento da segurança, é melhor ter contas de usuário dedicadas com privilégios menos expansivos configuradas para cada banco de dados , especialmente caso esteja planejando ter vários bancos de dados hospedados no seu servidor. Para demonstrar essa configuração, vamos criar um banco de dados chamado example_database e um usuário chamado example_user, mas é possível substituir esses nomes por valores diferentes.

Para criar um novo banco de dados, execute o seguinte comando do seu console do MariaDB:

  • CREATE DATABASE example_database;

Agora, crie um novo usuário e conceda-lhe privilégios completos no banco de dados personalizado que acabou de criar. O comando a seguir define a senha do usuário como password, mas você deve substituir esse valor por uma senha segura da sua própria escolha:

  • GRANT ALL ON example_database.* TO 'example_user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

Isso dará ao usuário example_user privilégios totais sobre o banco de dados example\_database, ao mesmo tempo que previne esse usuário de criar ou modificar outros bancos de dados no seu servidor.

Descarregue os privilégios para garantir que eles estão salvos e disponíveis na sessão atual:

  • FLUSH PRIVILEGES;

Em seguida, saia do shell do MariaDB:

  • exit

Você pode testar se o novo usuário tem as permissões adequadas fazendo login no console MariaDB novamente, desta vez usando as credenciais do usuário personalizado:

  • mysql -u example_user -p

Note a flag -p neste comando, que irá solicitar a senha que você escolheu ao criar o usuário example_user. Após fazer login no console MariaDB, confirme se tem acesso ao banco de dados example\_database:

  • SHOW DATABASES;

Isso gerará o seguinte resultado:

Output
+--------------------+ | Database | +--------------------+ | example_database | | information_schema | +--------------------+ 2 rows in set (0.000 sec)

Para sair do shell do MariaDB, digite:

  • exit

Neste ponto, seu sistema de banco de dados está configurado e você pode seguir em frente para a instalação do PHP, o componente final da pilha LEMP.

Passo 3 — Instalando o PHP-FPM

Você tem o Nginx instalado para atender seu conteúdo e o MariaDB instalado para armazenar e gerenciar seus dados. Agora, instale o PHP para processar o código e gerar conteúdo dinâmico para o servidor Web.

Embora o Apache anexe o interpretador PHP em cada pedido, o Nginx exige um programa externo para lidar com o processamento PHP e agir como ponte entre o próprio interpretador PHP e o servidor Web. Isso permite um desempenho global melhor na maioria dos sites baseados em PHP, mas exige configuração adicional. Será necessário instalar o php-fpm, que significa “Gerenciador de processos PHP fastCGI”, e dizer ao Nginx para passar solicitações PHP a esse software para o processamento. Além disso, precisará do php-mysqlnd, um módulo PHP que permite o PHP se comunicar com os bancos de dados baseados no MySQL. Os pacotes do PHP serão instalados automaticamente como dependências.

Para instalar os pacotes php-fpm e php-mysql, execute:

  • sudo dnf install php-fpm php-mysqlnd

Quando a instalação terminar, você precisará editar o arquivo /etc/php-fpm.d/www.conf para ajustar algumas configurações.

O editor de texto padrão que vem com o CentOS 8 é o vi. O vi é um editor de texto extremamente poderoso, mas pode ser de difícil uso para usuários com pouca experiência com ele. Talvez queira instalar um editor mais amigável para o usuário, como o nano, para facilitar a edição de arquivos de configuração no seu servidor CentOS 8:

  • sudo dnf install nano

Agora, abra o arquivo de configuração /etc/php-fpm.d/www.conf usando o nano ou o editor de sua escolha:

  • sudo nano /etc/php-fpm.d/www.conf

Agora, procure pelas diretrizes user e group. Se estiver usando o nano, aperte CTRL+W para pesquisar por esses termos dentro do arquivo aberto.

/etc/php-fpm.d/www.conf
…
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = apache
; RPM: Keep a group allowed to write in log dir.
group = apache

Você notará que tanta variável user quanto a group estão definidas como apache. Precisamos alterar isso para nginx:

/etc/php-fpm.d/www.conf
…
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx

Salve e feche o arquivo quando terminar de editar. Caso esteja usando o nano, faça isso pressionando CTRL + X, então Y e ENTER.

Para habilitar e iniciar o serviço php-fpm, execute:

  • sudo systemctl start php-fpm

Por fim, reinicie o servidor Web Nginx para que ele carregue os arquivos de configuração criados pela instalação do php-fpm:

  • sudo systemctl restart nginx

Seu servidor Web agora está totalmente configurado. No próximo passo, vamos criar um script teste PHP para garantir que tudo funciona como esperado.

Passo 4 — Testando o PHP com o Nginx

No CentOS 8, a instalação padrão do php-fpm cria automaticamente arquivos de configuração que permitirão que seu servidor Web Nginx trabalhe com arquivos .php na raiz padrão de documentos, localizada em /usr/share/nginx/html. Você não precisará fazer nenhuma alteração na configuração do Nginx para que o PHP funcione corretamente dentro do seu servidor Web.

O único ajuste que vamos fazer é alterar as configurações de permissão padrão na sua pasta raiz de documentos do Nginx. Desta forma, você será capaz de criar e modificar arquivos naquele diretório com seu usuário regular de sistema, sem a necessidade de prefixar cada comando com sudo.

O comando a seguir alterará a propriedade da root de documentos padrão do Nginx para um usuário e grupo chamados sammy, então certifique-se de substituir o nome de usuário e grupo em destaque neste comando para refletir o nome de usuário e grupo do seu sistema.

  • sudo chown -R sammy.sammy /usr/share/nginx/html/

Agora, vamos criar uma página teste do PHP para garantir que o servidor Web funciona como esperado.

Crie um novo arquivo PHP chamado info.php no diretório /usr/share/nginx/html:

  • nano /usr/share/nginx/html/info.php

O código PHP a seguir exibirá informações sobre o ambiente PHP atual em funcionamento no servidor:

/usr/share/nginx/html/info.php
<?php

phpinfo();

Quando você terminar, salve e feche o arquivo.

Agora, podemos testar se nosso servidor Web consegue exibir corretamente o conteúdo gerado por um script PHP. Vá até seu navegador e acesse o nome do host ou endereço IP do seu servidor, seguido por /info.php:

http://server_host_or_IP/info.php

Você verá uma página similar a essa:

Informações PHP padrão do CentOS 8

Após verificar as informações relevantes sobre seu servidor PHP através dessa página, é melhor remover o arquivo que você criou, já que ela contém informações sensíveis sobre seu ambiente PHP e seu servidor CentOS. Use o rm para remover esse arquivo:

  • rm /usr/share/nginx/html/info.php

Você sempre pode regenerar este arquivo se você precisar dele mais tarde. Em seguida, vamos testar a conexão do banco de dados pelo lado do PHP.

Passo 5 — Testando a conexão do banco de dados pelo PHP (Opcional)

Caso queira testar se o PHP é capaz de se conectar ao MariaDB e executar consultas de banco de dados, crie uma tabela de teste com dados fictícios e faça uma consulta pelo conteúdo de um script PHP.

Primeiro, conecte-se ao console do MariaDB com o usuário do banco de dados criado no Passo 2 deste guia:

  • mysql -u example_user -p

Crie uma tabela chamada todo_list. A partir do console do MariaDB, execute a seguinte instrução:

CREATE TABLE example_database.todo_list (
    item_id INT AUTO_INCREMENT,
    content VARCHAR(255),
    PRIMARY KEY(item_id)
);

Agora, insira algumas linhas de conteúdo na tabela de teste. Talvez queira repetir o próximo comando algumas vezes, usando valores diferentes:

  • INSERT INTO example_database.todo_list (content) VALUES ("My first important item");

Para confirmar que os dados foram salvos com sucesso na sua tabela, execute:

  • SELECT * FROM example_database.todo_list;

Você verá o seguinte resultado:

Output
+---------+--------------------------+ | item_id | content | +---------+--------------------------+ | 1 | My first important item | | 2 | My second important item | | 3 | My third important item | | 4 | and this one more thing | +---------+--------------------------+ 4 rows in set (0.000 sec)

Após confirmar que tem dados válidos na sua tabela de teste, saia do console do MariaDB:

  • exit

Agora, crie o script PHP que se conectará ao MariaDB e irá consultar buscando seu conteúdo. Crie um novo arquivo do PHP no seu diretório raiz personalizado usando seu editor preferido. Usaremos o nano para isso:

  • nano /usr/share/nginx/html/todo_list.php

Adicione o conteúdo a seguir ao seu script PHP:

/usr/share/nginx/html/todo_list.php
<?php
$user = "example_user";
$password = "password";
$database = "example_database";
$table = "todo_list";

try {
  $db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
  echo "<h2>TODO</h2><ol>";
  foreach($db->query("SELECT content FROM $table") as $row) {
    echo "<li>" . $row['content'] . "</li>";
  }
  echo "</ol>";
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}

Salve e feche o arquivo quando terminar de editar.

Agora, você pode acessar essa página no seu navegador Web visitando o nome de host ou endereço IP público do seu servidor, seguido de /todo_list.php:

http://server_host_or_IP/todo_list.php

Você deve ver uma página como essa, mostrando o conteúdo que você inseriu na sua tabela de teste:

Lista todo exemplo PHP

Isso significa que seu ambiente PHP está pronto para se conectar e interagir com seu servidor MariaDB.

Conclusão

Neste guia, você construiu uma fundação flexível para atender sites e aplicativos PHP aos seus visitantes, usando o Nginx como servidor Web. Você configurou o Nginx para lidar com solicitações PHP através do php-fpm, e também configurou um banco de dados MariaDB para armazenar os dados do seu site.

0 Comments

Creative Commons License