Usando MacPorts para instalar Lighttpd y PHP en Mac OS X

Lighttpd, bien conocido como "lighty" (livianito), es un muy pequeño, rápido y eficiente servidor web preferido por sitios de enorme tráfico (como Mininova.org y Sourceforge.net) y también por muchos más modestos servidores privados virtuales (VPS) como el que alberga el sitio que ahora mismo estás leyendo. Antes había publicado cómo instalarlo y configurarlo correctamente en Ubuntu 6.06, y ahora que mis necesidades de desarrollo me impulsan a tener también un "stack" de desarrollo PHP completo en mi MacBook, lighty es también el servidor web de preferencia.

Al igual que hicimos con el "stack" completo de Rails, para instalar Lighttpd y PHP en la Mac usaremos, otra vez, el administrador de paquetes MacPorts por las mismas conveniencias que expuse antes.

Instalando Lighttpd

Instalamos el último Lighttpd 1.4.19 (al momento de escribir esto) con el predecible comando sudo port install lighttpd. Una vez terminada su instalación, el paquete nos arroja el siguiente mensaje:

###########################################################
# A startup item has been generated that will aid in
# starting lighttpd with launchd. It is disabled
# by default. Execute the following command to start it,
# and to cause it to launch at startup:
#
# sudo launchctl load -w /Library/LaunchDaemons/org.macports.lighttpd.plist
###########################################################

Que básicamente dice que, al igual que MySQL, tenemos un

También nos indica dónde está su archivo de configuración:

Before starting lighttpd it must be configured.
Lighttpd is configured by editing /opt/local/etc/lighttpd/lighttpd.conf
There's a sample config file at /opt/local/etc/lighttpd/lighttpd.conf.default.
Please note that the launchd daemon relies on the PID being at
/opt/local/var/run/lighttpd.pid.

Configurando Lighttpd

Creamos el directorio local para los archivos .log de lighttpd:

sudo mkdir -p /opt/local/var/log/lighttpd

Copiamos el archivo de ejemplo de configuración incluído en el paquete

sudo cp /opt/local/etc/lighttpd/lighttpd.conf.default /opt/local/etc/lighttpd/lighttpd.conf

Lo primero que debemos hacer es configurar el directorio raíz del servidor web. Este directorio puede ser cualquiera en nuestro disco rígido, pero seguramente preferiremos uno en el que podamos modificar sus contenidos sin ninguna restricción. Un subdirectorio para ese fin en el directorio "Home" del usuario que usamos en Mac OS X es una buena elección, por ejemplo:

server.document-root = "/Users/vivab0rg/devel/"

La línea anterior configura el directorio raíz de Lighttpd en el subdirectorio "devel" de mi usuario "vivab0rg".

Agregamos las siguientes líneas en el archivo /opt/local/etc/lighttpd/lighttpd.conf

accesslog.filename = "/opt/local/var/log/lighttpd/access.log"
server.errorlog = "/opt/local/var/log/lighttpd/error.log"

Para que los listados de nuestros archivos locales se vean bien:

dir-listing.encoding = "utf-8"
dir-listing.activate = "enable"

Al principio del archivo lighttpd.conf nos aseguramos de habilitar los siguientes módulos quitándole el signo numeral (#) que tienen como el primer carácter de su respectiva línea: mod-rewrite, mod-redirect, mod-access, mod-fastcgi y mod-accesslog.

Ahora podemos probar esta configuración ejecutando Lighttpd desde la terminal usando:

$ sudo lighttpd -D -f /opt/local/etc/lighttpd/lighttpd.conf

Y luego accediendo al URL de nuestro flamante servidor web local: http://localhost/

Configurando Lighttpd para CakePHP

Uno de mis principales motivaciones para instalar Lighttpd en mi Mac es probar seriamente CakePHP, uno de los más populares frameworks para PHP4/5 en este momento. Para poder hacerlo correctamente podemos agregar estas líneas en su archivo de configuración, como se comenta acertadamente en este blog.

url.rewrite-once = (
  "^/cake/(css|files|img|js|stats)/(.*)$" => "/cake/app/webroot/$1/$2",
  "^/cake/(.*)$" => "/cake/app/webroot/index.php?url=$1"
)

Donde "cake" es el subdirectorio dentro del directorio raíz del servidor web en el cual tenemos nuestra instalación de CakePHP.

Configurando Lighttpd para CodeIgniter

El otro gran framework para PHP que decidí que vale la pena considerar para mis desarrollos es CodeIgniter (CI). Pero tal como con CakePHP, si queremos aprovechar sus URLs limpios debemos hacer un par de cambios.

Primero agregamos la siguiente línea a la configuración de Lighttpd para el dominio donde tenemos instalado CI, de tal manera que envíe los errores 404 (Not Found) al archivo index.php:

$HTTP["host"] == "localhost.com" {
   server.document-root = "/Users/vivab0rg/devel/localhost.com"
   server.error-handler-404 = "/index.php"
}

También tenemos que cambiar la configuración de nuestra instalación de CI en el directorio indicado. Concretamente, editamos en el archivo system/config/config.php la opción $config['uri_protocol'] para indicar que CI use la variable global del servidor REQUEST_URI para extraer el URL solicitado:

$config['uri_protocol'] = "REQUEST_URI";

Modificando el archivo /etc/hosts en Mac OS X

Una de las técninas más usadas por nosotros los desarrolladores PHP, es agregar una entrada en el archivo /etc/hosts con el nombre del dominio para el que estamos programando. De esta manera, cuando en nuestro navegador escribamos ese dominio, el mismo se resolverá localmente y responderá nuestro flamante servidor web con nuestra propia aplicación, sin dejar acceder a Internet en ningún momento.

Hacer esto en Mac OS X es más laborioso que en Linux, donde sólo tenemos que editar el archivo y nada más. En Mac OS X primero editamos en archivo como lo haríamos en Linux:

$ sudo vi /etc/hosts

Agregamos la siguiente entrada para nuestro dominio de ejemplo:

127.0.0.1     localhost.com

Y luego ejecutamos estos comandos:

$ sudo niload -v -m hosts . < /etc/hosts
$ lookupd -flushcache

Y para eliminar una entrada, después de quitarla de /etc/hosts debemos deshacer los pasos anteriores:

$ sudo niload -v -d hosts . < /etc/hosts
$ lookupd -flushcache

Instalando PHP5

Instalamos PHP5 con todo lo que podremos llegar a necesitar jamás con este comando:

sudo port install php5 +fastcgi +mysql5 +sqlite +pear

Verificamos que instalamos bien el paquete ejecutando:

php-cgi -v

Luego deberíamos ver un mensaje como el siguiente:

PHP 5.2.6 (cgi-fcgi) (built: May 21 2008 19:26:19)
Copyright (c) 1997-2007 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies

Configurando PHP5

Agregamos al archivo de configuración de Lighttpd:

fastcgi.server  = ( ".php" =>
                    ( "localhost" =>
                      (
                        "bin-path" => "/opt/local/bin/php-cgi",
                        "socket" => "/opt/local/var/run/php-fastcgi.socket"
                      )
                    )
                  )

En este momento todavía no tenemos totalmente configurado PHP5. En el directorio /opt/local/etc/ tenemos los archivos php.ini-dist y php.ini-recommended, con un par de condiguraciones típicas de ejemplo para PHP. Confiando en su nombre, usamos la recomendada para la configuración de PHP en nuestro servidor local:

$ sudo cp /opt/local/etc/php.ini-recommended /opt/local/etc/php.ini

¡Ahora sólo tenemos que reiniciar Lighttpd para disfrutar de un completo entorno de desarrollo PHP en Mac OS X!

$ sudo lighttpd -D -f /opt/local/etc/lighttpd/lighttpd.conf

Referencias

blog comments powered by Disqus

 

RSS Blog