Dashboard de servicios

Fecha publicación
#
26
Dificultad
Básico
3 more properties
Publicado
tags
i40sys, industry 4.0, industry40.systems, industrial, remote access, acceso remoto, plc, siemens, omron, ubuntu, linux, iot gateway, gateway, iot, internet of things, docker, container, ubuntu, node-red, programming, influxdb, database, bases de datos, series temporales, bbdd, db, query, flux, grafana, graficos, dashboard, dashboards, homer, nginx, darkhttpd, reverse proxy, rproxy, proxy

Descripción

Ya empezamos a tener algunos servicios en nuestro IoT Gateway y más de uno tiene interficie de gestión Web. Así pues, nada más útil que hacer una página que los liste todos y a través de un enlace nos permita acceder de forma transparente y sencilla a los mismos.
Esto también será muy práctico cuando empecemos a desarrollar soluciones y funciones para nuestros clientes. Ya que podremos referenciar los dashboards, sinópticos y otros elementos desde esta única página web.

Proxy inverso con NGINX

NGINX permitirá acceder a nuestros servicios desde un único punto de acceso.

Directorios y extracción de ficheros

Descarga el siguiente fichero y lo copiamos al directorio /docker-data de nuestro IoT Gateway:
y ejecuta los siguientes parámetros:
Bash
cd /docker-data
# asumimos que el fichero nginx.tar.gz esta en este directorio
tar xvfz nginx.tar.gz
si este proceso ha funcionado adecuadamente al entrar en el directorio nginx y ejecutar el comando tree deberíamos ver esta estructura de ficheros.
YAML
.
├── data
├── docker-compose.yml
├── etc
│   ├── conf.d
│   │   └── default.conf
│   ├── fastcgi_params
│   ├── koi-utf
│   ├── koi-win
│   ├── mime.types
│   ├── nginx.conf
│   ├── scgi_params
│   ├── uwsgi_params
│   └── win-utf
├── html
│   └── index.html
└── logs

Fichero /docker-data/nginx/docker-compose.yml

YAML
version: '3.8'
services:
  nginx:
    image: nginx:latest
    container_name: nginx
    restart: unless-stopped
    volumes:
      - ./etc:/etc/nginx:ro
      - ./logs:/var/logs/nginx
      - ./html:/usr/share/nginx/html:ro
      - /etc/localtime:/etc/localtime:ro
    environment:
      - TZ="CET"
    command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"
    ports:
      - 80:80
    extra_hosts:
			# pon aquí la IP de tu host
      host: 10.2.0.54
    networks:
      - i40sys
networks:
  i40sys:
    external:
      name: i40sys

Modificación de los servicios web ya instalados para trabajar con el proxy inverso

Cambios en Grafana

Shell
cd /docker-data/grafana
docker-compose down
En el fichero de configuración de Grafana (/docker-data/grafana/etc/grafana.ini) hay que localizar este trozo de código:
YAML
# The full public facing url you use in browser, used for redirects and emails
# If you use reverse proxy and sub path specify full url (with sub path)
;root_url = %(protocol)s://%(domain)s:%(http_port)s/

# Serve Grafana from subpath specified in `root_url` setting. By default it is set to `false` for compatibility reasons.
;serve_from_sub_path = false
y añadimos una línia como esta
YAML
# The full public facing url you use in browser, used for redirects and emails
# If you use reverse proxy and sub path specify full url (with sub path)
;root_url = %(protocol)s://%(domain)s:%(http_port)s/
root_url = %(protocol)s://%(domain)s:%(http_port)s/board

# Serve Grafana from subpath specified in `root_url` setting. By default it is set to `false` for compatibility reasons.
serve_from_sub_path = true
volver a levantar Grafana
Shell
cd /docker-data/grafana
docker-compose up -d

Cambios en Node-RED

Shell
cd /docker-data/node-red
docker-compose down

Cambios en /docker-data/node-red/docker-compose.yml

Básicamente dejamos de usar el stack de red del host para poner NodeRED en nuestra red de contenedores privada llamada i40sys.
YAML
version: "3.7"
services:
  node-red:
    container_name: node-red
    image: nodered/node-red:latest
    environment:
      - TZ=Europe/Madrid
    volumes:
      - /dev:/host/dev
      - /etc/localtime:/etc/localtime:ro
      - ./data:/data
      - ./known_hosts:/usr/src/node-red/.ssh/known_hosts
    #network_mode: host
    healthcheck:
        #test: ["CMD", "curl", "--fail", "http://localhost:1880", "||","exit 1" ]
        test: ["CMD-SHELL","node /healthcheck.js"]
        interval: 60s
        timeout: 3s
        retries: 3
        start_period: 30s
    restart: unless-stopped
    privileged: true
    networks:
      - i40sys
networks:
  i40sys:
    external:
      name: i40sys

Cambios en el fichero de configuración

En el fichero de configuración de NodeRED (/docker-data/node-red/data/settings.js) localizamos estas líneas:
JSON
// The following property can be used in place of 'httpAdminRoot' and 'httpNodeRoot',
    // to apply the same root to both parts.
    //httpRoot: '/red',
y añadimos una nueva línia para que quede exactamente así:
JSON
// The following property can be used in place of 'httpAdminRoot' and 'httpNodeRoot',
    // to apply the same root to both parts.
    //httpRoot: '/red',
    httpRoot: '/flows',
volver a levantar Node-red
Shell
cd /docker-data/node-red
docker-compose up -d

Instalación y configuración del dashboard de servicios

El dashboard que hemos creado es como este:
Untitled
Y el proyecto que hemos usado para esto es:

Creamos los directorios de trabajo:

Descarga el siguiente fichero y lo copiamos al directorio /docker-data de nuestro IoT Gateway:
y ejecuta los siguientes parámetros:
Bash
cd /docker-data
# asumimos que el fichero nginx.tar.gz esta en este directorio
tar xvfz dashboard.tar.gz
si este proceso ha funcionado adecuadamente al entrar en el directorio dashboard y ejecutar el comando tree deberíamos ver esta estructura de ficheros.
JSON
.
├── assets
│   ├── additionnal-page.yml.dist
│   ├── config.yml
│   ├── config.yml.dist
│   ├── config.yml.dist.sample-sui
│   ├── custom.css
│   ├── icons
│   │   ├── favicon-16x16.png
│   │   ├── favicon-16x16.png_
│   │   ├── favicon-32x32.png
│   │   ├── favicon-32x32.png_
│   │   ├── icon-any.png
│   │   ├── icon-any.svg
│   │   ├── icon-maskable.png
│   │   └── safari-pinned-tab.svg
│   ├── logo_i40_systems_fondo_blanc.png
│   ├── manifest.json
│   └── tools
│       ├── sample2.png
│       └── sample.png
└── docker-compose.yml

Fichero /docker-data/dashboard/docker-compose.yml

YAML
version: "3"
services:
  homer:
    image: b4bz/homer
    container_name: homer
    volumes:
      - ./assets/:/www/assets
    environment:
      - UID=1000
      - GID=100
    restart: unless-stopped
    networks:
      - i40sys
networks:
  i40sys:
    external:
      name: i40sys