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.

 

7 respostas para “PHP 5.3 + PHP5-FPM + NGINX no Ubuntu 14.04”

    1. Olá, a sua resposta não foi o que eu queria, mais Obrigado.
      Depois de apanhar e pesquisar muito descobrir o algumas formas de habilitar as extensões que não compilaram com os comandos do tutorial. Vou mostrar o mais fácil.

      pasta onde vai ser criado o .so da extensões.
      http://forum.ubuntu.ru/index.php?topic=215755.0
      /usr/local/lib/php/extensions/no-debug-non-zts-20090626/
      Entre nas pastas das extensões e executar esses comandos.
      cd php5.3.29/ext/mbstring
      phpize
      ./configure
      make && make install

      cd php5.3.29/ext/gd
      phpize
      ./configure
      make && make install

      cd php5.3.29/ext/interbase
      phpize
      ./configure
      make && make install
      Esse comando sendo executado dentro das respectivas pastas de extensões vai criar os arquivo .so Ex: interbase.so e depois habilite a extensão no php.ini
      Ex: extension=mbstring.so
      extension=gd.so
      extension=interbase.so
      Obrigado por ter escrito esse tutorial.

  1. Se você utiliza arquitetura de 64bits na instalação do seu Ubuntu, substitua with-libdir=lib/i386-linux-gnu por with-libdir=lib/x86_64-linux-gnu no comando ./configure, utilizado no passo de compilação do PHP.

  2. Hoje, após atualizar a minha versão do Ubuntu para 14.10 descobri que precisava recompilar o meu PHP; pois, ao iniciar o serviço php-fpm (service php-fpm start) descobri que a biblioteca libt1.so.5 estava faltando.

    O problema é que os pacote libt1 (e o pacote libt1-dev) não está mais disponível nesta versão do Ubuntu.

    Então, fiz o seguinte para resolver:

    1) Fiz um link simbólico da pasta da biblioteca freetype2; pois, o configure que vem com a versão 5.3.28, procura o arquivo freetype.h dentro de /usr/include/freetype2/freetype. (Não consegui informar a pasta correta como parâmetro do comando configure: a solução era era fazer patch no configure ou um link simbólico… o link simbólico é mais fácil de explicar :))


    ln -sf /usr/include/freetype2/ /usr/include/freetype2/freetype

    2) Depois eu recompilei o PHP, mas tive que remover a opção with-t1lib e acrescentar a opção with-freetype_dir=shared,/usr.

    Segue a sequência de comandos de como recompilei (para arquitetura de 64 bits):


    ./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/x86_64-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 --enable-soap --with-freetype-dir=shared,/usr
    make clean
    make
    make install

    Depois de instalado, bastou iniciar o php-fpm e tudo voltou como antes…

    service php-fpm start

    1. Nota: acrescentar –enable-opcache na linha do configure e incluir a seguinte linha no arquivo php.ini:

      zend_extension = /usr/local/lib/php/extensions/no-debug-non-zts-20121212/opcache.so
      opcache.memory_consumption=128
      opcache.interned_strings_buffer=8
      opcache.max_accelerated_files=4000
      opcache.revalidate_freq=60
      opcache.fast_shutdown=1
      opcache.enable_cli=1

  3. Boa tarde, a todos.
    Conteúdo de excelente qualidade do seu site Parabéns.

    Tenho que usar PHP 5.3 e estou pensando em atualizar meu servidor para o Ubuntu 14 porem estou pensando se vale a pena? sera que não vou ter mais dores de cabeça? sera que não é melhor deixar o Ubuntu na versão 12?

Os comentários estão desativados.