21 diciembre 2012

Instalando Lighttpd+PHP 5+Sqlite en la RasPI

Para la serie de articulos de Arduino y Raspberry PI estaba pensando en hacer un pequeño dispositivo que se pudiera controlar vía Internet. Para ello necesito instalar un servidor web con soporte de PHP en el que pudiera programar una sencilla aplicación web.

En esta corta entrada, les voy a guiar paso a paso para realizar la instalación de Lighttpd+PHP 5+Sqlite. Para ello solo van a necesitar su Raspberry PI, asegurarse de que está conectada a Internet y seguir estos sencillos pasos.

Ojo, como no quiero simplemente darles una "receta de cocina" que diga "ejecuta estos comandos", intentaré comentar cada uno de los mismo, trataré de explicar que hace y para que sirve y espero que en el camino también aprendan algo de lo que están instalando en vez de seguir ciegamente los comandos que un extraño en Internet les ha dado.


1-Instalando el Lighttpd


El lighttpd es un pequeño servidor web que tiene la característica particular que usa muy poca memoria. Si bien podemos instalar un Apache en la Raspberry PI lo mejor es elegir las herramientas que utilicen la menor cantidad de recursos, además, muy posiblemente para aplicaciones sencillas posiblemente no utilicemos mucha de la funcionalidad que nos provee el Apache, así que mantendremos las cosas sencillas con poco uso de memoria por lo que utilizaremos el Lighttpd.

Para instalarlo vamos a hacer uso de la herramienta apt-get por medio del siguiente comando: 
$ sudo apt-get install lighttpd

Por defecto, luego de instalarse el servidor web se inicia automáticamente el servicio. En los pasos siguientes vamos a cambiar un par de configuraciones y para evitar el tener que estar reiniciando el servicio mejor lo detenemos de una vez haciendo uso del comando "service" de la siguiente manera:
$ sudo service lighttpd stop

2-Instalando PHP 5


El siguiente paso es instalar PHP 5, para ello vamos a usar siempre el comando apt-get pero antes de continuar me gustaría explicar una consideración a tomar en cuenta...

...Cuando me encontraba pensando en la aplicación de ejemplo que quería desarrollar para Arduino-Raspberry PI me imaginé que tener una pequeña base de datos para guardar los eventos generados por el Arduino sería de mucha utilidad. El problema es que un gestor relacional como MySQL me parece un martillo neumático para un problema que solo necesita de cinta doble cara

Por suerte ya alguien ha pensado en la solución al problema de un gestor de bases de datos pequeños compatibles con SQL y se llama Sqlite.

Sqlite no es tanto un gestor sino más bien una biblioteca de funciones que está disponible para muchos lenguajes de programación. Su trabajo es el de funcionar como un "gestor minimalista" de bases de datos. Nos permite crear tablas en "el aire", se maneja con simples archivos y es soportado por las extensiones PDO de PHP. A pesar de trabajar con archivos simples podemos realizar consultas utilizando nuestra muy querida sintaxis de SQL.

Para nuestra aplicación vamos a necesitar las siguientes herramientas:
  • PHP 5
  • PHP 5 - CGI (para el funcionamiento con Lighttpd)
  • Extensiones PHP para Sqlite
Todo lo anterior lo podemos instalar ejecutando el siguiente comando:
$ sudo apt-get install php5 php5-cgi php5-sqlite

Nota: Al instalar PHP 5 apt-get instalará tambien el servidor web Apache. Como dije antes, tenemos recursos bastante limitados y el Apache si bien es lo más completo que hay en servidores web, posiblemente no vayamos a utilizar ni la mitad de su funcionalidad para el ejemplo sencillo que queremos armar.

Podemos deshabilitar el apache ejecutando los siguientes comandos:

Primero detenemos el servicio:
$ sudo service apache2 stop

Y luego con el comando update-rc.d eliminamos la entrada del apache del arranque, esto evitará que sea iniciado al encender nuestro Raspberry PI.
$ sudo update-rc.d -f apache2 remove

Nota: Este comando también funciona para otros servicios.

3-Configurando PHP en el Lighttpd


Este paso es muy corto, en este momento tenemos que activar las configuraciones de PHP en Lighttpd. Afortunadamente ya se incluyen los archivos de configuración de PHP, sin embargo estos no están habilitados por defecto.

Para habilitar PHP tenemos que correr el siguiente comando que habilita los móduos fastcgi y la configuración fastcgi para PHP.
$ sudo lighttpd-enable-mod fastcgi fastcgi-php

4-Probando que todo funcione


Primero iniciamos el servicio de lighttpd con el comando "service":
$ sudo service lighttpd start

Luego nos cambiamos a la carpeta donde estan los archivos web:
$ cd /var/www

Una vez en el directorio tenemos que crear un archivo "test.php" utilizando nuestro editor favorito y nos aseguramos que contenga el siguiente código:
<?php
phpinfo();

Para verificar que todo funciona debemos entrar a la dirección IP que tiene asignado nuestra RasPI a través de otra computadora o si estamos trabajando localmente podemos acceder a http://127.0.0.1/test.php 
Al acceder a esta dirección, nos tiene que mostrar la página de Info de PHP y una vez adentro solo verificamos que este habilitada la extensión para sqlite.

Conclusión


Si siguen estos pasos podran tener listo su servidor Lighttpd en su Raspberry PI en menos de quince minutos con soporte para PHP incluido. Las próximas entradas hablaremos un poco de como combinar la Raspberry PI con nuestro Arduino y una pequeñisima aplicación web para hacer cosas muchísimo más interesantes.
No habiendo nada más que decir.. ¡Hasta Pronto!

3 comentarios:

Jesús Alberto Pinedo dijo...

Hace unos días que descubrí tu blog y me parece muy interesante. De hecho ya he quitado el apache de mi raspi y he puesto el lighthhtp. He configurado todo tal y como ponía en tu artículo pero tengo una duda con respecto a sqllite, ¿no hay que instalarla como tal? ¿basta con las funciones para php? tenía instalada mysql pero como dices es matar moscas a cañonazos.
Mi idea es aprender cosillas con la raspi básicamente y tus entradas me parecen muy interesantes, pero estoy pensando usar los puertos GPIO directamente y no it a por el Arduino al menos de momento.
Si pudieras explicar un poco más el tema de sqllite te lo agradecería.
Gracias,

Mario Gómez dijo...

¡Hola Jesus!

Justamente en estos días estoy terminando la segunda entrada sobre el mini proyecto Arduino-Rapberry PI. Pero te adelanto un poco:

La razón por la que no es necesario "instalar" un gestor para SQLite es que este tipo de bases son sumamente sencillas, son literalmente un solo archivo por base de datos, SQLite por tanto, más que un gestor, es un conjunto de bibliotecas que proveen de una "interfaz" para poder acceder a los datos de estos archivos por medio de consultas SQL.

A diferencia de un gestor grande la base se puede crear al accederla, si no existe una tabla la creas "al vuelo", es decir cuando las necesites. Esta es la razón por la cual no es necesario instalar nada mas. Las funciones de PHP de SQLite (y de otros lenguajes) simplemente te facilitan el poder acceder a estas bases de datos de archivos por medio de consultas SQL.

Si te esperas un par de días en lo que tengo lista la proxima entrada veras un ejemplo de como se puede utilizar SQLite para algo más interesante. :)

Respecto al GPIO, realmente no lo he "tocado mucho" porque los proyectos que tengo en mente requieren de mas entradas y más funcionalidad (conversion A/D por ejemplo), así que inevitablemente o compraba un shield de prototipos para la RasPI o utilizaba el Arduino como "shield" de prototipos.

Dejame investigar un poquito más de las GPIO del Raspberry PI y tal vez puedo escribir algo que te sea útil.

Saludos y gracias por visitar mi BLOG :)

Jesús Alberto Pinedo dijo...

Muchas gracias por tu respuesta.
Hoy espero poder leer tranquilamente tu nuevo artículo.
Saludos,