Tutorial Debian 8 x64 com ISPConfig e NginX: Otimizando a Instalação

Após instalar o ISPConfig com a ajuda de um script alguns ajustes são necessários para consertar problemas e otimizar a configuração inicial do servidor.

Nesta parte do tutorial vamos adicionar memória SWAP, opcionalmente desativar os filtros de email e o anti-vírus, ajustar o PureFTPd para o modo passivo, otimizar o PHP e o NginX, alterar o limite de arquivos abertos no MySQL e consertar o bug no Quota.

Otimizando a Instalação do VPS

* Acesse o terminal SSH como superusuário root para executar os comando de instalação e configuração.

Adicione memória SWAP ao sistema

Vamos adicionar memória SWAP, independente da capacidade do servidor que você escolheu, isso deverá assegurar que nenhum serviço irá parar de funcionar após a instalação.

1a ⇒ Verifique se o seu sistema já não tem uma partição SWAP (na Digital Ocean ela não vem configurada mas em alguns hostings sim):

root# free -m

1b ⇒ Crie uma partição padrão alocando 2Gb de espaço ativando-a em seguida:

root# fallocate -l 2G /swapfile; chmod 600 /swapfile; mkswap /swapfile; swapon /swapfile

1c ⇒ Edite o arquivo /etc/fstab e adicione a linha abaixo para que quando reiniciar o sistema a partição continue ativa (deixe uma linha em branco no final do arquivo):

/swapfile   none    swap    sw    0   0

1d ⇒ Confirme se a partição foi criada corretamente e se o fstab aceitou a linha que você adicionou:

root# ls -lh /swapfile

root# mount -a

root# free -m

* Para uma melhor explicação dos comandos acima consulte este link
2 Opcional: Desative o Clamav Anti-Vírus

Se você pretende manter um servidor de emails com muitas contas no VPS e verificar se há vírus, e se o servidor tem uma capacidade maior que 1Gb de RAM então será melhor manter o ClamavPorém, se o principal objetivo é manter os sites dos clientes num VPS de baixo custo como o de $5 dólares então a recomendação é desativá-lo  para economizar recursos.

2a ⇒ Edite o arquivo /etc/amavis/conf.d/50-user e comente as linhas 11, 12, 14 e 15 (colocando o símbolo de # no início):

#@bypass_virus_checks_maps = (
#   \%bypass_virus_checks, \@bypass_virus_checks_acl, $bypass_virus_checks_re);

#@bypass_spam_checks_maps = (
# \%bypass_spam_checks, \@bypass_spam_checks_acl, $bypass_spam_checks_re);

2b ⇒ Comandos para desativar o Clamav antí-virus e reiniciar o Amavis (como eu já disse outras vezes, pode-se copiar o comando e clicar com o botão direito do mouse no console para colar):

root# /etc/init.d/clamav-daemon stop; /etc/init.d/clamav-freshclam stop; update-rc.d -f clamav-daemon remove; update-rc.d -f clamav-freshclam remove; /etc/init.d/amavis restart; systemctl stop clamav-daemon.socket

Edite o arquivo /etc/systemd/system/clamav-daemon.socket.d/extend.conf e altere as linhas abaixo conforme mostrado em vermelho:

[Socket]
ListenStream=
SocketUser=clamav
ListenStream=/var/run/clamav/clamd.ctl.change
SocketGroup=nobody
SocketMode=600

* Para o CLAMAV não ressuscitar veja a observação no Passo 6 mais abaixo neste mesmo artigo (desativando ele completamente dará uma grande diferença de performance). Para verificar a lista de processos ativos digite o comando:

root# ps -e -orss=,args= | sort -b -k1,1n | pr -TW$COLUMNS

2c ⇒ E por último, somente remova o Amavis se você não pretende de forma alguma ter o servidor de email executando (exemplo: muitas empresas optam por usar um serviço de email externo com SMTP Relay):

root# /etc/init.d/amavis stop

root# update-rc.d amavis disable
3 Servidor FTP no modo Passivo (PASV)

Para configurar o FTP no modo passivo é necessário criar dois arquivos específicos com alguns parâmetros, reiniciar o PureFTPd e liberar as portas no Firewall.

3a ⇒ Neste exemplo iremos permitir até 50 conexões simultâneas. Execute os comandos:

root# echo 40110 40210 > /etc/pure-ftpd/conf/PassivePortRange

root# echo 50 > /etc/pure-ftpd/conf/MaxClientsNumber

root# /etc/init.d/pure-ftpd-mysql restart

3b ⇒ Após configurar o PureFTPd ainda será necessário liberar as portas no Firewall (adiante neste tutorial publicaremos um artigo completo dedicado ao Firewall, mas por enquanto vamos simplesmente ativar a segurança básica liberando as portas necessárias).

No ISPConfig o Firewall é facilmente acessado em:

ISPConfig → Sistema → Firewall

Clique no botão “Adicionar Registro de Firewall” e confirme a tela que abrirá (se já havia adicionado o Firewall simplesmente abra a configuração existente), em seguida clique na linha de configuração e na caixa de “Portas TCP abertas” adicione “40110:40210” desta maneira (não esqueça da vírgula):

20,21,22,25,53,80,110,143,443,587,993,995,3306,8080,8081,10000,40110:40210

Uma lista com arquivos de configuração para o Pure-FTPd (wrappers) pode ser encontrada neste link.

Otimizando o PHP e o NginX

Este passo é indispensável para o bom funcionamento dos sites. No tutorial anterior eu havia escrito estas informações em várias postagens, mas neste irei resumir quase tudo em um texto único.

4a ⇒ Edite o arquivo /etc/php5/fpm/php.ini e altere as seguintes linhas:

#Linha 372:
#Observacao: Se estiver usando ManageWP altere os valores de 180 para 800 (nas linhas onde aparecem)
max_execution_time = 180

#Linha 382:
max_input_time = 180

#Linha 389: Para sites de loja virtual (exemplo Magento e Opencart) ou sites OptimizePress será necessário habilitar e alterar o valor dessa linha para o correto funcionamento (retire o ponto e virgula no inicio da linha e altere o valor de 1000 para 5000)
max_input_vars = 5000

#Linha 393: (se usar ManageWP altere para 512M)
#A última versão do Mautic pede pelo menos 256M para evitar erros: Allowed memory size of xxxx bytes exhausted
memory_limit = 256M

#Linha 660:
post_max_size = 100M

#Linha 820:
upload_max_filesize = 100M

#Linha 823:
max_file_uploads = 100

#Linha 894 (para verificar qual a timezone configurada no sistema digite o comando: "cat /etc/timezone"):
date.timezone = "America/Sao_Paulo"

4b ⇒ Acesse o ISPConfig e altere o tamanho máximo permitido nos anexos de email (isso é um bug que ainda persiste em algumas configurações)

ISPConfig → Sistema → Configuração do Servidor → <Selecione o servidor> → aba Mail

No campo “Tamanho máximo de mensagem” altere de 0 (zero) para 100Mb

4c ⇒ Edite o arquivo /etc/php5/fpm/pool.d/www.conf e altere a linha abaixo:

#Linha 328 (descomente-a deletando o sinal de ponto e vírgula do início)
#Observacao: Se estiver usando ManageWP altere o valor para 800
request_terminate_timeout = 180

4d ⇒ Edite o arquivo /etc/nginx/nginx.conf e altere/adicione as linhas abaixo. Mas antes de alterar as linhas verifique o número de CPU’s do seu servidor, parâmetro necessário para configurar o limite de arquivos simultâneos abertos  pelo NginX corretamente.

root# grep processor /proc/cpuinfo | wc -l

* Num VPS de baixo custo o valor exibido é “1

* Configure worker_processes para o dobro do número de CPU’s = “2

* Configure worker_connections para 1024 x número de CPU’s = “1024

* Configure worker_rlimit_nofile para o dobro de worker_connections = “2048

#Altere o início do arquivo entre as linhas 1 e 9 desta maneira:
 
user www-data;
worker_processes 2;
pid /run/nginx.pid;

events {
   worker_connections 1024;
   multi_accept on;
   use epoll;
}
worker_rlimit_nofile 2048;


#Entre as linhas 51 a 56 ative o modo de compactação gzip descomentando (retire o sinal de #)
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_buffers 16 8k;
gzip_http_version 1.1;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
 

#Adicione algumas novas instruções, a partir da linha 64 logo abaixo das diretivas "include" e antes de fechar o bloco
#Se usar o ManageWP altere os valores das 4 ultimas linhas de 180 para 800
##
# Virtual Host Configs
##
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
 
client_max_body_size 100M;
client_body_buffer_size 16k;

#Com a colaboração do leitor Glauber Silva, que comentou abaixo reportando fix para duas situações em seu site, decidi alterar as linhas de buffer no tutorial (utilize somente as que estão em negrito)
#fastcgi_buffers 8 16k;
#fastcgi_buffer_size 32k;

fastcgi_buffers 256 16k;
fastcgi_buffer_size 128k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_connect_timeout 180;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
proxy_read_timeout 180;

4e ⇒ Reinicie o PHP e o NginX:

root# /etc/init.d/php5-fpm restart

root# /etc/init.d/nginx restart

5 Alterando o limite de arquivos abertos no MySQL

Isso irá prevenir que o banco de dados MySQL entre em loop de erro parando todos os serviços que dependem dele. Recentemente tive que fazer um atendimento de emergência onde todos os sites de um servidor simplesmente pararam de funcionar por causa disso, pois todos dependiam do MySQL, incluindo o painel do ISPConfig.

O Sistema Operacional, os aplicativos nele e o Banco de Dados têm um limite padrão para arquivos abertos, quando este limite excede os serviços simplesmente começam a gerar log de erros infinitos. No MySQL o mais comum é: “mysql (errno: 24 – too many open files) out of resources“, ou seja “muitos arquivos abertos, recursos esgotados”. Além disso, como são muitos erros gravados, o servidor facilmente fica sem espaço disponível no HD.

Para ajudar a prevenir isso temos que alterar alguns arquivos.

5a ⇒ Verifique os limites atuais:

• Para verificar as limitações do sistema operacional digite o comando abaixo, veja que no Debian 8 64-bit “Open files” está com um limite de 65536 que é o máximo do sistema. Nâo há necessidade de alterar isso.

root# ulimit -a

• Para verificar o limite de arquivos abertos no MySQL execute o comando abaixo (será necessário digitar a senha admin do MySQL):

root# mysql -u root -p --execute='show variables like "open_files_limit"'

Será exibido um resultado parecido com este, note que está limitado em 1024 arquivos simultâneos abertos:

+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 1024  |
+------------------+-------+

5b ⇒ Alterando os limites nas sessões de sistema:

• Edite o arquivo /etc/security/limits.conf e adicione estas 2 novas linhas logo acima de “# End of file”:

mysql soft nofile 24000
mysql hard nofile 32000

# End of file

• Edite o arquivo /etc/pam.d/common-session e adicione esta nova linha ao final:

session required pam_limits.so

5c ⇒ Alterando os limites no MySQL.

• Edite o arquivo /etc/mysql/my.cnf e adicione 2 novas linhas:

# Logo abaixo da instrução [mysqld_safe] na linha 27 acrescente uma nova linha com o texto em negrito abaixo:
 
[mysqld_safe]
open_files_limit = 65536


# Logo abaixo da instrução [mysqld] da linha 32 adicione o mesmo texto novamente:

[mysqld]
#
# * Basic Settings
#
open_files_limit = 65536

• Reinicie o MySQL e execute novamente o comando para verificar o limite no MySQL.

root# /etc/init.d/mysql restart

5d ⇒ Método alternativo para verificar os limites de arquivos abertos (serve para qualquer serviço)

• Digite o comando para listar os processos ativos filtrando o mysql:

root# ps auxw |grep mysql

• Irá exibir 2 processos, o primeiro é do mysqld_safe e o segundo o mysql normal. Agora digite o seguinte comando para mostrar os limites de arquivo por processo:

root# cat /proc/1234/limits |grep "open files"

* Substitua 1234 pelo número do processo exibido com o comando ps auxw

* * Um outro exemplo: pode-se verificar os limites de arquivos abertos simultaneamente pelo NginX com estes mesmos comandos

6 Fix para o bug de start para o serviço Quota

Mesmo após reiniciar o servidor parece haver um bug no serviço Quota que não inicializa. Digite o comando abaixo para forçar isso:

root# /etc/init.d/quota restart

Em seguida digite o seguinte comando para verificar se todos os serviços estão executando (role a tela com as teclas de navegação e para sair digite “q):

root# systemctl

O problema aqui é que o systemD inicia o serviço Quota muito adiantado em um reboot. Para consertar o problema edite o arquivo /etc/rc.local:

* EDIT: Neste mesmo arquivo faça uma correção para que o CLAMAV não retorne mesmo a gente tendo desativado ele diversas vezes já:

#Na linha 14 logo acima de "exit 0" abra uma linha em branco e digite:

#Se você optou pelo NginX durante a instalação, force o Apache a desligar e reinicie o NginX. Decomente (delete o simbolo "#") nas linhas de STOP para o Apache e RESTART para o NginX abaixo:

sleep 5
#/etc/init.d/apache2 stop
/etc/init.d/quota start
/etc/init.d/clamav-daemon stop
/etc/init.d/clamav-freshclam stop
#/etc/init.d/nginx restart

#Caso decida escrever regras customizadas com IPTables pode-se chamar o script adicional. Para isso descomente a próxima linha, crie o arquivo e altere-o para executável ("chmod 700 /root/fatorbinario/firewall"). Exemplo (note o "exit 1" para se caso der erro nas regras o sistema conseguir inicializar):

#/root/fatorbinario/firewall || exit 1

exit 0

Índice do Tutorial:

©2014-2024 Fator Binário - Todos os direitos reservados

Fazer login com suas credenciais

Esqueceu sua senha?