Instalar um LAMP com boa performance

Este artigo demonstra como realizar a instalação de um servidor web LAMP (Linux, Apache, MySQL e PHP), incluindo suas configurações além de questões relacionadas com a performance desse ambiente. A distribuição utilizada será o Ubuntu Server 20.04.1 LTS.

[ Hits: 9.314 ]

Por: Diego Mendes Rodrigues em 02/09/2020 | Blog: https://www.linkedin.com/in/diegomendesrodrigues/


Melhorar a Performance do seu Servidor Apache



De acordo com a pesquisa mais recente da Netcraft, o Apache continua sendo o servidor web mais utilizado atualmente, seguido pelo Nginx e pelo IIS da Microsoft. Desta forma, caso você seja um administrador de sistemas encarregado de gerenciar servidores web, o ideal é que consiga deixá-los operando com as necessidades de seus clientes. Neste material irei discutir algumas dicas de como certificar-se que o Apache seja executado de forma suave sendo capaz de lidar com o número de solicitações que você deseja.

Sempre mantenha seu Apache atualizado para a última versão

Eu não deveria dizer isso, mas, estar com a última versão do Apache instalado é provavelmente a primeira ação que você deve considerar, e executar!

Embora as últimas versões possam não estar disponíveis nos pacotes atuais no repositório de sua distribuição (Ubuntu, Debian, CentOS etc), elas estão publicadas instalação estão disponíveis nesse link: https://httpd.apache.org/docs/2.4/install.html. Lembre-se de realizar o backup de suas configurações atuais que estão em /sites* /virtualhosts*, ou em qualquer outro local que você tenha armazenado.

Para verificar a versão que você possui instalada, utilize:

apache2 --v
Você pode atualizar seu Apache de forma segura, utilizando o comando apt.

sudo apt upgrade apache2

Caso você esteja utilizando o Kernel em uma versão anterior a 5.4, considere atualizar agora

A versão 5.4 é extremamente segura, com uma excelente performance para as redes de computadores e transferência de arquivos, que são muito utilizadas nos servidores web, habilitando também o Apache a realizar a entrega de conteúdos estáticos (HTML, CSS, JavaScript, TXT etc) de forma rápida, utilizando muito pouco do CPU do servidor.

Para verificar a versão do seu Kernel, utilize o comando uname.

uname -r
Depois compare com a versão mais atual, no site https://www.kernel.org. Quando escrevi esse artigo, a versão mais atual estável era a 5.8.5.

Embora a atualização do Kernel não seja um processo destinado aos iniciantes, essa tarefa é muito interessante e faz com que você aprenda mais sobre a tecnologia envolvida no Linux. Busque na internet como atualizar e teste primeiro em uma máquina virtual, ao invés de realizar a ação direto em um de seus servidores.

Aloque a memória RAM de forma sábia para o seu Apache

Provavelmente o item de hardware mais crítico que deva ser levado em consideração, diz respeito a quantidade de memória RAM alocada para cada processo do Apache. Embora você não possa controlar esse alocamento diretamente, pode restringir o número de processos filhos através da diretiva MaxRequestWorkers (conhecida como MaxClients no Apache 2.2), que irá limitar a quantidade de memória RAM utilizada pelo Apache. Você pode definir esse valor por hosts, ou por hosts virtuais.

Para realizar essa configuração você deve levar em consideração a quantidade de memória RAM utilizada pelo Apache, então multiplicar esse valor pelo número definido em MaxRequestWorkers, sendo então essa a memória RAM que será alocada pelos processos do Apache. Lembre de sempre disponibilizar a memória do Apache de acordo com a memória física do seu hardware, sem utilizar a memória swap.

No exemplo abaixo, irei restringir o número de clientes simultâneos para 30. Caso um número maior tente realizar a conexão com o host, irão encontrar uma experiência com um delay (atraso), ou uma falha de conexão, que pode ser resolvida atualizando a página no navegador. Embora esse valor possa ser considerado indesejável em muitos servidores web, lembre-se de sempre realizar uma configuração condizente com seu hardware e suas necessidades.

A configuração exposta abaixo deve ser realizada no arquivo /etc/apache2/apache2.conf em um servidor Ubuntu 20.04 LTS.

<IfModule mpm_event_module>
    StartServers             3
    MinSpareThreads          25
    MaxSpareThreads          75
    ThreadLimit              64
    ThreadsPerChild          25
    MaxRequestWorkers        30
    MaxConnectionsPerChild   1000
</IfModule>

Caso queira conhecer mais configurações do Apache, visite a página oficial da documentação:

Defina o Multi-Processing Module (MPM) que funciona melhor para o seu caso

Na prática, MPMs estendem as funcionalidades modulares do Apache, habilitando ao administrador de sistemas em decidir como configurar as conexões do servidor web com a máquina, aceitando as requisições dos clientes, além de utilizar os processos filhos (ou threads), para lidar com esses pedidos.

A partir da versão 2.4 do Apache, existem 3 diferentes MPMs que podem ser utilizados, de acordo com suas necessidades:
  • prefork MPM: utiliza múltiplos processos filhos, sem utilizar threads. Cada processo lida com uma conexão de uma vez, sem a criação de threads para cada uma delas. Sem entrar em muitos detalhes, posso dizer que você deve utilizar essa MPM quando estiver realizando o debug de uma aplicação, através da utilização do módulo non-thread-safe como o mod_php.
  • worker MPM: utiliza diversas threads em cada processo filho, onde cada thread atende a uma conexão por vez. Esta é uma boa escolha para servidores de alto desempenho, habilitando lidar com mais conexões simultâneas, utilizando muito menos memória do que no caso anterior.
  • event MPM: este é o modo padrão de MPM ao realizarmos a instalação do Apache na versão 2.4 ou superior. Funciona de forma parecida ao worker, criando múltiplas threads para cada processo filho, mas com uma vantagem: ela causa conexões KeepAlive ou idle (enquanto elas mantém este estado), para serem tratadas por uma única thread, liberando assim a memória RAM que pode ser alocada para outras threads. Esta MPM não é adequada para ser utilizada com módulos non-thread-safe como o mod_php, sendo que, neste caso, seria melhor a substituição pelo PHP-FPM.

Para verificar o MPM utilizando na instalação do seu Apache, utilize:

sudo apachectl -M
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Loaded Modules:
core_module (static)
so_module (static)
watchdog_module (static)
http_module (static)
log_config_module (static)
logio_module (static)
version_module (static)
unixd_module (static)
access_compat_module (shared)
alias_module (shared)
auth_basic_module (shared)
authn_core_module (shared)
authn_file_module (shared)
authz_core_module (shared)
authz_host_module (shared)
authz_user_module (shared)
autoindex_module (shared)
deflate_module (shared)
dir_module (shared)
env_module (shared)
filter_module (shared)
mime_module (shared)
mpm_prefork_module (shared)
negotiation_module (shared)
php7_module (shared)
reqtimeout_module (shared)
setenvif_module (shared)
status_module (shared)


Observe que no meu caso, o módulo mpm_prefork_module está carregado no Apache, ficando claro que utilizo o prefork neste servidor web.
Para alterar o MPM utilizado, devemos alterar o arquivo:

sudo nano /etc/apache2/mods-available/<mpm>.loa

Sendo <mpm> uma das seguintes opções: mpm_event, mpm_worker, ou mpm_prefork.
Além disso, devemos descomentar a linha que carrega o módulo, como por exemplo:

LoadModule mpm_event_module modules/mod_mpm_event.so

Por último, reiniciar o Apache da seguinte forma:

sudo systemctl restart apache2 php5-fpm
sudo systemctl enable apache2 php5-fpm

Conheça suas aplicações

Como um princípio básico, você nunca deve carregar um módulo do Apache que não seja estritamente necessário para o trabalho de suas aplicações nesse servidor. Isto requer um conhecimento das aplicações que estão sendo executadas, além de seu funcionamento, especialmente se você desempenhar o papel de administrador de sistemas dessa máquina.

Para listar os módulos carregados utilize:

apache2ctl -M

Para desabilitar um módulo no Apache no servidor com o Ubuntu, utilize:

sudo a2dismod module_name

Para habilitar novamente, utilize:

sudo a2enmod module_name

Sempre que executar um dos comandos acima, você deve reiniciar o Apache.

sudo systemctl restart apache2

CONCLUSÕES

Espero que o conteúdo deste artigo ajude você a instalar e gerenciar melhor seus servidores web!

Me conte se você já utilizar o Apache e em que tipo de aplicação.

Página anterior    

Páginas do artigo
   1. Instalar o LAMP no Ubuntu 20.04 LTS
   2. Melhorar a Performance do seu Servidor Apache
Outros artigos deste autor

Instalando WPS Office no Debian, Linux Mint e Ubuntu

Comando du - encontrando as maiores pastas e arquivos no Linux

Alternativas ao Microsoft Visio para Linux

Download de Arquivos com Verificação do Hash SHA 256

Bloqueio de usuários com o chroot

Leitura recomendada

Diagnosticando problemas variados em ambientes GNU/Linux (parte 1)

VPN com servidor e cliente rodando em Linux

Vodafone Mobile Connect Card driver - Um excelente software para modems 3G

Configurando servidores DHCP, BIND, Squid, Sarg, Samba e algumas regras IPtables

Instalando o Linux RedHat / Fedora / CentOS remotamente utilizando o VNC

  
Comentários
[1] Comentário enviado por maurixnovatrento em 03/09/2020 - 13:12h


Muito bom. Está bem completo.

___________________________________________________________
[code]Conhecimento não se Leva para o Túmulo.
https://github.com/MauricioFerrari-NovaTrento [/code]

[2] Comentário enviado por viroguim em 05/09/2020 - 16:39h

Muito maneiro, tutorial excelente !!
Obrigado.

[3] Comentário enviado por baza em 24/09/2020 - 18:22h

Difícil encontrar um tutorial sobre o assunto com esta qualidade!
Após longo tempo consegui instalar no meu Linux Mint 20. No final o deu problemas com o phpmyadmin que resolvi da seguinte forma:
Voltei a instalação do phpmyadmin respondendo "não" a 2a.pergunta, visto que já tinha banco de dados no mysql. Depois editei o arquivo /etc/apache2.config
adicionando a seguinte linha no final: Include /etc/phpmyadmin/apache.conf
Finalmente é necessário reiniciar o apache 2 com sudo service apache2 restart
Aí coloque no browser http:localhost/phpmyadmin e surgiu a tela que tanto queria!
Abraço e obrigado!

[4] Comentário enviado por maurixnovatrento em 24/09/2020 - 23:53h


[3] Comentário enviado por baza em 24/09/2020 - 18:22h

Difícil encontrar um tutorial sobre o assunto com esta qualidade!
Após longo tempo consegui instalar no meu Linux Mint 20. No final o deu problemas com o phpmyadmin que resolvi da seguinte forma:
Voltei a instalação do phpmyadmin respondendo "não" a 2a.pergunta, visto que já tinha banco de dados no mysql. Depois editei o arquivo /etc/apache2.config
adicionando a seguinte linha no final: Include /etc/phpmyadmin/apache.conf
Finalmente é necessário reiniciar o apache 2 com sudo service apache2 restart
Aí coloque no browser http:localhost/phpmyadmin e surgiu a tela que tanto queria!
Abraço e obrigado!


bacana cara.

[5] Comentário enviado por pauloedsonjk em 14/01/2021 - 08:35h

Gostei do artigo muito bom parabéns.
No meu caso estou usando este artigo para configurar o ambiente de desenvolvimento...
Então fiquei em duvida se a parte de firewall é realmente necessária pro meu caso, saberia me dizer?
Eu acredito que o tutorial tem uma visão mais para produção... porém ainda fiquei em dúvida como deveria ser feito
as permissões da pasta html atualmente ela pertence ao root recursivamente, também ao grupo root.
Gostaria de fazer o certo para não dar problema...
normalmente eu mudo o dono da pasta html para meu usuário, e para permissões 755 mas não sei se isso está certo, alguém pode me ajudar?


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts