PHP 5.3 + PHP5-FPM + NGINX no Ubuntu 14.04

Na versão 14.04 do Ubuntu, o PHP foi atualizado para a versão 5.5. Isso criou um problema para quem precisa da versão 5.3 do PHP para trabalhar com projetos que ainda não executam corretamente nas versões mais novas do PHP (no meu caso, o Magento 1.7.0.2).

Neste tutorial vou explicar como compilar e instalar a versão 5.3.28 do PHP com suporte ao PHP-FPM (FastCGI Process Manager) para funcionar no Ubuntu 14.04. Também vou ensinar como instalar e configurar o NGINX para funcionar com PHP-FPM.

1. Preparação do Sistema

Antes de tudo, execute o comando abaixo, pois todos os comandos aqui deverão ser executados como o superusuário root:

sudo -s

Edite o arquivo /etc/apt/sources.list e descomente as linhas iniciadas com deb-src ou acrescente as seguintes linhas, caso não existam no arquivo:

deb-src http://archive.ubuntu.com/ubuntu trusty main universe multiverse restricted
deb-src http://archive.ubuntu.com/ubuntu trusty-updates main universe multiverse restricted
deb-src http://archive.ubuntu.com/ubuntu trusty-security main universe multiverse restricted
deb-src http://archive.ubuntu.com/ubuntu trusty-backports restricted main universe multiverse

Execute os seguintes comandos para instalar os pacotes necessários para a compilação do PHP:

apt-get update
apt-get build-dep php5
apt-get install libt1-dev

Caso o Apache esteja instalado remova-o, porque vamos utilizar o NGINX como nosso servidor HTTP:

apt-get remove apache2
apt-get autoremove

Também remova os pacotes padrões do PHP 5.5, porque vamos compilar a versão 5.3:

apt-get remove php5 php5-cli php5-common
apt-get autoremove

2. Compilando o PHP

Execute os comandos abaixo para compilar e instalar a versão 5.3.28 do PHP. (Ajuste os parâmetros do ./configure conforme a sua necessidade.)

cd /usr/local/src
wget http://in1.php.net/distributions/php-5.3.28.tar.bz2
tar -xvf php-5.3.28.tar.bz2
cd php-5.3.28
./configure --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --with-mysqli=mysqlnd --with-mysql=mysqlnd --with-pdo-mysql --with-gd --with-libdir=lib/i386-linux-gnu --enable-gd-native-ttf --enable-gd-jis-conv --with-gettext --enable-mbstring --with-mcrypt --with-mhash --enable-wddx --with-xmlrpc --with-xsl --enable-zip  --with-curl --with-curlwrappers --with-xpm-dir --with-jpeg-dir --with-png-dir --with-t1lib  --enable-soap
make
make install

cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod a+x /etc/init.d/php-fpm
cp /usr/local/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf

update-rc.d php-fpm defaults

3. Instalando e configurando NGINX

A instalação do Nginx é simples: vamos utilizar o pacote existente no Ubuntu. Execute o comando abaixo para realizar a instalação:

apt-get install nginx

Crie o arquivo /etc/nginx/conf.d/upstream.conf com o seguinte conteúdo:

upstream fpm_backend {
 server 127.0.0.1:9000;
}

4. Configurando um servidor virtual no NGINX com PHP5-FPM

Para facilitar a compreensão dos passos a seguir, vamos configurar o domínio meuprojeto.localhost  apontando para a nossa própria máquina (localhost). Edite o arquivo /etc/hosts e acrescente a seguinte linha:

127.0.0.1 meuprojeto.localhost

Agora crie o arquivo /etc/nginx/sites-available/meuprojeto.localhost com o seguinte conteúdo:

server {
 listen 80;
 server_name meuprojeto.localhost; # like ServerName in Apache
 root /home/meuusuario/meuprojeto; # document root, path to directory with files
 index index.html index.php;
 autoindex off; # we don't want users to see files in directories

 location / {
 # First attempt to serve request as file, then
 # as directory, then fall back to displaying a 404.
 try_files $uri $uri/ =404;
 }

 location ~ \.php$ {

 try_files $uri =404; # if reference to php executable is invalid return 404
 expires off; # no need to cache php executable files
 fastcgi_read_timeout 600;
 fastcgi_pass fpm_backend; # proxy all requests for dynamic content to backend configured in upstream.conf
 fastcgi_keep_conn on; # use persistent connects to backend
 include fastcgi_params;
 fastcgi_param SCRIPT_FILENAME $document_root${fastcgi_script_name};
 }
}

Habilite o servidor virtual digitando o seguinte comando:

ln -sf /etc/nginx/sites-available/meuprojeto.localhost /etc/nginx/sites-enabled/meuprojeto.localhost

Inicie os daemons do PHP-FPM e NGINX, por meio dos seguintes comandos:

service php-fpm start
service nginx start

Para testar se tudo funcionou corretamente, crie um arquivo chamado phpinfo.php, dentro da pasta do seu projeto, com o seguinte conteúdo (no caso do exemplo acima, o arquivo será criado dentro da pasta /home/meuusuario/meuprojeto):

<?php
echo phpinfo();
?>

Agora, abra o seu navegador e acesse o endereço http://meuprojeto.localhost/phpinfo.php. Se, ao invés de fazer o download do arquivo phpinfo.php, apresentar as informações do PHP, sua configuração está funcionando corretamente!

Bem… é isso! Espero que tenha ajudado.