Instalando PHP-FPM com Apache

Submitted by Eric on ter, 03/27/2018 - 17:36
PHP FPM

Muitas pessoas preferem utilizar o nginx, mas para o Magento não faz diferença já que o processo PHP é o grande vilão e não conteúdo estático.


Logo após a instalação do Magento temos uma grande quantidade de arquivos PHP:

find . -type f -name "*.php" | wc -l

Total 8.112.

Algumas razões para utilizar o PHP-FPM com Apache:

  • Você quer a performance e flexibilidade do FPM;
  • Você quer executar o PHP como o usuário que é dono do código (não o Apache) para evitar problemas de permissão;
  • Você precisa utilizar arquivos .htaccess;
  • Você prefere a suportabilidade e experiência com o Apache e não quer utilizar o nginx.

Vamos agora à instalação, o tutorial foi feito com o RHEL/CentOS, mas pode ser alterado para qualquer distro.

Instalando o FPM:
 

yum install php-fpm

Por padrão você terá o FPM rodando como apache e configurado no arquivo /etc/php-fpm.d/www.conf.
Talvez seja necessário configurar vários arquivos por domínio e usuário para não ter problemas de permissão.
Vamos configurar o pool do FPM para executar pelo socket ao invéz de TCP pela porta 9000.
Também configure o usuário e permissão para o socket, normalmente o mesmo que o usuário sFTP.

Execute os comandos abaixo:

cd /etc/php-fpm.d
cp www.conf usuario.conf 
mv www.conf www.conf.disabled 
vim usuario.conf

Faça às seguintes alterações:

;listen = 127.0.0.1:9000
listen = /dev/shm/usuario-php.sock

listen.owner = usuario
listen.group = apache
listen.mode = 0660

user = usuario

pm.max_children = 100
pm.start_servers = 35
pm.min_spare_servers = 35

php_admin_value[error_log] = /var/log/php/dominio.com-error.log
php_admin_flag[log_errors] = on
php_admin_value[memory_limit] = 512M

Instalando mod_fastcgi:

Precisamos instalar o fastcgi para comunicar com o FPM, não há muitas packages disponíveis, então temos a opção de compilar ou utilizar uma versão feita pela Nexcess onde foi corrigido um but do Magento com CGI onde duplica headers causando um erro 500:
… aborted: error parsing headers: duplicate header ‘Content-Type’

Vamos utilizar o rpm da Nexcess para fazer a instalação, execute os comandos abaixo:

yum -y install httpd-devel rpm-build -y
mkdir -p /~/fastcgi
cd /~/fastcgi
wget http://pubfiles.nexcess.net/misc/mod_fastcgi-2.4.6-3.el6.src.rpm
rpmbuild --rebuild mod_fastcgi-2.4.6-3.el6.src.rpm
rpm -ivh /~/rpmbuild/RPMS/x86_64/mod_fastcgi-2.4.6-3.el6.x86_64.rpm
rm -f /etc/httpd/conf.d/mod_fastcgi.conf

Configurando o mod_fastcgi:
Crie o arquivo /etc/httpd/conf.d/mod_fastcgi.conf com o conteúdo abaixo. Altere onde está escrito usuario para o usuario que você configurou para executar o código. Para múltiplos pools, adicione mais directivas FastCGIExternalServer.

LoadModule fastcgi_module modules/mod_fastcgi.so
<IfModule mod_fastcgi.c>
Alias /php5.fcgi /var/www/php5.fcgi

FastCGIExternalServer /var/www/php5.fcgi -socket /dev/shm/someuser-php.sock -flush -idle-timeout 1800

AddType application/x-httpd-fastphp5 .php
Action application/x-httpd-fastphp5 /php5.fcgi
</IfModule>

Desativando mod_php:
Execute o seguinte comando para desativar o mod_php:

mv /etc/httpd/conf.d/php.conf /etc/httpd/conf.d/php.disabled
echo "# mod_php disabled, using mod_fastcgi with PHP-FPM instead" >> /etc/httpd/conf.d/php.conf

PHP-FPM é muito bom com o uso de memória. Quando seu site estiver com várias visitas no site, execute o seguinte comando:

for pid in $(ps aux | grep fpm | grep "pool www" | awk '{print $2}'); do pmap -d $pid | tail -1 ; done | sed 's/K//' | awk '{sum+=$4} END {print sum/NR/1024}'

O comando irá mostrar o uso médio em MB de cada processo FPM para o pool www. Altere para o pool com o nome que você criou para ter a resposta correta. Desta forma você pode prever o uso de memória do seu PHP.


FacebookTwitterGoogle+Share
Categoria