viernes, 17 de agosto de 2012

Sistema de monitorización OpenSource: Emoncms3


Desde hace un par de meses llevo trabajando en un proyecto conjunto sobre un sistema de monitorización Open Source. Este proyecto tiene como finalidad que cualquier persona pueda realizar tareas de monitorización usando software y hardware libre. Toda la información del proyecto la podéis encontrar en openenergymonitor.org y en este post voy a explicar como montar la parte software del sistema de monitorización.



Para ello necesitaremos un servidor con el sistema operativo Linux Ubuntu (podéis usar otra versión adaptando los pasos de instalación a dicha distribución) o si no tenéis ningún servidor disponible podréis usar la aplicación VirtualBox para montarlo virtualizado sobre vuestro sistema operativo con el que trabajáis habitualmentee (Windows, MacOs X o Linux). Por supuesto esta última opción no es recomendable para un despliegue para producción con casos reales por el poco rendimiento que da pero si nos puede venir muy bien para probarlo todo y empezar a trastear.

Bueno, primeramente necesitaremos instalar el sistema operativo. Tanto como si lo montáis sobre un servidor físico o en una máquina virtual usando VirtualBox sobre vuestro escritorio o con alguna otra solución de virtualización como VMWare, Xen, etc... lo haremos instalando el Ubuntu Server 12.04 LTS desde esta dirección.

http://www.ubuntu.com/download/server

Lo instalaremos sin ninguna opción de paquetes para instalarlos a mano después según nos vayan haciendo falta y así tener el sistema operativo lo más limpio posible.

Bueno, lo primero que haremos será, teniendo el sistema operativo recién instalado, lo siguiente desde el usuario autorizado para actualizar la instalación

$ sudo su
nos preguntará por la clave que hemos indicado durante la instalación

# apt-get update
# apt-get upgrade
esto tardará un poco por lo que paciencia.

Instalando Apache

Una vez actualizado vamos a instalar el servidor web Apache para poder servir las páginas web

# apt-get install apache2
Una vez instalado podemos ir a la ip de nuestra máquina con el navegador para ver si se ha instalado correctamente.

En mi caso la ip es la 192.168.10.26 y la tuya la puedes averiguar con el comando ifconfig


 y usando el navegador lo comprobamos


Instalando PHP5

Una vez instalado el servidor Apache le toca el turno al php5 con:

# apt-get install php5 libapache2-mod-php5 php-gettext
podemos comprobar si todo está correcto creando un fichero en /var/www denominado index.php con el siguiente contenido:

<?php phpinfo(); ?>

y ejecutarlo desde el navegador


Si todo va bien veremos información de php en el navegador.

Instalación de MySQL

El siguiente paso es la instalación del sistema gestor de base de datos MySQL

# apt-get install mysql-server mysql-client
e introducimos la contraseña para el usurio root de mysql que deseemos cuando nos lo pida. Debemos recordarla ya que la necesitaremos más adelante para crear un usuario específico y la base de datos.

Ahora para dar soporte desde PHP a MySQL instalaremos los siguientes paquetes:

# apt-get install php5-mysql
y reiniciamos Apache con

# /etc/init.d/apache2 restart

Ahora veremos en nuestro index.php que ya tenemos soporte para MySQL desde PHP.


Creación de la base de datos

Emoncms3 trabaja sobre una base de datos para almacenar toda la información de los datos monitorizados así como pantallas, usuarios, etc... para ello vamos a crear un usuario específico en MySQL y será este usuario el dueño de dicha base de datos. Esto nos servirá para aumentar la seguridad ya que dicho usuario sólo tendrá permisos sobre esa base de datos y las acciones de Emoncms3 estarán restringidas por los permisos de dicho usuario.

# mysql -u root -p
nos pedirá el password que hemos indicado cuando instalamos MySQL.

mysql> CREATE USER 'emoncms3user'@'localhost' IDENTIFY BY 'emoncms3userpass'
con esta sentencia creamos el usuario y le asignamos la clave (recordad usar una un poco más compleja ;-)

creamos la base de datos y asignamos como dueño al usuario anteriormente creado.

mysql> CREATE DATABASE emoncms3db;
mysql> GRANT ALL PRIVILEGES ON emoncms3db.* TO emoncms3user@localhost
mysql> \q

ahora podemos probar a conectarnos a la base de datos con el usuario que acabamos de crear

# mysql -u emoncms3user -p emoncms3db
introduciendo la clave de dicho usuario y entrando comprobaremos que todo está correcto.

Instalando Emoncms3 desde el repositorio oficial

Bueno, tenemos ya el servidor web, el PHP y MySQL ahora queda instalar el software de monitorización. Este software se encuentra en un repositorio denominado GitHub en la siguiente dirección:

https://github.com/openenergymonitor/emoncms3

desde ahí se puede ver todo el proyecto OpenSource con las diferentes ramas de desarrollo. Existe una rama DEV que es de pruebas donde desarrollamos nuevas funcionalidades y probamos que todo va bien y una rama principal que es la que usaremos como instalación. Esta rama suele estar actualizada y es la versión más estable de todas por lo que recomiendo que uséis esta última. Luego veremos como ir actualizando el sistema cada vez que haya nuevas actualizaciones.

Como vamos a instalarlo todo de manera que podamos actualizar facilmente la mejoras que se vayan incorporando, debemos instalarnos el cliente Git (que es un software para gestionar repositorios de desarrollo) de la siguiente manera:

# apt-get install git-core
y clonamos el repositorio emoncms3 con todos los fuentes

# cd /var/www
# git clone git://github.com/openenergymonitor/emoncms3.git

o si estáis detrás de un firewall podéis usar la conexión por https que tardará algo más pero os evitará tener problemas con dicho cortafuegos
# git clone https://github.com/openenergymonitor/emoncms3.git

cuando acabe tendréis un directorio denominado emoncms3. Nuestro software recién instalado estará en el directorio /var/www/emoncms3 de nuestro servidor. También podéis descargar el fichero comprimido con todos los fuentes y soltarlo en dicho directorio pero perderéis la facilidad de descargar automaticamente las actualizaciones teniendo que realizar las tareas de despliegue de nuevas versiones realizando la misma operación.

Cada vez que haya una nueva versión podemos actualizar nuestra instalación desde el directorio /var/www/emoncms con el siguiente comando siempre que hayamos instalado el software usando git.

# git pull
Una vez instalado podemos ir con nuestro navegador al software instalado usando la ip_de_vuestro_servidor/emoncms3


os saldrá el siguiente mensaje de error. Quiere decir que nos falta crear y configurar el fichero de configuración de la aplicación. Copiamos el que trae de plantilla en el directorio Includes y lo modificamos con nuestro parámetros

# cp Includes/default.settings.php Includes/settings.php
recargamos la página y veremos el siguiente aviso:


ahora editamos el fichero settings.php que se encuentra en Includes/settings.php



y en el fichero setup.php del directorio de instalación descomentamos (quitamos las barras de) la línea donde pone

// $runnable = TRUE

Ahora cambiaremos por cuestiones de seguridad el propietario del proyecto

# chown -R www-data.www-data /var/www/emoncms3
y borraremos el fichero index.php o le cambiaremos el nombre para que nadie conozca los detalles de nuestra instalación

# rm /var/www/index.php
Ahora podemos volver a lanzar la página web del proyecto y veremos como se crean las tablas necesarias.


Pulsaremos sobre "Continue to emoncms" y veremos la página principal de nuestro sistema de monitorización.



Emoncms3 utiliza el modo de reescritura de URL para funcionar por lo que debemos instalarlo antes de continuar


# a2enmod rewrite

y editar el fichero /etc/apache/sites-available/default añadiendo las opciones para el directorio /var/www/emoncms3


y reiniciamos apache de nuevo


# /etc/init.d/apache restart

Ya sólo queda volver a comentar la línea $runnable = TRUE; del fichero setup.php para que nadie pueda llamarlo, elegir un nombre de usuario y contraseña y pulsar sobre "Register" para entrar en nuestro software.

En estos momento ya tendréis vuestro sistema de monitorización propio y podéis generar pantallas y gráficos con datos enviados desde vuestros dispositivos de medición o sensores, como por ejemplo Arduino. En próximos post daré más detalles de como realizar todo esto y crear aplicaciones como esta:


Existe una opción disponible que os permite monitorizar igualmente vuestros dispositivos sin necesidad de montar el software y es usando una cuenta oficial en la aplicación que hemos desplegado de manera libre en
http://emoncms.org/


Recordad que podéis ver mucha más información en la página principal del proyecto en http://openenergymonitor.org y si tenéis cualquier problema o duda con la instalación contactad conmigo o utilizad el foro de soporte.