Node-RED es una herramienta de desarrollo basada en flujo para programación visual desarrollada originalmente por IBM para conectar dispositivos de hardware, API y servicios en línea como parte de Internet of Things.

En este artículo se explicará brevemente la instalación de Node-Red en un Ubuntu 20.04 LTS mediante NPM con Node.js. Nuestra recomendación es instalar la última versión de Node.js y puedes comprobarla desde su repositorio de Github.

La última versión actualmente es la Node.js v17.x, por lo tanto, añadimos el repositorio de dicha versión:

# curl -fsSL https://deb.nodesource.com/setup_17.x | sudo -E bash - 

Luego actualizamos los repositorios, actualizamos paquetes e instalamos Node.js:

# apt update && apt upgrade -y && apt install -y nodejs

Una vez ejecutado el comando comprobamos que versiones han sido instadas de Node y NPM:

# node -v && npm -v

Instalación de Node-Red:

# npm install -g --unsafe-perm node-red

Instalación de Node-Red-Admin:

# npm install -g --unsafe-perm node-red-admin

Posteriormente genera una hash para la contraseña del usuario:

# node-red admin hash-pw 

Te solicitará la introducción de la contraseña que deseas utilizar. Recuerda guardar hash para añadirlo al fichero de configuración posteriormente, pero puedes probar el funcionamiento de Node-Red con:

# node-red --settings

Para probarlo utiliza un navegador e introduce la URL http://dirección_IP_servidor:1880. Recuerda tener abierto el puerto por defecto de Node-Red (1880 TCP) en el perfil de Firewall asignado en el servidor.

En el navegador debería aparecer el login de Node-Red:

node-red.PNG

Luego detén el proceso con "Ctrl+C" para editar el fichero de configuración para habilitar el HTTPS, descomentar las líneas de autentificación y añadir el hash de la contraseña.

Para la activación de HTTPS es necesario un certificado con la llave respectiva, podrías configurar un proxy inverso con Apache o NGINX para utilizar Certbot para la configuración y renovación automática.

Aunque simplemente puedes elegir por utilizar un certificado autosignado, para ello puedes ejecutar lo siguiente:

# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/selfsigned.key -out /etc/ssl/certs/selfsigned.crt

Una vez introducido los datos y generado los ficheros, edita el fichero de configuración:

# vi /root/.node-red/settings.js

En el apartado de https deberás descomentarlo y añadir las rutas:

  https: {
key: require("fs").readFileSync('/etc/ssl/private/selfsigned.key'),
cert: require("fs").readFileSync('/etc/ssl/certs/selfsigned.crt')
},

Luego haz lo mismo con el apartado adminAuth, debería ser similar al siguiente contenido (recuerda modificar el hash por el hash generado):

  /** To password protect the Node-RED editor and admin API, the following
* property can be used. See http://nodered.org/docs/security.html for details.
*/
adminAuth: {
type: "credentials",
users: [{
username: "admin",
password: "$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN.",
permissions: "*"
}]
},

También podrías añadir otro usuario por ejemplo de solo lectura (opcional):

  /** To password protect the Node-RED editor and admin API, the following
* property can be used. See http://nodered.org/docs/security.html for details.
*/
adminAuth: {
type: "credentials",
users: [{
username: "admin",
password: "$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN.",
permissions: "*"
},
{
username: "invitado",
password: "$2a$08$zZWtXTja0fB1pzD4sHCMyOCMYz2Z6dNbM6tl8sJogENOMcxWV9DN.",
permissions: "read"
}]
},

Luego para probar las credenciales, puedes iniciarlo de nuevo ("Ctrl+C" para detenerlo):

# node-red -v

Una vez que hayas verificado el funcionamiento de las credenciales, puedes utilizar servicio para que arranque automáticamente Node-Red durante el inicio del sistema operativo con systemd. Para ello crea el fichero del servicio:

# vi /etc/systemd/system/Node-Red.service

En dicho fichero del servicio debería tener el siguiente contenido:

  # This script work on any system using systemd as the init process.
# It works on Ubuntu Focal.
# If you have Debian/Rapbian Wheezy and want to use this script with systemd
# follow the information here : https://wiki.ubuntu.com/systemd
# To consult the log : journalctl -u Node-RED
[Unit]
Description=Node-RED is a tool for wiring together hardware devices, APIs and online services in new and interesting ways.
After=syslog.target network.target
Documentation=http://nodered.org/
[Service] Environment="NODE_OPTIONS=" Environment="NODE_RED_OPTIONS=-v" #Full Path to Node.js
ExecStart=/usr/bin/node-red $NODE_OPTIONS $NODE_RED_OPTIONS
WorkingDirectory=/root/.node-red/
# User/Group that launches node-RED (it's advised to create a new user for Node-RED)
# You can do : sudo useradd node-red
# then change the User=root by User=node-red
User=root
Group=root
Nice=10
SyslogIdentifier=Node-RED
StandardOutput=syslog
# Make Node-RED restart if it fails
Restart=on-failure
# Node-RED need a SIGINT to be notified to stop
KillSignal=SIGINT
[Install] WantedBy=multi-user.target

Por último recarga los demonios, activa servicio, inícialo y comprueba el estado:

# systemctl daemon-reload && systemctl enable Node-Red.service && systemctl start Node-Red.service && systemctl status Node-Red.service

Esperamos haberte ayudado con este tutorial. ¿Lo has probado? ¡Déjanos tus comentarios! 🙂

Recuerda, si tienes consultas sobre esta u otra cuestión relacionada con tus servidores en Clouding, no dudes en escribir a soporte@clouding.io ¡Estamos a tu lado para lo que necesites!