Proyecto domótica PARTE 7 - Persistir información con MongoDB
Google provee de un software de bases de datos en la nube llamado Firebase, la cual está presente en la mayoría de los ejemplos publicados para proyectos de Smart Home, este software de bases de datos es una buena alternativa para usar, ya que se orienta a documentos en formato JSON similar a MongoDB y es muy fácil de implementar ya que provee de librerías para la mayoría de los lenguajes mayormente usados.
Sin embargo, he desistido de su uso ya que la cantidad de datos que almacenaré son tan pocos (mi listado de dispositivos inteligentes en mi hogar no superan los 15) y el hecho de tener la API y la base de datos en la misma máquina (Raspberry Pi) me disminuyen los tiempos de respuesta, haciendo que las ordenes se ejecuten mucho más rápido, y por último, la opción gratuita de Firebase y Google Cloud no permite la ejecución de llamadas fuera de los servicios de Google Cloud, por lo que significa que tendría que pasarme a un plan de facturación y el costo sería mucho mayor que lo que consume de electricidad mi Raspberry Pi.
Para la construcción de este proyecto he tomado el código fuente de ejemplo de Smart Home de Google y he remplazado la librería y las llamadas de Firebase por Mongoose y MongoDB.
7 Instalación de MongoDB, creación de usuarios y base de datos.
Dado que la arquitectura de la Raspberry Pi 2 es de ARM Hard Float de 32 bits, es necesario usar una versión antigua de MongoDB, la última en ser compatible con esta arquitectura es la 3.0.14.
La instalación se realizará siguiendo las instrucciones del blog de Andy Felong
7.1 Descargar los binarios, en mi caso los dejare en el directorio /opt/mongodb
7.1 Descargar los binarios, en mi caso los dejare en el directorio /opt/mongodb
7.1.1 Crear directiorio mongodb.
cd /opt
sudo mkdir mongodb
7.1.2 Entrar al directorio mongodb y crear directorios bin y tools, luego descargar librerías y extraerlas en forma respectiva.
cd mongodb
sudo mkdir bin
cd bin
sudo wget https://andyfelong.com/downloads/core_mongodb_3_0_14.tar.gz
El comando wget descargará las fuentes para la instalación
sudo tar -zxvf core_mongodb_3_0_14.tar.gz
sudo rm core_mongodb_3_0_14.tar.gz
Una vez extraídos los archivos con el comando tar y eliminado el comprimido con el comando rm, mediante un comando ls se deberían ver los binarios de mongodb dentro del directorio bin
Se debe repetir el mismo procedimiento para las herramientas de mongodb
cd ..
sudo mkdir tools
cd tools
sudo wget https://andyfelong.com/downloads/tools_mongodb_3_0_14.tar.gz
sudo tar -zxvf tools_mongodb_3_0_14.tar.gz
sudo rm tools_mongodb_3_0_14.tar.gz
El comando wget descargará los archivos
hacer un ls para verificar los archivos en el interior
7.1.3 Crear usuario y verificar que exista.
sudo adduser --ingroup nogroup --shell /etc/false --disabled-password --gecos "" --no-create-home mongodb
grep mongodb /etc/passwd
cd ../bin
sudo chown root:root mongo*
sudo chmod 755 mongo*
sudo strip mongo*
sudo cp -p mongo* /usr/bin
cd ../tools
sudo strip mongo*
sudo chown root:root mongo*
sudo chmod 755 mongo*
sudo mv mongo* /usr/bin
sudo mkdir /var/log/mongodb
sudo chown mongodb:nogroup /var/log/mongodb
7.1.6 Crear el directorio para la base de datos con permisos de acceso convenientes.
sudo mkdir /var/lib/mongodb
sudo chown mongodb:root /var/lib/mongodb
sudo chmod 775 /var/lib/mongodb
7.1.7 Crear el archivo mongodb.conf en /etc. (este archivo puede escribirse de distintas formas dependiendo de la versión de MongoDB que esté usando, considere apoyarse en la documentación del motor de base de datos para generarlo correctamente)
cd /etc
sudo nano mongodb.conf
Insertar lo siguiente, presionar ctrl+o y ctrl+x, para guardar y cerrar.
# /etc/mongodb.conf
# minimal config file (old style)
# Run mongod --help to see a list of options
bind_ip = 127.0.0.1
quiet = true
dbpath = /var/lib/mongodb
logpath = /var/log/mongodb/mongod.log
logappend = true
storageEngine = mmapv1
7.1.8 Crear la entrada en de servicio systemd.
cd /lib/systemd/system
sudo nano mongodb.service
insertar lo siguiente, presionar ctrl+o y ctrl+x, para guardar y cerrar.
[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target
[Service]
User=mongodb
ExecStart=/usr/bin/mongod --quiet --config /etc/mongodb.conf
[Install]
WantedBy=multi-user.target
7.1.9 Arrancar el servicio y ver el estado.
sudo service mongodb start
sudo service mongodb status
Presionar q para salir del log
7.2 Solucionar posible falla en dependencias libssl1.0.0 y multiarch-support.
Dado que la versión de mongodb está deprecado, utiliza una librería anticuada que ya no es soportada por Debian, lo que significa que debe ser descargada e instalada manualmente.
7.2.1 Descarga de paquetes de instalación desde repositorios oficiales, luego instalación de librerías mediante la herramienta dpkg del sistema operativo.
wget http://ftp.us.debian.org/debian/pool/main/g/glibc/multiarch-support_2.28-10_armhf.deb
wget http://security.debian.org/debian-security/pool/updates/main/o/openssl/libssl1.0.0_1.0.1t-1+deb8u12_armhf.deb
sudo dpkg -i multiarch-support_2.28-10_armhf.deb
sudo dpkg -i libssl1.0.0_1.0.1t-1+deb8u12_armhf.deb
7.3 Crear usuarios para el contenido de la base de datos
Una vez que el servicio está corriendo puede ingresar a la consola de administración de MongoDB con el siguiente comando:
mongo
7.3.1 Una vez dentro de la consola de MongoDB creamos el usuario root, reemplazar el user y pwd por los que estime convenientes:
use admin
db.createUser({user: "root", pwd: "123456", roles:["root"]})
7.3.2 Habilitar la autenticación en MongoDB
Para ello es necesario volver a modificar el archivo "mongo.conf" que hemos creado anteriormente en el directorio "etc". (este archivo puede escribirse de distintas formas dependiendo de la versión de MongoDB que esté usando, considere apoyarse en la documentación del motor de base de datos para generarlo correctamente)
cd /etc
sudo nano mongodb.conf
Insertar lo siguiente al final del archivo, presionar ctrl+o y ctrl+x, para guardar y cerrar.
auth = true
7.3.3 Reiniciar el servicio y conectarse a la consola de MongoDB.
sudo service mongodb restart
Una vez reiniciado el servicio conéctese usando el usuario root que hemos creado recientemente:
mongo localhost:27017 -u "root" -p "123456" --authenticationDatabase "admin"
7.3.4 Dentro de la consola de MongoDB creamos la base de datos para el proyecto y el usuario a cargo:
use smarthome
db.createUser({user: "itheowner", pwd: "mypassword", roles:["dbOwner"]})
Probamos la correcta conexión a nuestra base de datos smarthome usando la cuenta recién creada.
mongo localhost:27017/smarthome -u "itheowner" -p "mypassword"
-> Siguiente parte ->
Indice
Parte 1) Arquitectura e infraestructura
Parte 5) Conexión segura mediante SSL
Parte 7) Persistir información con MongoDB
Parte 8) Levantar sistema Smarthome
Parte 15) Resultados
Comentarios
Publicar un comentario