O autor selecionou a Fundação do Software Apache para receber uma doação de $100 como parte do programa Write for DOnations.
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.
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.
Para obter acesso às SCLs para o CentOS, instalar o arquivo de liberação de Coleções de Software CentOS Linux:
- sudo yum install centos-release-scl
Veja a lista de pacotes SCL disponíveis usando o comando a seguir:
- 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.
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):
- sudo yum install rh-nginx112
Assim que terminar a instalação, inicie o serviço Nginx:
- sudo systemctl start rh-nginx112-nginx
Certifique-se de que o Nginx está em execução através do comando systemctl status
:
- 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:
- sudo yum install firewalld
Em seguida, inicie o serviço firewalld:
- 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:
- sudo firewall-cmd --permanent --add-service=ssh
- sudo firewall-cmd --zone=public --permanent --add-service=http
- sudo firewall-cmd --zone=public --permanent --add-service=https
Recarregue o firewall para implementar as novas regras de firewall:
- 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:
- 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
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:
- 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.
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):
- sudo yum install rh-mariadb102
Quando a instalação for concluída, inicie o serviço MariaDB com o comando a seguir:
- 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:
- source /opt/rh/rh-mariadb102/enable
- 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:
- 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.
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:
- 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:
- 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:
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
:
- 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”:
user = nginx
group = nginx
Então, salve e feche o arquivo.
Em seguida, inicie seu processador PHP digitando:
- sudo systemctl start rh-php71-php-fpm
Então habilite o php-fpm para iniciar no boot:
- 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.
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:
- 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:
...
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:
- source /opt/rh/rh-nginx112/enable
- 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:
- 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.
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:
- 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:
<?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:
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:
- 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.
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:
- 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.
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!