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:
cd /docker-data
# asumimos que el fichero nginx.tar.gz esta en este directorio
tar xvfz nginx.tar.gzsi este proceso ha funcionado adecuadamente al entrar en el directorio nginx y ejecutar el comando tree deberíamos ver esta estructura de ficheros.
.
├── 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
└── logsFichero /docker-data/nginx/docker-compose.yml
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: i40sysModificación de los servicios web ya instalados para trabajar con el proxy inverso
Cambios en Grafana
cd /docker-data/grafana
docker-compose downEn el fichero de configuración de Grafana (/docker-data/grafana/etc/grafana.ini) hay que localizar este trozo de código:
# 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 = falsey añadimos una línia como esta
# 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 = truevolver a levantar Grafana
cd /docker-data/grafana
docker-compose up -dCambios en Node-RED
cd /docker-data/node-red
docker-compose downCambios 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.
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: i40sysCambios 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:
// 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í:
// 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
cd /docker-data/node-red
docker-compose up -dInstalación y configuración del dashboard de servicios
El dashboard que hemos creado es como este:

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:
cd /docker-data
# asumimos que el fichero nginx.tar.gz esta en este directorio
tar xvfz dashboard.tar.gzsi este proceso ha funcionado adecuadamente al entrar en el directorio dashboard y ejecutar el comando tree deberíamos ver esta estructura de ficheros.
.
├── 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.ymlFichero /docker-data/dashboard/docker-compose.yml
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
