Lighttpd + Symfony

Nota: Este artigo foi escrito em 2006, ele sera atualizado em breve.

Instalando PHP 5,Fastcgi, lighttpd e symfony framework

Objetivo

No final das contas, ter o symfony framework, instalado e funcionando. Para isso teremos a instalação do lighttpd na porta 81, compilação do PHP 5 direto dos fontes com bibliotecas gd e zlib incluidas, suporte a mysql, sqlite, e postgresql.

Instalando o lighttpd

Optei por instalar via apt-get( ahhh, esqueci de dizer que estou fazendo este tutorial no debian 3, kernel 2.6.17…), a principio o lighttpd funciona na porta 80, mas como a ideia é ser uma alternativa vamos instalar na porta 81, ou  outro que voce queira. Se voce ja tinha o Apache ( como previsto) e instalou via apt, ja tera um  erro ,  o httpd vai alegar que nao pode usar a porta 80, pois  obvio, ja esta em uso. Logo de um STOP no Apache.

# apt-get install lighttpd

Aqui ele instalou na porta 80, vamos mudar isso mais a frente.Ok!
Usuarios do slack ( esse esta em casa :-] ), fedora, e outros. Voces devem saber uma forma parecida de instalar, no slack uso o slackpkg, que é otimo, no fedora tem o rpm.
Bem, instalem o bem dito de alguma forma. :-]

Instalando dependecias para compilação do PHP

Quando formos compilar o PHP precisaremos  de alguns componentes instalados no sistema, entre eles, as bibliotecas, GD, PNG, Jpeg e etc. Eu, como voces ja sabem,  estou utilizando debian, então o que fiz? Ai esta.

# apt-get install libpng12-dev libgd-dev libpng12-dev libjpeg62-dev zlib1g-dev libmysql++-dev postgresql-dev libpq-dev libpq4 libxml2-dev

Todos claro dev, ou seja pacote com os arquivos desenvolvimento (  tambem conhecidos como headers ).
NOTA: verifiquem em suas distribuições, mas no debian a libpq4, é referente ao Postgresql 8.x.x, e a libpq3 é referente ao ramo 7.x

Obs: Essas foram as bibliotecas que eu precisei , voce pode precisar de  outras,  então, preste atenção nas mensagens do ./configur do PHP , ai voce instala as depencias não encontradas.

Alguns ajustes antes de compilar.

Vamos editar o lighttpd.conf, que no debian fica em /etc/lighttpd/

# vim /etc/lighttpd/lighttpd.conf
Devera ter uma parte que seta o server.port = 80 , altere para 81, marromenos assim.
(…)
######### Options that are good to be but not neccesary to be changed #######

## bind to port (default: 80)
server.port               = 81

## bind to localhost only (default: all interfaces)
server.bind                = “localhost”
(…)

Ok,  restart o light e inicie o apache. e verifique no seu navegador http://localhost (home do apache) e http://localhost:81 ( Placeholder lighttpd).
A principio estamos aptos a instalar o PHP. Let’s go dude.

Compilando o PHP 5

RÁ… finalmente chegamos na parte divertida ( que nerd, não?) . 3 liçães basicas que aprendi na marra.

  1. Preste atenção nas mensagens.
  2. Preste MUITA atenção nas mensagens.
  3. Não se apavore com as mensagens.

Depois dessas otimas lições, vamos ao trabalho.

Baixe a ultima versão do PHP5.

Entre em PHP Downloads e baixe o tar.bz2 da versão estavel ( Complete Source Code).  PS.: Link Direto para Versão 5.1.4

Salve este arquivo no seu /tmp/

Descompactar

# tar -jxvf php-5.1.4.tar.bz2
Sera criada a pasta php-5.1.4 em /tmp,  ficando /tmp/php-5.1.4/

# cd /tmp/
php-5.1.4/

Configurar  Compilação.

# ./configure –enable-fastcgi –with-gd –with-mysql –with-pgsql –with-zlib –with-pear=/opt/php5-cgi/pear –prefix=/opt/php5-cgi –with-libxml-dir=/usr/lib/
Assim, pedimos que o bash configure habilite o modo fastcgi ( –enable-fastcgi ),  compile com gd, mysql, postgresql ( –with-pgsql ) e zlib ( biblioteca de compressão ) , o parametro –with-pear=/opt/php5-cgi/pear avisa para instalar o pear no diretorio especificado, –prefix=/opt/php5-cgi avisa em qual diretorio queremos a instalação do PHP e por ultimo informamos o caminho da libxml–with-libxml-dir=/usr/lib/ ).
Ps.: Volto a repetir, neste ponto voces podem ter problema com dependencias, que tentamos suprir anteriormente, pode acontecer de a biblioteca que  o configure acusa não ter, estar presente, mas ele nao saber aonde, para isso informe a ele, como feito com a libxml, que passamos direto o local, no caso /usr/lib/.

Make

Se o ./configure tiver tido sucesso, compilamos e instalamos:
# make && make install
Agora, va tomar um café, jogar play2, liga pra mulher só pra dar um oi , pois o make leva em torno de 15 minutos para compilar tudo, o make install é rapido, coisa de 20 segundos e ela coloca as coisas no lugar.
( … ) after 15 minutes ( … )

Olha que beleza. temos tudo pronto. entre no diretorio de instalação, se tiver seguido a risca sera /opt/php5-cgi/, e de uma olhada.

Configurando

PHP

Entre no diretorio do PHP:
# /opt/php5-cgi

Vamos agora copiar o php.ini
# cp /tmp/php-5.1.4/php.ini-dist /opt/php5-cgi/lib/php.ini

E claro, vamos dar uma pequena arrumada para funcionar como symfony :-)
# vim /opt/php5-cgi/lib/php.ini
Localize a variavel de configuração magic_quotes_gpc , que devera estar setada como On, altere para Off ficando assim:
( … )
; Magic quotes for incoming GET/POST/Cookie data.
magic_quotes_gpc = Off
( … )
Aproveite e localize tambem a seção sobre session ( :-] ),  descomente a var de config session.save_path e sete ela para /tmp, ou um dir que o PHP tenha direito de escrita durante a execução.
( … )
; where MODE is the octal representation of the mode. Note that this
; does not overwrite the process’s umask.
session.save_path = “/tmp”
( … )

:-) , PHP agora esta prontinho para rodar!

lighttpd

Entre no diretorio de configuração disponiveis.
# cd /etc/lighttpd/conf-available

Edite o arquivo de configuração do fastcgi
# vim 10-fastcgi.conf

Delete todo o conteudo original, e deixe assim
#*********************************************************************

server.modules                += ( “mod_fastcgi” )

fastcgi.server =     ( “.php” =>
( “*” =>
( “socket” => “/tmp/php5-fcgi.socket”,
“bin-path” => “/opt/php5-cgi/bin/php”
)
)
)

#*********************************************************************

Após isso, habilite o modulo
# lighty-enable-mod fastcgi

Opa, vamos dar um restart no lighttpd
# /etc/init.d/lighttpd restart

Teste rapido, crie um arquivo /var/www/info.php ( estou assumindo que  o dir raiz seja /var/www/ ) com o conteudo <?php phpinfo(); ?>, abra o seu navegador e aponte para http://localhost:81/info.php, se ver aquela tradicional tela com as informações do PHP, e especificar a versão certinho com o fastcgi. otimo, realmente tudo saiu como esperado, se não, revise o passos.

Go Symfony, go!

Vamos agora a instalação do symfony, que sera instalado via pear.

Primeiro, vamos para o direitorio bin do php.
# cd /opt/php5-cgi/bin

Agora, atualizamos o pear
# ./pear upgrade PEAR

Beleza, hora de adicionarmos o canal do symfony, ahhh , precisa de conexão web é claro ( se estiver usando proxy, export http_proxy=”http://ip:porta” )
# ./pear channel-discover pear.symfony-project.com

Finalmente instalamos o symfony, no caso o beta ( trunk/night-build)
# ./pear install symfony/symfony-beta

Precisamos instalar tambem o Phing
# ./pear install http://phing.info/pear/phing-current.tgz

Ok, agora vamos corrigir um pequeno detalhe, caso voce tenha tambem outra versão do php instalada, trocaremos o executavel do php para o qual o symfony aponta.
# vim /opt/php5-cgi/bin/symfony
Estando com o arquivo aberto, localize a linha:
export PHP_COMMAND=php
Altere para:
export PHP_COMMAND=/opt/php5-cgi/bin/php

Para finalizar criamos um link para o binario do symfony
# ln -s /opt/php5-cgi/bin/symfony /usr/bin/symfony

Para testa, tecle no terminal
# symfony -T
Se aparecer uma lista de opções do symfony, ok, estamos indo bem.

Symfony at lighttpd

Pronto, temos tudo para funcionar, lighttpd instalado, php compilado e symfony instalado.

Vamos criar uma pasta para nosso projeto symfony de teste
# mkdir /var/www/symfony-teste
# cd /var/www/symfony-teste

Temos o diretorio, agora vamos criar a estrutura
# symfony new symfony-teste
Verifique o diretorio ( ls -la) deve ter sido criada uma serie de diretorios ( app, lib, data, web, e etc.)

Vamos criar um blog como aplicação teste
# symfony app blog

E um modulo Teste
#symfony module blog Teste

Vamos alterar o index padrao.
#vim apps/blog/modules/Teste/templates/indexSuccess.php
Coloque qualquer codigo html , ou altere o que ja existe.

Agora o teste final, abrar o navegador, e aponte para http://localhost:81/
ooopsss.
Nada? faltou alguma coisa?
Claro, precisamos avisar o lighttpd, para isso abra novamente o lighttpd.conf
# vim /etc/lighttpd/lighttpd.conf
Localize a config server.document-root e altere do que estiver para
server.document-root       = “/var/www/symfony-teste/web/”

Após localize essa parte:

$HTTP["host"] == “localhost” {
alias.url += (
“/doc/” => “/usr/share/doc/”,
“/images/” => “/usr/share/images/”
)
dir-listing.activate = “enable”
}

Troque para:

$HTTP["host"] == “localhost” {
alias.url += (
“/doc/” => “/usr/share/doc/”,
“/images/” => “/usr/share/images/”,
“/sf/” => “/opt/php5-cgi/pear/data/symfony/web/sf/”
)
dir-listing.activate = “enable”
}

Ou seja, incluimos na lista de alias a pasta do symfony.

Agora sim, reinicie novamente o lighttpd, abra o navegador e aponte dessa vez para  http://localhost:81/blog_dev.php/Teste , voce devera visualizar a rederização daquele arquivo que modificamos anteriormente.

Conclusão

Era isso pessoal, qualquer erro ou problema, me mandem um e-mail ( domluc at gmail dot com ), que responderei o mais rapido possivel.

ToDo

  • Incluir Configuração do Rewrite Url no lighttpd
  • Virtual Host para cada projeto

Criado em 07/08/2006 por Lucas Stephanou
Ultima Alteração 08/08/2006

Licença GPL