Tutorial

Como Instalar e Configurar um LEMP Stack usando Coleções de Software no CentOS 7

Published on December 12, 2019
Português
Como Instalar e Configurar um LEMP Stack usando Coleções de Software no CentOS 7

O autor selecionou a Fundação do Software Apache para receber uma doação de $100 como parte do programa Write for DOnations.

Introdução

Uma pilha de software LEMP é um grupo de softwares de código aberto que são normalmente instalados juntos para permitir que um servidor hospede sites dinâmicos e aplicativos Web. Este termo é, na verdade, uma sigla que representa o sistema operacional Linux, com o servidor Web ENginx (que substitui o componente Apache de uma pilha LAMP). Os dados do site são armazenados em uma base de dados MySQL (usando MariaDB) e o conteúdo dinâmico é processado pelo PHP.

Os componentes de pilha LEMP são, por vezes, instalados usando o repositório EPEL do CentOS 7. No entanto, este repositório contém pacotes desatualizados. Por exemplo, você não pode instalar nenhuma versão do PHP maior que a 5.4.16 do EPEL, embora este lançamento não tenha sido suportado por muito tempo. Para obter as versões mais recentes do software, é recomendado que você use Coleções de Software, também conhecidas como SCLs. Os SCLs são coleções de recursos do desenvolvedor fornecidos pela RedHat que permitem que você use várias versões do software no mesmo sistema sem afetar pacotes previamente instalados.

Neste guia, você irá instalar uma pilha LEMP em um servidor do CentOS 7. O sistema operacional CentOS cuida do componente Linux. Você irá instalar o resto dos componentes usando o repositório de Coleções do Software e, em seguida, configurá-los para servir uma página Web simples.

Pré-requisitos

Antes de começar este tutorial, você deve ter o servidor CentOS 7 configurado seguindo o guia de configuração inicial do servidor CentOS 7, incluindo um usuário sudo que não seja root.

Passo 1 — Ativando o Repositório de Coleções de Software

Para obter acesso às SCLs para o CentOS, instalar o arquivo de liberação de Coleções de Software CentOS Linux:

  1. sudo yum install centos-release-scl

Veja a lista de pacotes SCL disponíveis usando o comando a seguir:

  1. yum --disablerepo='*' --enablerepo='centos-sclo-rh' --enablerepo='centos-sclo-sclo' list available

Para evitar quaisquer conflitos de sistema, os pacotes SCL são instalados no diretório /opt/rh. Isso permite que você, por exemplo, instale o Python 3.5 em uma máquina CentOS 7 sem remover ou interferir com o Python 2.7.

Todos os arquivos de configuração para os pacotes SCL são armazenados na pasta correspondente dentro do diretório /etc/opt/rh/. Os pacotes SCL fornecem scripts de shell que definem as variáveis de ambiente necessárias para usar as aplicações incluídas, como PATH, LD_LIBRARY_PATH, e MANPATH. Estes scripts são armazenados no sistema de arquivos como /opt/rh/package-name/enable.

Agora, você está pronto para começar a instalar os pacotes apresentados neste guia.

Passo 2 — Instalando o Servidor Web Nginx

Para mostrar páginas Web aos visitantes, vamos usar Nginx, um moderno e eficiente servidor Web.

Instale Nginx usando o comando yum a seguir. Certifique-se de substituir o valor em destaque pela versão do Nginx que você quer instalar; a versão mais recente terá o número mais alto no nome do pacote (112 no momento em que este texto está sendo escrito):

  1. sudo yum install rh-nginx112

Assim que terminar a instalação, inicie o serviço Nginx:

  1. sudo systemctl start rh-nginx112-nginx

Certifique-se de que o Nginx está em execução através do comando systemctl status:

  1. sudo systemctl status rh-nginx112-nginx
Output
● rh-nginx112-nginx.service - The nginx HTTP and reverse proxy server Loaded: loaded (/usr/lib/systemd/system/rh-nginx112-nginx.service; disabled; vendor preset: disabled) Active: active (running) since Fri 2018-03-19 15:15:43 UTC; 1min 17s ago Main PID: 10556 (nginx) CGroup: /system.slice/rh-nginx112-nginx.service ├─10556 nginx: master process /opt/rh/rh-nginx112/root/usr/sbin/nginx ├─10557 nginx: worker process └─10558 nginx: worker process Mar 19 15:15:43 lemp-centos-222 systemd[1]: Starting The nginx HTTP and reverse proxy server... Mar 19 15:15:43 lemp-centos-222 nginx-scl-helper[10541]: nginx: the configuration file /etc/opt/rh/rh-nginx... ok Mar 19 15:15:43 lemp-centos-222 nginx-scl-helper[10541]: nginx: configuration file /etc/opt/rh/rh-nginx112/...ful Mar 19 15:15:43 lemp-centos-222 systemd[1]: Started The nginx HTTP and reverse proxy server. Hint: Some lines were ellipsized, use -l to show in full.

Neste ponto, seu servidor pode estar vulnerável a um acesso não autorizado por usuários não autorizados. Para consertar isso, configure um firewall usando firewalld. Você pode precisar instalar primeiro o firewalld, o que pode ser feito com o comando a seguir:

  1. sudo yum install firewalld

Em seguida, inicie o serviço firewalld:

  1. sudo systemctl start firewalld

Então, adicione algumas regras no firewall para permitir o acesso SSH no seu servidor e as conexões HTTP e HTTPS no Nginx:

  1. sudo firewall-cmd --permanent --add-service=ssh
  2. sudo firewall-cmd --zone=public --permanent --add-service=http
  3. sudo firewall-cmd --zone=public --permanent --add-service=https

Recarregue o firewall para implementar as novas regras de firewall:

  1. sudo firewall-cmd --reload

Saiba mais sobre o firewalld em Como Configurar um Firewall Usando o FirewallD no CentOS 7.

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, você pode encontrá-lo digitando o seguinte no seu terminal:

  1. curl -4 icanhazip.com

Digite o endereço IP obtido como resultado na barra de endereço do seu navegador, e você verá a página padrão de destino do Nginx:

http://server_domain_or_IP

Nginx default page

Se você ver essa página, você instalou o Nginx com sucesso. Antes de continuar, habilite o Nginx para iniciar no boot usando o comando a seguir:

  1. sudo systemctl enable rh-nginx112-nginx

O servidor Nginx agora está instalado e você pode seguir para a instalação do software de banco de dados MariaDB.

Passo 3 — Instalando MariaDB para Gerenciar os Dados do Site

Agora que temos um servidor Web, é hora de instalar o MariaDB, um substituto para o MySQL, para armazenar e gerenciar os dados para seu site.

Instale o MariaDB com o comando a seguir. Novamente, substitua o valor em destaque com o número de versão que você quer instalar, o número mais alto sendo a versão mais recente disponível (102, no momento em que o texto foi escrito):

  1. sudo yum install rh-mariadb102

Quando a instalação for concluída, inicie o serviço MariaDB com o comando a seguir:

  1. sudo systemctl start rh-mariadb102-mariadb

Com isso, o MariaDB está instalado e funcionando. No entanto, a configuração dele ainda não está completa.

Para proteger a instalação, o MariaDB vem instalado com um script de segurança que te notifica para modificar algumas configurações padrão inseguras. Execute o script digitando:

  1. source /opt/rh/rh-mariadb102/enable
  2. mysql_secure_installation

O aviso irá pedir a sua senha root atual. Uma vez que você acabou de instalar o MySQL, você provavelmente não terá um, então deixe ele em branco pressionando ENTER. Então a notificação irá perguntar se você quer definir uma senha root. Vá em frente e digite Y e siga as instruções:

. . .
Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorization.

Set root password? [Y/n] Y
New password: password
Re-enter new password: password
Password updated successfully!
Reloading privilege tables..
 ... Success!
. . .

Para o resto das perguntas, pressione a tecla ENTER em cada uma das notificações para aceitar os valores padrão. Isso irá 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 MariaDB implemente imediatamente as alterações que fizemos.

A última coisa a fazer é permitir que o MariaDB comece no boot. Use o comando a seguir para fazer isso:

  1. sudo systemctl enable rh-mariadb102-mariadb

Neste ponto, seu sistema de banco de dados está agora configurado e você pode seguir para a configuração do PHP no seu servidor.

Passo 4 — Instalando e Configurando o PHP para Processamento

Agora você tem o Nginx instalado para servir suas páginas e o MariaDB instalado para armazenar e gerenciar seus dados. No entanto, você ainda não tem nada instalado que possa gerar conteúdo dinâmico. É aqui que o PHP entra.

Uma vez que o Nginx não contém o processamento nativo do PHP como outros servidores Web, você precisará instalar php-fpm, que significa “gerenciador de processos fastCGI”. Mais tarde, você irá configurar o Nginx para passar pedidos ao PHP para este software para processamento.

Instale este módulo e pegue também um pacote auxiliar que irá permitir o PHP se comunicar com seu backend do banco de dados. A instalação irá puxar os arquivos principais e necessários do PHP. Faça isso digitando:

  1. sudo yum install rh-php71-php-fpm rh-php71-php-mysqlnd

Seu componente PHP agora está instalado, mas há uma ligeira alteração de configuração que você deve fazer para reforçar a segurança da sua instalação.

Abra o arquivo principal de configuração php.ini com privilégios root:

  1. sudo vi /etc/opt/rh/rh-php71/php.ini

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

Esta é uma configuração extremamente insegura porque ela diz ao PHP para tentar executar o arquivo mais próximo que ele puder descobrir se o arquivo PHP solicitado não puder ser encontrado. Isso basicamente permitiria que os usuários criassem pedidos PHP de uma maneira que lhes permitissem executar scripts que eles não deveriam ser autorizados a executar.

Altere ambas essas condições descomentando a linha e definindo-a em “0” dessa forma:

/etc/opt/rh/rh-php<^>71<^>/php.ini
cgi.fix_pathinfo=0

Salve e feche o arquivo quando você terminar (pressione ESC, digite :wq e então pressione Enter).

A seguir, abra o arquivo de configuração php-fpm www.conf:

  1. sudo vi /etc/opt/rh/rh-php71/php-fpm.d/www.conf

Por padrão, este arquivo está configurado para funcionar com o servidor Apache. Uma vez que seu servidor tem o Nginx instalado nele, encontre as linhas que definem o user e group e que alteram os seus valores de “apache” para “nginx”:

/etc/opt/rh/rh-php<^>71<^>/php-fpm.d/www.conf
user = nginx
group = nginx

Então, salve e feche o arquivo.

Em seguida, inicie seu processador PHP digitando:

  1. sudo systemctl start rh-php71-php-fpm

Então habilite o php-fpm para iniciar no boot:

  1. sudo systemctl enable rh-php71-php-fpm

Com isso, você instalou com sucesso o PHP no seu servidor. No entanto, ele ainda deve ser configurado para funcionar com outros softwares que você instalou para permitir que seu servidor sirva corretamente o conteúdo do seu site.

Passo 5 — Configurando o Nginx para Usar o Processo PHP

Neste ponto, você tem todos os componentes necessários para uma pilha LEMP instalados. A única alteração de configuração que você ainda precisa fazer é dizer ao Nginx para usar seu processador PHP para conteúdo dinâmico.

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

  1. sudo vi /etc/opt/rh/rh-nginx112/nginx/nginx.conf

Descomente o bloco location ~.php$ (o segmento do arquivo que lida com pedidos PHP, encontrados no bloco server) e seu conteúdo removendo as cerquilhas (#) do começo de cada linha. Você também precisa atualizar a opção fastcgi_param para SCRIPT FILENAME $document_root$fastcgi_script_name. Isso informa o PHP do local da root do documento onde ele pode encontrar arquivos para processar.

Após fazer as alterações necessárias, o bloco server estará assim:

/etc/nginx/sites-available/default
...
server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  _;
    root         /opt/rh/rh-nginx112/root/usr/share/nginx/html;

    # Load configuration files for the default server block.
    include      /etc/opt/rh/rh-nginx112/nginx/default.d/*.conf;

    location / {
    }

    error_page 404 /404.html;
    location = /40x.html {
    }

    error_page 500 502 503 504  /50x.html;
    location = /50x.html {
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root           html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}
...

Quando você fizer as alterações, você pode salvar o arquivo e sair do editor.

Em seguida, teste seu arquivo de configuração à procura de erros de sintaxe executando os seguintes comandos:

  1. source /opt/rh/rh-nginx112/enable
  2. sudo nginx -t

Se algum erro for reportado, volte e cheque novamente seu arquivo antes de continuar.

Assim que seu arquivo de configuração estiver válido, recarregue o Nginx para implementar as alterações que você fez:

  1. sudo systemctl reload rh-nginx112-nginx

Agora que o Nginx, o PHP e o MariaDB foram instalados e configurados, tudo o que resta fazer é confirmar que a configuração da pilha LEMP pode servir corretamente os visitantes do seu site.

Passo 6 — Criando um Arquivo PHP para Testar a Configuração

Sua pilha LEMP está agora completamente configurada e você pode testá-la para validar que o Nginx é capaz de entregar corretamente arquivos .php para seu processador PHP. Isso é feito criando um arquivo PHP de teste em nossa root do documento.

Abra um novo arquivo chamado info.php dentro da root do documento:

  1. sudo vi /opt/rh/rh-nginx112/root/usr/share/nginx/html/info.php

Adicione a seguinte linha ao novo arquivo. Este é um código PHP válido que irá retornar informações sobre seu servidor:

/opt/rh/rh-nginx<^>112<^>/root/usr/share/nginx/html/info.php
<?php phpinfo(); ?>

Quando você terminar, salve e feche o arquivo. Então, 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://server_domain_or_IP/info.php

Você verá uma página Web que foi gerada pelo PHP com informações sobre seu servidor:

PHP page info

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 regenerar este arquivo se você precisar dele mais tarde.

Remova o arquivo digitando:

  1. sudo rm /opt/rh/rh-nginx112/root/usr/share/nginx/html/info.php

Com isso, você confirmou que todos os componentes da sua pilha LEMP estão instalados e configurados corretamente no seu servidor.

Conclusão

Agora você tem uma pilha LEMP totalmente configurada no seu servidor CentOS 7. Isso dá a você uma fundação muito flexível para fornecer conteúdo Web aos seus visitantes.

Os SCLs também são usados para instalar várias versões de software e mudar entre elas. Você pode ver a lista de todas as coleções instaladas no sistema executando:

  1. scl --list

Se estiver interessado, você pode encontrar mais informações sobre Coleções de Software no site oficial.

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about us


About the authors

Default avatar

Manager, Developer Education

Technical Writer @ DigitalOcean


Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment


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!

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more
DigitalOcean Cloud Control Panel