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.

 

Instalando o PHP 5.3 no Ubuntu 14.04

Edição 1: Escrevi outro tutorial, utilizando PHP5-FPM e Nginx. Vale a pena dar uma olhada.

Se você utilizava o seu PC com Ubuntu para testar os seus projetos em PHP que somente funcionam corretamente  com a versão 5.3 (como é o caso do Magento 1.7/1.8),  e depois que atualizou o Ubuntu para a  versão 14.04 LTS descobriu que ele vem o PHP 5.5, este artigo é para você; pois, eu tive o mesmo problema.

Googlando sobre o problema, eu descobri algumas  dicas como o projeto PHPBrew e PuPHPet. Mas, nenhuma deu certo para mim. Então, eu tive que apelar para a compilação do código fonte do PHP 5.3.28…

Segue os comandos para preparar o sistema com os pacotes necessários para compilar o código fonte do PHP:

sudo -s
apt-get build-dep php5
apt-get install -y autoconf automake curl build-essential libxslt1-dev re2c libxml2 libxml2-dev php5-cli bison libbz2-dev libreadline-dev
apt-get install -y libfreetype6 libfreetype6-dev libpng12-0 libpng12-dev libjpeg-dev libjpeg8-dev libjpeg8 libgd-dev libgd3 libxpm4
apt-get install -y libssl-dev openssl
apt-get install -y gettext libgettextpo-dev libgettextpo0
apt-get install -y libicu48 libicu-dev
apt-get install -y libmhash-dev libmhash2
apt-get install -y libmcrypt-dev libmcrypt4
apt-get install mysql-server mysql-client libmysqlclient-dev libmysqld-dev
apt-get install -y apache2-dev

Agora vamos aos comandos para baixar o código fonte, compilá-lo e instalá-lo:

wget http://in1.php.net/distributions/php-5.3.28.tar.bz2
tar xfj php-5.3.28.tar.bz2
cd php-5.3.28
export dst=/usr/local
./configure --prefix=${dst} --with-config-file-path=${dst} --with-config-file-scan-dir=${dst}/conf.d --without-t1lib --disable-short-tags --with-apxs2=/usr/bin/apxs2 --enable-pcntl --with-tsrm-pthreads --with-mysqli=mysqlnd --with-mysql=mysqlnd --with-pdo-mysql --with-openssl --with-zlib --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-bcmath --with-bz2 --enable-calendar --enable-exif --enable-ftp --with-gd --with-jpeg-dir=${dst}/usr/lib --with-png-dir=${dst}/usr/lib --with-xpm-dir=${dst}/usr/lib --enable-gd-native-ttf --enable-gd-jis-conv --with-iconv-dir --with-gettext --enable-mbstring --with-mcrypt --with-mhash --with-pspell --with-readline --with-snmp --enable-soap --enable-sockets --with-sqlite --enable-sqlite-utf8 --enable-wddx --with-xmlrpc --with-xsl --enable-zip  --with-curl --with-curlwrappers --with-libdir=lib/i386-linux-gnu --with-xpm-dir=/usr
make install

Se tudo deu certo até aqui, basta reiniciar o apache que o PHP já estará funcionando:

service apache2 restart