Saltar navegación

Activa JavaScript para disfrutar de los vídeos de la Mediateca.

SESIÓN_20_:02_2025_IoT_ Tecnologías NFC, LPWAN Y COMUNICACIONES POR SATÉLITE - Contenido educativo

Ajuste de pantalla

El ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:

Subido el 24 de febrero de 2025 por Mediateca ismie

17 visualizaciones

Descargar la transcripción

Modesto y Almudena. Vale. Os pego ahí en el chat. Faltáis Modesto y Almudena, ¿vale? Pero ahora voy a ver cómo lo resuelvo. 00:00:01
Voy a poner en el chat un documento. Ese documento aparece vuestro nombre. Tenéis que buscar vuestro nombre y el servidor que os ha correspondido, ¿vale? 00:00:13
Que se llaman ISMIA-02, ISMIA-03. 00:00:27
Vale, y entonces me faltan... 00:00:32
¿Quién me ha dicho que falta? 00:00:34
¿Al modelo? 00:00:35
Ahí hay una IPv4. 00:00:37
Sí. 00:00:41
Al modelo y modesto me faltan. 00:00:42
Al modelo y modesto. 00:00:46
Vale. 00:00:49
Vale. 00:00:50
Bueno, tengo una limitación porque solamente me permiten crear nueve servidores, ¿vale? 00:00:51
Entonces voy a crear... Bueno, primero, buenas tardes a todos, perdonad. 00:00:59
Y vamos a empezar la sesión de hoy que la vamos a dedicar al Stack IoT. 00:01:03
Entonces, el Stack IoT es un conjunto de aplicaciones que resuelven el problema de integración y uso de dispositivos IoT. 00:01:09
desde la ingesta de los datos hasta el análisis de los datos, su representación y su almacenamiento. 00:01:19
Entonces, vamos a ver que vamos a utilizar varias aplicaciones para poder realizar todas estas funciones. 00:01:26
Como os digo, ingesta, que la vamos a hacer con MQTT y con una aplicación que se llama Mosquito. 00:01:32
Almacenamiento, que lo vamos a hacer con un sistema de bases de datos de series temporales que se llama InfluenceDB. 00:01:39
La parte de analítica, que la vamos a hacer con un lenguaje de programación que se llama Node-REF, 00:01:44
específico para internet de las cosas 00:01:48
que es un lenguaje de programación visual 00:01:50
bastante sencillo de utilizar 00:01:52
y luego representación y envío de alertas 00:01:53
lo vamos a hacer con Grafana 00:01:56
entonces 00:01:58
esta clase la suelo hacer 00:01:59
con Raspberry Pi 00:02:02
el problema que hay es que el precio de las Raspberry Pi 00:02:03
si están un poco disparado 00:02:06
entonces no merece la pena 00:02:07
comprarlas al precio que están ahora 00:02:10
porque se espera que vuelvan a 00:02:11
normal 00:02:13
entonces lo que he hecho es 00:02:14
crearos un servidor 00:02:17
en la nube a cada uno de vosotros 00:02:19
que son esos datos que os he mandado ahí 00:02:20
y para que veáis como se hace eso 00:02:22
para los que no lo hayáis hecho nunca 00:02:24
el último lo he dejado para hacerlo 00:02:26
ahora manualmente 00:02:28
entonces voy a empezar por esa parte 00:02:29
por crear un servidor 00:02:32
y ese servidor lo podéis considerar como si fuera 00:02:33
vuestra Raspberry Pi 00:02:36
o sea nosotros lo vamos a usar como si fuera un servidor 00:02:37
en el borde pero como veis 00:02:40
puede funcionar perfectamente también en la nube 00:02:42
entonces voy a empezar por compartir pantalla 00:02:44
voy a compartir toda la pantalla 00:02:46
para que lo veáis todo 00:02:50
y ahora me voy a ir 00:02:51
a Headner 00:02:54
Headner es el proveedor que utilizo 00:02:56
yo para servidores, el problema que 00:02:58
tengo es que me limita a 10 servidores 00:03:00
entonces solo voy a poder crear 9 00:03:02
sé que soy 10, entonces voy a ver 00:03:04
como lo resuelvo, estoy pensando 00:03:06
ahora mismo a ver como se me ocurre resolverlo 00:03:08
pero fijaos, aquí lo que tengo es 00:03:10
un proveedor 00:03:12
que ofrece 00:03:13
servicios en la nube, concretamente 00:03:15
este ofrece 00:03:19
si vamos aquí al panel 00:03:20
de control, veis que ofrece la posibilidad de crear 00:03:22
servidores, volúmenes, buckets, que son 00:03:24
sistemas de almacenamiento, balanceadores de 00:03:26
carga, hiperflotantes, redes, firewalls 00:03:28
demás, entonces yo lo que he hecho aquí 00:03:31
es crearme un proyecto 00:03:32
que se llama Ismier, y en ese 00:03:35
proyecto yo ya he creado antes de empezar 00:03:36
la clase, tres servidores, el 6 00:03:38
el 7 y el 8, y ahora 00:03:40
voy a crear un servidor nuevo para que veáis como 00:03:42
se hace esto, ¿vale? Entonces le digo que quiero añadir un servidor nuevo y lo primero 00:03:44
que me va a preguntar es en qué ubicación quiero poner el servidor. Como veis, este 00:03:50
proveedor ofrece en Nuremberg, Falkenstein, Helsinki, Singapur y en dos ubicaciones en 00:03:53
Estados Unidos. Aquí tenéis que tener en cuenta que el precio de los servidores varía 00:03:58
en función de dónde lo ubiquéis, ¿vale? Entonces hay ubicaciones que son más económicas 00:04:04
que otras. Yo normalmente uso un Nuremberg porque suele ser la más económica y además 00:04:09
nos cae cerca porque es Europa Central 00:04:14
con lo cual reducimos las latencias 00:04:16
pero bueno, esto es algo que tendréis que valorar 00:04:18
con el proveedor que vosotros utilicéis 00:04:19
entonces yo le digo que quiero 00:04:21
crear un servidor en Nuremberg 00:04:23
me pregunta que sistema 00:04:26
operativo quiero utilizar, yo hoy voy a usar 00:04:28
Debian, concretamente la versión 12 00:04:30
entonces simplemente elijo 00:04:32
la versión 12 de Debian 00:04:34
y a continuación me dice que tipo de servidor 00:04:35
quiero crear, si quiero crear un servidor 00:04:37
compartido o un servidor 00:04:40
dedicado 00:04:42
En este caso, yo estoy creando a todos servidores compartidos. Son estos servidores de aquí de la izquierda, que está pensado, como indica aquí, para aplicaciones con un tráfico intermedio y que requieren un uso de la CPU bajo. 00:04:43
Sin embargo, si tú quieres una virtual CPU, son todos CPUs virtuales, pero si quieres una para ti solo, dedicada, esa ya permite un tráfico mayor y una capacidad de cómputo sostenida, no como la otra que es para cargas bajas. 00:04:57
Como veis, para los compartidos te ofrece dos arquitecturas, la arquitectura x86 o bien la RM64 basada en procesadores Ampere. 00:05:15
Yo estoy usando x86 y veis que luego aparece debajo el precio que tienen los servidores, que obviamente varía según sus características. 00:05:26
Yo, por ejemplo, estoy creando hoy para vosotros servidores con dos CPUs virtuales, 4 GB de RAM, 40 GB de disco de estado sólido y hasta 20 TB de tráfico. 00:05:35
Y esto tiene un coste de 0,6 céntimos a la hora. 00:05:50
Eso es lo que me van a cobrar con un máximo de unos 4 euros al mes. 00:05:54
Eso es lo que me cuesta tener este servidor. 00:05:59
Como veis, la oferta es variada. 00:06:01
Si vamos bajando, bueno, el que he elegido es equivalente aproximadamente a una Raspberry Pi intermedia, ¿vale? 00:06:04
Las Raspberry Pi tienen un único procesador con cuatro núcleos, aquí tenemos dos núcleos, 4 GB, bueno, es parecido. 00:06:10
Pero como veis, podemos ir bajando y tenemos equipos ya con 16 CPUs, 32 GB de RAM, incluso se pueden solicitar otros equipos más potentes aún. 00:06:17
Bueno, eso por un lado. 00:06:26
Luego veis que tiene aquí una serie de características como la de utilizar una dirección IPv4, 00:06:28
que como veis, curiosamente eso tiene un coste. 00:06:34
Sin embargo, si usásemos dirección IPv6, esas son gratuitas. 00:06:36
Ya sabéis que las IPv4 se han agotado y por eso las reutilizan y tienen un coste. 00:06:41
Más cosas. 00:06:46
Podemos utilizar nuestras credenciales SH. 00:06:48
En este caso yo, por no complicar la clase, lo voy a usar sin certificados SSH. 00:06:50
Y por último, simplemente tengo que añadir un nombre al servidor. Lo voy a llamar ismie09. Le digo crear y lo que está ocurriendo ahora mismo es que me están creando ese servidor, como podéis ver aquí, que está al 0% y dice que va a estar disponible en menos de un minuto. 00:06:55
entre tanto estaré recibiendo 00:07:15
aquí un correo indicándome 00:07:18
que se ha creado el servidor 9 00:07:20
este servidor 00:07:22
se lo voy a asignar al Mudena 00:07:24
que es la siguiente que tenía en la lista 00:07:25
y me falta Modesto 00:07:27
yo creo que tú vas a tener que trabajar 00:07:29
con el mío, vamos a compartir el servidor tú y yo 00:07:32
entonces esto que pongo 00:07:34
en el chat ahora es para el Mudena 00:07:36
voy a ponerlo 00:07:37
perdona yo he llegado más tarde 00:07:39
no sé si tengo que apuntar algo 00:07:43
A ver, ¿ha llegado alguien después de...? 00:07:45
No, yo he llegado hace 10 minutos o algo así. 00:07:49
¿Quién es? ¿Quién está hablando, perdón? 00:07:53
Adrián. 00:07:56
Adrián, vale, pues Adrián también. Te pongo en la lista, ¿vale? Te tengo entonces debajo de Modesto. 00:07:58
Adrián y Modesto, vale. 00:08:03
Ahora veo cómo resuelvo esto porque es que el problema es que estamos limitados a usar un máximo de 10 servidores. 00:08:07
vale, entonces 00:08:13
en el chat 00:08:14
lo que pongo a continuación es para el Modena 00:08:16
y vosotros me temo que tendréis 00:08:18
que compartir 00:08:23
el mío, vale, voy a 00:08:25
voy a compartiros el mío 00:08:27
el ISMIE01 y trabajáis con él 00:08:28
vale, bueno, ya tenéis 00:08:31
ahí los servidores, vale 00:08:33
no hagáis nada con ellos, de momento 00:08:34
vamos a hacer la presentación para que entendáis de qué va 00:08:36
todo esto y luego os iré pidiendo 00:08:39
que vayáis entrando al servidor y que hagamos una serie de ejercicios. 00:08:41
Entonces, este tema normalmente, como os digo, lo hago sobre Raspberry Pi, 00:08:48
con la idea de explicar lo sencillo que es desplegar un sistema de Internet de las cosas en el borde, 00:08:54
ya no en la nube, sino en el Edge. 00:09:00
Entonces, vais a ver que lo interesante de este método es que es idéntico desplegar en la nube que desplegar en el Edge. 00:09:02
Entonces lo que normalmente hacemos con una Raspberry Pi en local, vosotros hoy lo vais a hacer con un servidor en la nube. 00:09:10
No voy a entrar en los detalles de la Raspberry Pi porque entiendo que los conocéis, que son single board computers, placas que son como ordenadores personales en una sola placa. 00:09:16
Hay varios modelos, como podéis ver, están muy de moda los Compute Module, estos que veis aquí abajo a la izquierda. 00:09:26
Y el problema que ha habido es que con la crisis de los semiconductores se ha elevado el precio muchísimo. 00:09:33
Estas placas que originalmente iban a costar 5 euros, pues hablando de la Raspberry Pi 4, pues te sale a lo mejor por 100 euros o algo así. 00:09:37
Lo cual no tiene mucho sentido. 00:09:45
Aquí tenéis la Raspberry Pi 4, el modelo B, para que veáis todos los periféricos que se pueden conectar a este tipo de equipos. 00:09:48
Como veis trae un microcontrolador ARM con 4 núcleos de 64 bits y que además incluye una GPU. 00:09:56
comunicaciones wifi y bluetooth 00:10:04
y luego en este caso 00:10:06
trae 4 gigas de RAM y como veis 00:10:09
una pletora aquí de puertos, tanto 00:10:10
ethernet como USB, puertos para 00:10:12
pantallas, puertos para cámaras y demás 00:10:14
esto es una 00:10:16
Raspberry Pi 0 00:10:19
que es muy útil porque esta 00:10:20
sí que está bastante económica 00:10:22
se puede adquirir aproximadamente por unos 20 euros 00:10:24
incluso algo menos 00:10:27
lo que ocurre es que aquí renuncias por ejemplo 00:10:28
al puerto ethernet 00:10:30
está en otra del puerto Ethernet 00:10:32
entonces si tú necesitas puerto Ethernet 00:10:34
vas a tener que añadirle un PoE 00:10:36
renuncias también al jack 00:10:38
de audio y a otras cuestiones 00:10:39
pero es verdad que es muy útil 00:10:42
de hecho muchos sistemas en el borde utilizan 00:10:43
este tipo de placas o bien 00:10:46
un Compute Module, aquí hay una comparativa 00:10:48
de las características de esta 00:10:50
presentación ya la tenéis en el aula virtual 00:10:52
una comparativa 00:10:54
de los distintos modelos, ahora recientemente 00:10:56
ha salido la Raspberry Pi 5 00:10:58
y bueno, pues aquí tenéis la comparativa 00:10:59
de la Raspberry Pi 5 a la Raspberry Pi 4 00:11:03
y aquí tenéis 00:11:05
la diferencia de velocidad 00:11:06
entonces bueno 00:11:09
es más rápido, es lo único 00:11:12
entonces podéis ver ahí 00:11:15
que efectivamente pues sí que hay una diferencia 00:11:16
de velocidad pues notable 00:11:18
de la Raspberry Pi 5 00:11:20
que marca 753 puntos 00:11:22
a la Raspberry Pi 4 00:11:25
como veis aquí abajo 00:11:26
entonces bueno, el problema que hay 00:11:27
es que está, como digo, está un poco inflada 00:11:30
de precio todavía. 00:11:32
Más 00:11:36
cosas. A ver. 00:11:36
¿Qué alternativas 00:11:39
tenemos a las Raspberry Pi? 00:11:40
Mientras estas siguen infladas de precio, 00:11:42
pues tenéis la opción de comprar otro tipo de 00:11:44
equipos. El que probablemente da mejor 00:11:46
relación calidad-precio son las Orange Pi, 00:11:48
¿vale? Pero también están caras, 00:11:50
la verdad. Entonces, si buscáis un single 00:11:52
board computer económico, el 00:11:54
libre LePotato, este de aquí, 00:11:56
es este blanco que veis ahí, está 00:11:58
bastante bien de precios, son unos 35 euros 00:12:00
es verdad que 00:12:02
tiene menos capacidad de cómputo que una Raspberry Pi 00:12:04
pero bueno, el precio lo hace 00:12:06
bastante razonable 00:12:08
por supuesto hay otro tipo 00:12:09
de equipos más específicos para robótica 00:12:12
o para inteligencia artificial 00:12:14
como la línea de NVIDIA 00:12:15
NVIDIA Jetson, que ha sido 00:12:18
recientemente actualizada 00:12:20
pero son equipos para cosas diferentes 00:12:21
lo que veis aquí a la izquierda es una Raspberry Pi 00:12:23
que es un single board computer generalista 00:12:26
esa placa sirve 00:12:28
para ejecutar aplicaciones normales, como las que usamos normalmente, 00:12:30
aplicaciones de escritorio, o bien las que vamos a usar hoy, 00:12:33
bases de datos, sistemas de dashboard, de paneles de control o algo así. 00:12:37
Y sin embargo, lo que veis a la derecha, que es en este caso un Adgestron Nano, 00:12:42
ahí lo que tenéis es un equipo que también puede ejecutar ese tipo de aplicaciones de escritorio, 00:12:46
pero es que adicionalmente lleva, en este caso, 128 núcleos de GPU. 00:12:51
Entonces, claro, está más pensado para ejecutar modelos de inteligencia artificial. Son bestias distintas, por así decirlo. Entonces, el de la izquierda es para uso general, el de la derecha es para inteligencia artificial o robótica. 00:12:57
Entonces, ¿qué hacemos en este curso? 00:13:12
Pues en este curso lo que solemos hacer es con la Raspberry Pi, pues instalamos la imagen, 00:13:14
luego vamos instalando distintas aplicaciones, vemos cómo controlar los pines, enseñamos un poco de Python y demás. 00:13:21
Eso hoy no lo voy a hacer porque directamente lo vamos a hacer en un servidor en la nube. 00:13:27
Pero sí que quería enseñaros qué aspecto tienen este tipo de equipos, ¿vale? 00:13:32
Que es lo que estáis viendo aquí. 00:13:36
Esto es un Compute Module, este por ejemplo nosotros lo usamos mucho. 00:13:37
Es esta pieza que está aquí en medio. Como veis, eso es una Raspberry Pi, pero no tiene ningún tipo de puerto. Entonces, para poder disponer de puertos, tengo que pinchar el Compute Module en una placa madre, que es lo que estáis viendo aquí. Y esa placa madre es la que ya me provee de todos los puertos que yo necesito para poder utilizarla. 00:13:41
entonces, para que veáis un ejemplo 00:14:01
en el Instituto Morataraz 00:14:04
han instalado los alumnos allí 00:14:07
un equipo de estos en el Edge 00:14:08
un equipo que está basado precisamente 00:14:10
en esto que estáis viendo aquí, un Compute Module 00:14:12
entonces lo que voy a hacer es acceder a él 00:14:14
para que veáis cómo se hace esto 00:14:16
cómo se hace el acceso en remoto 00:14:18
como sabéis 00:14:20
en los centros hay algunas limitaciones 00:14:22
porque hay firewalls y hay algunos puertos 00:14:24
que están cerrados 00:14:26
entonces, una forma de evitar estas restricciones 00:14:27
es utilizar redes privadas 00:14:30
virtuales, entonces 00:14:32
hay dos principalmente 00:14:34
ZeroTier 00:14:36
que es bastante conocida 00:14:37
aunque para mi resulta un poco compleja 00:14:40
y por eso yo suelo usar otra que se llama 00:14:42
TileScale, entonces 00:14:44
eso ya lo han instalado los chicos 00:14:46
en el sistema de allí 00:14:48
de 10 monatalas, entonces por ejemplo 00:14:50
fijaos, si yo entro aquí 00:14:52
a ver, bueno primero 00:14:54
el TileScale es esto que veis 00:14:56
aquí, a ver, voy a acceder para que lo veáis 00:14:58
es este iconillo 00:15:01
y ahí estáis viendo 00:15:01
que tengo unos cuantos 00:15:04
dispositivos 00:15:06
el dispositivo que han instalado ellos se llama 00:15:07
RackPios, entonces lo bueno 00:15:10
que tiene este sistema 00:15:12
es que te da una dirección IP 00:15:13
de ese dispositivo en la red 00:15:16
privada virtual, con lo cual yo ahora puedo 00:15:18
ir al navegador web, por ejemplo aquí 00:15:20
y escribir esa dirección IP 00:15:22
como veis es una dirección IP local 00:15:24
porque pertenece a una VPN 00:15:26
y yo directamente digo, por ejemplo, que quiero acceder al puerto 9443 de esa máquina 00:15:28
y entonces veis que acabo de acceder a la máquina que han instalado estos chicos 00:15:34
y lo que os estoy enseñando ahora es Portainer. 00:15:41
Portainer es una aplicación que sirve para gestionar contenedores. 00:15:45
Eso lo vamos a ver ahora en la clase de hoy, ¿vale? 00:15:48
Que es un contenedor y para qué sirve Portainer. 00:15:50
Pero simplemente para ubicar un poco la clase de hoy, 00:15:53
quería enseñaros esto desde el principio para que veáis un sistema en funcionamiento. 00:15:55
Entonces, veis que yo en Portainer, en este caso, tenemos un solo escenario, un solo entorno, que es el entorno local, y si acedo a ese entorno local, vais a ver que yo tengo aquí un stack funcionando, y que ese stack, tengo aquí el Telescale, que es la aplicación stack, y luego si fuéramos a ver los contenedores, veis que tengo contenedores de Basic Station, de Portainer, un Packet Forwarder, ¿vale? 00:15:59
Entonces, aquí veis que Portainer sirve precisamente para gestionar las aplicaciones que yo tengo funcionando en un sistema en la nube o, como es el caso, en un sistema en el borde. 00:16:26
Y claro, muy interesante es que vais a ver que yo, por ejemplo, puedo acceder a la consola de este contenedor o podría acceder al log para ver todo lo que está ocurriendo. 00:16:39
Puedo estar viendo aquí en tiempo real lo que le está ocurriendo a aquel dispositivo. 00:16:48
Vale, entonces esto simplemente os lo enseño para que pongáis un poco un marco a lo que vamos a hacer a continuación y que entendáis la utilidad que tiene esto, que es muchísimo, ¿vale? Porque por un lado me permite acceder remotamente a dispositivos y gestionarlos a distancia y por otro, gracias al uso de contenedores, es muy sencillo levantar nuevos servicios, actualizarlos, crear duplicados de servicios y demás. 00:16:54
Entonces, bueno, visto esto, continúo con la presentación y esto no lo vamos a poder ver porque no tenemos la Raspberry Pi y vamos a ir directamente a la parte de máquinas virtuales y dockers, ¿vale? 00:17:22
Entonces, tú cuando tienes una máquina, cuando tú tienes un ordenador, tienes varias posibilidades para instalar nuevos software. Una de esas posibilidades es hacerlo a hierro, en bare metal, que se suele decir, que directamente te vas a tu ordenador y añades o eliminas software. En este caso, instalas una aplicación, como lo hemos hecho toda la vida. Eso es lo que se suele llamar instalación a hierro. 00:17:42
No obstante, ahora tenemos alternativas que son, por ejemplo, la instalación, la utilización de contenedores. Entonces, aquí veis la diferencia entre utilizar un sistema de Bare Metal a la derecha, un sistema de máquinas virtuales a la izquierda, o bien un sistema de contenedores en el centro. 00:18:05
Veis que hay tres formas ya de gestionar nuestros recursos de cómputo. 00:18:27
BareMetal, no voy a entrar en él porque lo habéis hecho cientos de veces, instalar aplicaciones, ¿vale? 00:18:32
Vamos a ir al de la izquierda, al de servidores virtuales. 00:18:37
Entonces, si nos fijamos aquí en el de servidores virtuales, vais a ver que lo que tenemos es un hardware abajo, en la capa de abajo, un hardware anfitrión. 00:18:40
Sobre ese hardware anfitrión se instala un sistema operativo de anfitrión, puede ser un Windows, puede ser algún tipo de Linux. 00:18:48
y sobre ese sistema operativo se instala un programa especial que recibe el nombre de hipervisor. 00:18:55
El hipervisor, uno muy popular, por ejemplo, es Prozmos, pero puede ser cualquier otro. 00:19:02
Entonces, lo que hace el hipervisor es crear máquinas virtuales o servidores virtuales. 00:19:07
Es decir, de los recursos de hardware que tienes reales, lo que hace es virtualizarlos para poder simular 00:19:13
que ese único ordenador real es en realidad varios ordenadores virtuales. 00:19:19
Esto de hecho es lo que yo acabo de hacer cuando he creado ese último servidor para Almudena. Lo que he hecho es utilizar un sistema de hipervisor para crearme una máquina virtual nueva. Entonces, como veis, cada una de esas máquinas virtuales que vosotros habéis recibido las credenciales, vais a tener que instalarle un sistema operativo. Cada máquina virtual tiene su propio sistema operativo. 00:19:24
Y luego sobre ese sistema operativo, como para vosotros son máquinas normales y corrientes, vosotros veis la máquina virtual como si fuera una máquina física, pues la forma de instalar las aplicaciones es exactamente la misma forma que en Bare Metal, que hay error. 00:19:45
O sea, vosotros instalaríais ahí las aplicaciones sin más. 00:19:59
Este sistema es muy popular, pero tiene algunos inconvenientes, igual que también tiene ventajas. 00:20:02
De esto ha habido una pequeña guerra de la gente que defiende las máquinas virtuales y los que defienden los contenedores. 00:20:07
no hay que entrar en polémica, simplemente 00:20:13
cada uno tiene ventajas e inconvenientes 00:20:15
y hay situaciones en las que unos son más útiles que otros 00:20:17
por ejemplo, aquí se ve 00:20:19
claramente que un problema que tienen 00:20:21
las máquinas virtuales es que 00:20:23
el sistema operativo muchas veces es 00:20:25
un recurso que va a estar repetido, si tú 00:20:27
tienes varias máquinas virtuales con el mismo sistema 00:20:29
operativo, pues vas a estar 00:20:31
malgastando un espacio ahí de almacenamiento 00:20:33
porque vas a tener ejecutando 00:20:35
simultáneamente varios sistemas operativos 00:20:37
cuando a lo mejor podías tener unos 00:20:39
solo. Y precisamente para eso 00:20:41
se crean los contenedores, que es lo que estáis viendo 00:20:43
en el medio. En el medio lo que tenemos es 00:20:44
exactamente igual, una máquina anfitrión, 00:20:46
un hierro, una máquina física 00:20:49
sobre la que instalamos un sistema 00:20:50
operativo anfitrión, y ahora 00:20:52
en lugar de instalar 00:20:54
un hipervisor, lo que 00:20:56
hacemos es instalar un motor de 00:20:58
contenedores, un gestor de contenedores. 00:21:00
Se llama así genéricamente, 00:21:03
pero todo el mundo lo conoce como Docker, porque 00:21:05
es el estándar, ¿vale? Docker es 00:21:06
un tipo de contenedores, hay otros, 00:21:08
Pero Docker es el más conocido. Entonces, ¿qué me permite Docker? Pues lo que me permite es luego instalar las aplicaciones como si fueran contenedores. Entonces, lo interesante aquí es que cada contenedor está completamente aislado de los demás contenedores. No comparten librerías, no comparten archivos, no comparten nada. 00:21:10
Con lo cual, la seguridad de estos contenedores está garantizada y adicionalmente, como son unidades atómicas independientes, es muy fácil eliminarlas, replicarlas, ampliarle los recursos, todo lo que necesites. 00:21:29
inconveniente principal de los contenedores 00:21:46
pues que como veis hay un único 00:21:48
sistema operativo, entonces tú te tienes 00:21:50
que garantizar que el contenedor 00:21:52
que quieres utilizar es compatible 00:21:54
con el sistema operativo del anfitrión 00:21:56
porque de otro modo no te va a funcionar 00:21:58
pues eso es una introducción así rápida 00:22:00
a lo que son los 00:22:03
contenedores, como os decía 00:22:04
el sistema 00:22:06
de contenedores más famoso es Docker 00:22:08
y Docker 00:22:10
se basa en tres conceptos 00:22:12
esenciales, el registro 00:22:14
la imagen 00:22:16
y el contenedor 00:22:18
el registro es simplemente un almacén 00:22:19
que está en hubducker.com 00:22:22
si yo accedo a esa dirección 00:22:25
escribo aquí hub.ducker.com 00:22:26
vale 00:22:29
esto es una colección 00:22:30
de todas las aplicaciones disponibles 00:22:31
en modo contenedor 00:22:34
yo por ejemplo puedo buscar 00:22:35
thingsboard 00:22:37
y vais a ver que 00:22:38
Thingsboard, existen varias 00:22:41
versiones de Thingsboard en formato contenedor 00:22:43
que podría instalar. Puedo 00:22:45
buscar, por ejemplo, Joomla, que es un gestor 00:22:47
de contenidos, que no tiene nada que ver con Internet de las 00:22:49
Cosas. ¿Veis que también existe? 00:22:51
WordPress. 00:22:53
¿Veis que también existe? 00:22:55
Entonces, hay un montón de aplicaciones 00:22:57
que ya existen en formato contenedor 00:22:59
y que vais a poder instalar desde el 00:23:01
registro. Aquí en el registro es como 00:23:03
por así decirlo, una biblioteca 00:23:05
de aplicaciones que tú te puedes 00:23:07
instalar. El segundo concepto es el de imagen. Tú cuando ya has encontrado una aplicación que te 00:23:09
quieres instalar, lo que haces es descargar la imagen de esa aplicación. La imagen lo podéis 00:23:14
imaginar como si fuera una plantilla. Es una plantilla a partir de la cual luego vamos a 00:23:20
crear contenedores. Esa imagen es única y yo voy a poder crear varios contenedores a partir de esa 00:23:27
imagen. Yo, por ejemplo, podría descargarme 00:23:33
la imagen de Joomla o de 00:23:35
Wordpress y luego crear 00:23:37
10 contenedores Wordpress, uno para 00:23:39
cada uno de mis alumnos para que ellos se desarrollen 00:23:41
un blog durante el curso, por ejemplo. 00:23:43
Pues esa es la diferencia entre 00:23:45
una imagen, que es como una 00:23:47
plantilla, y un contenedor 00:23:49
que es la ejecución de una 00:23:51
imagen, por así decirlo, una instancia 00:23:53
de esa imagen. Es como si quisierais 00:23:55
si hablamos de programación orientada a objetos 00:23:57
la imagen se podría asimilar a la 00:23:59
clase y el contenedor sería 00:24:01
un objeto creado a partir de esa clase 00:24:03
¿vale? pues esos son los tres 00:24:05
conceptos fundamentales de Docker, repito 00:24:07
registro, imagen 00:24:09
y contenedor 00:24:11
¿por qué se ha puesto 00:24:12
tan de moda Docker? bueno 00:24:15
pues porque en un primer lugar 00:24:17
aprovecha mejor los recursos 00:24:18
con lo cual se puede utilizar en máquinas 00:24:20
virtuales de menor tamaño 00:24:23
y además se inicia más rápido 00:24:24
es cierto que sigue siendo más lento que una 00:24:26
instalación bare metal, pero es más rápido 00:24:28
generalmente que una máquina virtual 00:24:31
Además, como os decía antes, los contenedores están completamente independizados entre sí, incluso las librerías. 00:24:33
Entonces tú puedes tener, por ejemplo, un contenedor que use Python 2, otro contenedor que use Python 3. 00:24:39
Que esto ya sabéis que algunas veces en un sistema normal es un dolor de cabeza porque tienes que instalar las dos versiones o dar prioridad a una sobre otra porque un programa solo funciona con Python 2, otro con Python 3 y demás. 00:24:44
Tercer factor a favor de Docker, la flexibilidad. 00:24:56
tú instalas, te descargas una imagen 00:24:59
en cuestión de segundos, puedes actualizar la imagen 00:25:02
inmediatamente, realmente 00:25:04
es muy conveniente, muy rápido 00:25:06
y el principal inconveniente es que os decía 00:25:08
que todas las imágenes que uses 00:25:10
en un servidor tienen que ser compatibles 00:25:12
con el sistema operativo de la máquina 00:25:14
de la máquina anfitrión 00:25:16
¿cómo funciona esto de Docker? 00:25:17
pues lo que descargamos de Docker 00:25:20
como digo, es una imagen 00:25:22
¿vale? y esa imagen 00:25:24
se almacena como una capa 00:25:25
de solo lectura. Es esto que estáis viendo aquí abajo. En el gráfico veis que aquí 00:25:27
hay tres capas que están indicadas a la derecha que son la imagen y que a la izquierda me 00:25:32
indica que son capas de solo lectura. La imagen es inalterable. La imagen la vais a tener 00:25:38
en vuestro ordenador para crear a partir de ella tantos contenedores como queráis. ¿Y 00:25:43
el contenedor qué es? Pues el contenedor es simplemente una capa nueva que se crea 00:25:48
sobre estas capas de solo lectura 00:25:54
pero que ya es una capa de lectura y escritura 00:25:56
y para lo que sirve el contenedor 00:25:59
precisamente es para almacenar las modificaciones 00:26:01
que querríamos hacer en la imagen 00:26:04
de tal forma que la imagen permanece inalterable 00:26:06
pero yo tengo un contenedor 00:26:08
que es una versión de esa aplicación 00:26:10
con las modificaciones ahí introducidas 00:26:13
¿cuál es el problema que tienen los contenedores? 00:26:15
que esta capa de lectura y escritura 00:26:19
cuando se detiene el contenedor 00:26:22
si vuestro ordenador, por ejemplo, perdiera la alimentación 00:26:24
se perderían 00:26:27
todo lo que tuvieras aquí se perdería 00:26:28
para evitar eso 00:26:31
en Docker existe un elemento 00:26:32
que son los volúmenes 00:26:34
los volúmenes es un espacio de almacenamiento 00:26:36
que no se pierde 00:26:39
ahí se almacenan los datos 00:26:40
que tú quieres que siempre estén disponibles 00:26:43
entonces, por ejemplo 00:26:45
hoy vamos a usar Node-RED 00:26:46
¿cómo crearíamos contenedores con Node-RED? 00:26:48
Pues yo me descargaría la imagen de no de red, que son estas capas que veis aquí abajo, y esa imagen permanecería inalterable en mi servidor. 00:26:50
Y luego podría decidir levantar un contenedor sobre esa imagen para cada uno de vosotros, ¿vale? 00:27:00
Yo os crearía cada uno un contenedor de no de red. 00:27:06
¿Eso qué implicaría? Pues implicaría que estaría creando estas capas de lectura y escritura. 00:27:09
Crearía 10 capas, por ejemplo. 00:27:14
esas 10 capas estarían completamente individualizadas unas de otras 00:27:16
es decir, para vosotros lo que veríais son aplicaciones no de red vírgenes 00:27:21
para cada uno de vosotros 00:27:26
completamente aisladas de las de los demás compañeros 00:27:27
y no de red lo vincularía a un volumen 00:27:30
para que en caso de que se apagase el ordenador 00:27:33
o hubiera cualquier problema 00:27:35
vuestros datos persistieran 00:27:36
estuvieran ahí la próxima vez que accedáis a no de red 00:27:38
pues así es como funciona Docker de forma muy general 00:27:41
¿Vale? Entonces, ahora la cuestión es, si yo tengo todos esos servicios funcionando en la misma máquina, si yo tengo un montón de contenedores funcionando en una máquina, ¿cómo accedo a esos servicios desde el exterior? Hay que tener en cuenta que la mayoría de las aplicaciones web, pues por ejemplo Node-RED, OpenHAB, Paradomotica o Mosquito, lo que usan son interfaces web para poderlas configurar. ¿Vale? Se accede a ellas mediante un puerto HTTP. 00:27:44
¿Cómo podemos conseguir esto con Docker? Pues hay principalmente dos formas de hacerlo. Una forma es el binding, que es la que vamos a usar aquí, porque es la más sencilla, que es la siguiente, la que veis en la imagen de arriba. Voy a intentar ampliarla. 00:28:11
ampliar. Imaginaos que yo tengo 00:28:24
en una máquina un contenedor 00:28:26
de Apache y un contenedor de 00:28:29
MySQL. Los puertos 00:28:30
por defecto de Apache y de MySQL 00:28:32
son el 80 y el 3306. 00:28:34
Esos son los puertos 00:28:37
que yo debería usar en una máquina que estuviera 00:28:38
instalada a Vermetal. Pero en este 00:28:40
caso, como lo tengo con un contenedor, 00:28:42
lo que hago es que voy a mapear 00:28:44
o hacer binding de un 00:28:46
puerto de la máquina anfitrión a 00:28:48
ese puerto del contenedor. 00:28:50
¿Veis? Aquí lo que le estoy diciendo es que 00:28:52
cuando alguien llegue desde el exterior 00:28:54
solicitando acceder al puerto 8080 00:28:56
lo que voy a hacer es redirigir 00:28:59
esa petición al puerto 80 00:29:00
del contenedor de Apache 00:29:02
de igual forma lo podría hacer 00:29:04
para otros puertos 00:29:06
aquí por ejemplo el 6603 00:29:08
lo han redirigido al puerto 3306 00:29:10
que es el que 00:29:13
corresponde por defecto al gestor de bases de datos 00:29:14
MySQL 00:29:16
ese es el sistema que vamos a utilizar 00:29:17
ahora, es muy cómodo 00:29:20
binding directamente, pero si 00:29:22
Y quiero comentar que existe otra opción que es usar un proxy inverso, Engines, por ejemplo. ¿Y ese cómo funciona? Pues ya no tienes que usar esta asignación de puertos, sino que lo que hace es que hay un único puerto de acceso, que es el puerto 80 o el que sea, que tú hayas configurado, y lo que hace Engines o el proxy inverso que tú hayas decidido utilizar, aquí aparece este porque es el más popular, lo que hace es que en función del recurso que tú hayas solicitado, ya te redirige a un puerto concreto. 00:29:24
Es decir, es el nombre del recurso que tú hayas indicado en la URL el que te redirige a un puerto concreto. 00:29:53
Luego ya sí que puedo tener esa asignación por binding de un puerto de la máquina real a un puerto de la máquina virtual. 00:30:00
Entonces, espero que me estéis siguiendo o que al menos os estéis haciendo una idea de cómo funciona esto. 00:30:09
No se trata de que lo entendáis al detalle, porque nosotros no necesitamos entenderlo al detalle. 00:30:17
pero sí que es necesario que entendáis que ahora tenemos contenedores 00:30:21
y una máquina anfitrión 00:30:25
que esa máquina anfitrión tiene sus puertos, que son puertos reales 00:30:27
y que esos puertos reales lo que hacemos es 00:30:31
vincularlos a un puerto interno del contenedor 00:30:33
de tal forma que cuando la máquina anfitrión reciba una petición 00:30:36
en uno de estos puertos, lo va a redirigir 00:30:40
al puerto correspondiente de ese contenedor 00:30:42
para el que hemos hecho binding 00:30:46
eso de hecho cuando os he enseñado antes 00:30:47
la máquina 00:30:49
esta que han montado en el 00:30:52
lo que ha ocurrido es eso 00:30:53
yo la he accedido a una dirección web 00:30:55
no sé si la tengo aquí todavía 00:30:57
para poderla enseñar porque parece que la ha 00:30:59
sobrescrito 00:31:01
yo ahí indico 00:31:01
la dirección de la máquina, la dirección IP 00:31:04
y luego he puesto el nombre del puerto 00:31:07
que es en este caso 9443 00:31:08
pues este puerto 00:31:11
en Docker lo tenemos vinculado 00:31:12
en este caso 00:31:15
al puerto de Portainer, que no recuerdo ahora cuál es, pero imagino que será el mismo. 00:31:16
A ver, en Portainer, sí, al propio 9443. 00:31:21
¿Veis? Aquí lo que me está indicando es que el puerto de la máquina anfitrión 9443 00:31:25
está dirigido al puerto del contenedor 9443. 00:31:30
Bueno, pues esto es cómo funcionan las redes. 00:31:35
Entonces, ahora, el siguiente paso para nosotros sería instalar Docker. 00:31:39
como digo, está aquí preparado 00:31:42
para instalar Docker en una Raspberry Pi 00:31:45
y nosotros hoy lo que vamos a hacer 00:31:47
es en lugar de hacerlo en una Raspberry Pi 00:31:48
lo vamos a hacer en los servidores 00:31:51
entonces 00:31:53
a ver, Modesto y Adrián 00:31:54
vais a usar 00:31:57
el contenedor 00:31:59
vais a usar mi servidor 00:32:01
que es el ISMIE01, que ahora os pongo los detalles 00:32:03
¿vale? pero 00:32:05
yo voy a hacer la instalación, luego vosotros 00:32:07
lo usáis, pero la instalación la tengo que hacer solo yo 00:32:09
Porque no podemos instalar varios a la vez. Entonces, os digo lo que tenéis que hacer ahora. Voy a intentar ir despacio porque entiendo que para algunos esto será la primera vez. Lo primero que necesitamos para poder acceder a esos servidores que os he dado las credenciales es un terminal de acceso remoto. 00:32:11
Yo suelo usar Putty. Es una aplicación, la buscáis en internet, que se llama Putty. 00:32:30
Podéis usar cualquier otra. Si vosotros tenéis otra favorita, pues la usáis. 00:32:37
Y el que no haya usado nunca, pues yo le recomiendo Putty. 00:32:42
Entonces tú te vas a la página web de Putty y ahí en Putty veis que te aparece la primera opción, Descargar Putty. 00:32:45
Le das Download Putty y luego te dice aquí, ¿para quién te lo quieres descargar? 00:32:54
para Windows, para Unix, lo que sea 00:32:58
pues si tú tienes Windows 64 bits 00:33:00
pues te descargas aquí 00:33:03
la versión esta, la 0.83 00:33:04
y ya está, vale 00:33:06
entonces, a ver, voy a 00:33:07
cambiar de servidor 00:33:10
para darle los datos a Modesto 00:33:12
y a Adrián 00:33:15
una cosa 00:33:15
Juanfe, que 00:33:19
la presentación, ¿dónde está en 00:33:19
la web? porque yo no la veo 00:33:22
tema 4, está 00:33:24
como tema 4, en el aula virtual 00:33:26
vale 00:33:28
¿está Germán? 00:33:30
voy a mirarlo 00:33:32
vale, míralo y dime, porque lo acabo de poner ahora 00:33:33
y a lo mejor se me ha olvidado darle que esté visible o algo de eso 00:33:35
vale, sí, aquí hay una 00:33:38
presentación 00:33:44
vale, sí, está 00:33:45
correcto, gracias 00:33:47
vale, pues fijaos, yo tengo aquí 00:33:49
el ISMIE01 00:33:51
que es el servidor que vamos a usar 00:33:52
Adrián Modesto y yo 00:33:55
y lo que le voy a pedir ahora 00:33:57
es dejar este servidor, lo voy a dejar virgen 00:33:59
¿cómo lo dejo virgen? voy a pedir que me lo reconstruyan el servidor 00:34:03
yo he estado haciendo pruebas para la clase de hoy de que todo funcionaba bien 00:34:06
y para evitar que este servidor aparezca distinto a los vuestros 00:34:10
lo que voy a pedir ahora mismo es que me hagan un rebuild 00:34:14
al hacer el rebuild veis que me dicen, oye, ¿qué sistema operativo quieres instalar? 00:34:17
o incluso ya si quieres instalar alguna aplicación en concreto, puedes instalar directamente un sistema 00:34:22
linux, mysql, php 00:34:26
o lo que tú quieras, ¿vale? 00:34:29
yo le voy a decir, pues mira, quiero usar un devian 00:34:30
para que sean todos iguales, devian12 00:34:32
le digo revuil 00:34:35
aquí me pide 00:34:36
que escribe esto, porque claro, como es una 00:34:39
operación crítica, están diciendo, ¿estás seguro 00:34:41
de lo que estás haciendo? sí, estoy seguro 00:34:42
le digo revuil, ¿vale? 00:34:44
y a partir de aquí 00:34:47
ya podemos acceder a nuestra máquina 00:34:48
¿cómo accedemos a la máquina? pues con 00:34:50
las credenciales que os he dado, entonces fijaos 00:34:52
yo tengo aquí 00:34:55
a ver, si puedo quitar esto 00:34:56
de aquí arriba 00:34:58
perdonad, es que yo veo 00:35:00
aquí, me aparece una cosa en la pantalla que me tapa 00:35:03
espacio y que no sé 00:35:04
ahora se ha ido solo, vale, bien 00:35:08
entonces como veis aquí, he recibido 00:35:10
o recibiré 00:35:12
está así, no tengo la cuenta de 00:35:13
Duca Madrid, aquí, vale, veis que 00:35:16
he recibido mis credenciales, que es exactamente 00:35:18
lo mismo que os he pasado a vosotros, vale 00:35:20
todo esto de aquí, por favor 00:35:22
modesto Adrián, vosotros no lo hagáis, vale, lo voy a hacer 00:35:23
yo por vosotros esta parte, pero luego 00:35:26
ya tomáis el control vosotros del 00:35:28
servidor. 00:35:30
¿Qué tengo que hacer yo con estos datos? 00:35:31
Pues fijaos, ellos me dan una IP4, 00:35:36
una IP6, un nombre 00:35:38
de usuario y una contraseña. 00:35:39
Entonces lo que yo hago es que arranco Putty, 00:35:42
ese programa que os acabáis de descargar, 00:35:44
que tiene este aspecto 00:35:46
tan simplón, y aquí 00:35:48
en la parte de arriba 00:35:49
miro que esté activada 00:35:51
la opción SSH, Secure Cell 00:35:54
¿vale? o acceso seguro 00:35:56
remoto, y luego lo que 00:35:58
tengo que hacer es, aquí donde pone 00:36:00
hostname, pegar la dirección 00:36:01
IP, entonces pongo ahí 00:36:04
la dirección IP, el puerto 00:36:06
no hay que cambiarlo, es el puerto 22 00:36:10
¿vale? y dejo aquí 00:36:11
SSH, y ahora 00:36:14
pulso Open, y esto lo que voy a 00:36:16
hacer es que ahora mi ordenador 00:36:18
en el que yo estoy usando ahora, el portátil 00:36:19
desde el que estamos dando esta sesión 00:36:22
se va a conectar a 00:36:24
ese ordenador remoto de Nuremberg 00:36:26
que hemos visto antes, vale 00:36:27
entonces pulso intro 00:36:29
y veis que me da un posible error 00:36:30
esto es porque he decidido no usar 00:36:34
certificados, vale 00:36:35
os acordáis que al principio os he dicho 00:36:36
no voy a usar certificados para facilitar las cosas 00:36:39
lo suyo sería utilizar certificados 00:36:41
pero por no complicarlo 00:36:44
no los he usado y simplemente hay que pulsar 00:36:45
aquí aceptar, vale 00:36:47
entonces me dice, oye, ¿quién eres? 00:36:49
¿por qué quieres acceder a esta máquina? 00:36:52
¿cuál es tu nombre? pues mi nombre es 00:36:53
root, que es el nombre que me están 00:36:55
dando aquí en las credenciales, vale 00:36:58
y ahora tengo que escribir el password 00:36:59
y la primera vez que accedáis 00:37:01
os va a obligar a cambiar el password 00:37:03
vale, entonces con cuidadito 00:37:05
escribimos ese password 00:37:07
exactamente igual en mayúsculas 00:37:09
y minúsculas 00:37:12
vale, ya me he equivocado, perdona 00:37:13
porque no puedo hablar y escribir a la vez 00:37:16
porque acabo escribiendo lo que estoy diciendo 00:37:17
a ver, me callo un rato 00:37:19
vale, lo he conseguido, pues ahora tengo que 00:37:20
volverlo a escribir, vale, una vez que lo he escrito 00:37:44
lo primero que te dice, oye, tienes que cambiar tu contraseña 00:37:46
entonces, por favor, vuelve a escribir 00:37:49
la contraseña actual, veis que pone 00:37:51
current password, ahí he escribido la contraseña 00:37:52
actual, y luego vamos a poder escribir 00:37:55
la contraseña nueva, entonces yo voy a escribir 00:37:57
ahí otra vez, nueva 00:37:58
contraseña, pues voy a usar como nueva contraseña 00:38:24
modesto adrián 00:38:27
ismie, vale, ismie 00:38:28
ismie, vale, la voy a anotar 00:38:30
que no se me olvide, ah, no me 00:38:34
deja usar ismie, tiene que ser un poco más largo 00:38:36
A ver, ¿qué podemos usar entonces? Vamos a poner ISMIE IoT. ISMIE IoT. Ya está. Pues esa es la contraseña. Usuarios root y la contraseña ISMIE IoT. 00:38:38
lo pongo aquí 00:38:55
vale 00:38:57
bueno 00:39:04
bien 00:39:06
pues ya tenemos entonces 00:39:09
acceso a la máquina 00:39:11
si queréis 00:39:11
Modesto y Adrián 00:39:12
podéis acceder vosotros 00:39:13
también ya a la máquina 00:39:14
con vuestro Putty 00:39:15
vale 00:39:16
y veréis que 00:39:17
os aparecerá algo parecido 00:39:17
a lo que estoy viendo yo 00:39:19
¿cuál sería el siguiente paso? 00:39:20
pues aquí estáis 00:39:23
en una máquina 00:39:24
pues que podéis ver 00:39:25
que tiene instalado 00:39:26
podéis instalar programas 00:39:27
como digo 00:39:28
en forma bare metal 00:39:29
lo que vosotros queráis 00:39:30
nosotros 00:39:31
lo que vamos a hacer a continuación es 00:39:32
instalar el gestor, el motor de 00:39:35
contenedores Docker 00:39:37
¿vale? entonces para eso he preparado aquí unas notas 00:39:39
de cómo se tendría 00:39:41
que hacer, estas notas 00:39:48
son específicas para Debian 00:39:50
Debian 12 00:39:52
¿vale? que tiene este nombre de pila 00:39:55
Bookworm, gusano 00:39:56
de los libros 00:39:58
¿escuchas? 00:40:00
¿el resto lo hacemos también? 00:40:03
no, no, esperad, esto no lo hagáis 00:40:05
todavía no hacemos nada, ni siquiera el puti 00:40:07
si, lo del puti 00:40:09
si, eso si, hacedlo, por favor 00:40:12
Juan Félix 00:40:13
yo lo he intentado con el puti 00:40:16
he pasado a la primera pantalla 00:40:18
en el momento en el que me ha pedido 00:40:20
cambiar la contraseña 00:40:22
se me ha cerrado 00:40:24
puti, no sé si será normal 00:40:26
no, no es normal, vuelve a abrirlo y ya está, no te preocupes 00:40:27
vale 00:40:30
voy a apagar el otro 00:40:31
Juanfe, yo no he conseguido 00:40:34
instalarlo, me está dando algún problema 00:40:40
no sé qué 00:40:42
he generado 00:40:43
lo que he instalado al final es como una especie 00:40:45
de generador de una contraseña 00:40:48
pero no ese es el programa tuyo, que tú quieres 00:40:50
¿no? 00:40:52
yo lo único que os he pedido que instaléis es el Putty 00:40:53
claro 00:40:56
no, pero eso no es un generador de contraseñas 00:40:56
eso es 00:41:00
claro, no, no, pero es que es donde 00:41:01
el único que me ha instalado 00:41:03
a ver 00:41:05
lo has escrito así 00:41:07
puti con dos t's 00:41:09
a ver, espera un momento que te vea 00:41:11
a ver 00:41:13
si, si, si 00:41:16
no, no, si he llegado ahí, pero 00:41:17
he instalado este, justo el de 64 bit 00:41:19
este 00:41:22
este, a ver si has cogido esto 00:41:23
no, no, no, no 00:41:25
has cogido esto, ¿no? 00:41:27
¿qué va, qué va? 00:41:29
pues en principio esto te descarga un archivo 00:41:29
con la extensión MSI, por favor 00:41:32
compruébalo 00:41:34
y cuando haces clic en él 00:41:35
te lo instala sin más 00:41:39
voy a cerrar yo mi sesión 00:41:40
voy a hacerlo porque igual hay algún problema 00:41:42
voy a cerrar esta y voy a instalarlo 00:41:45
a ver, es un archivo ejecutable 00:41:47
voy a quitarle y volverle a instalar 00:41:51
le doy a aceptar 00:41:53
a ver, voy a volver a instalarlo 00:41:55
lo he quitado y lo he vuelto a instalar 00:42:09
vale, yo ahora mismo 00:42:11
creo que no me deja porque me aparece 00:42:13
que ya lo tengo ejecutándose 00:42:15
pero bueno, vamos a esperar a ver si es capaz de instalarlo 00:42:17
vale, sí, ahora parece que 00:42:20
a ver, sí 00:42:23
vale, bien, no sé que me ha hecho antes 00:42:28
pero he hecho lo mismo antes que ahora 00:42:31
y ahora me funciona 00:42:33
parece ser, sí, ahora ya sí que veo 00:42:34
las mismas ventanas del programa 00:42:37
este put, sí 00:42:39
pues genial, entonces, adelante 00:42:40
ha dicho que nos quedamos aquí, ¿no? 00:42:43
no, no, ahí ya tirad para adelante 00:42:46
ahí ya tenéis que cambiar la contraseña y todo 00:42:47
ahí tenéis que acceder a vuestra máquina 00:42:49
entonces 00:42:51
Modesto y Adrián, os paso la 00:42:52
dirección IP ahí por 00:42:55
por 00:42:57
el chat, ¿vale? para que la tengáis 00:42:59
ya me he conectado, ¿eh? 00:43:01
pues fenomenal 00:43:03
Juanfe, una cosa 00:43:04
cuando has dado el botón de 00:43:07
open para 00:43:09
asegurándonos que está habilitado 00:43:10
lo del SSH 00:43:13
me dirige hacia un puerto 00:43:14
el 22, me lo ha asignado aquí 00:43:17
y le doy al botón 00:43:18
de open y como que no hace 00:43:21
me da un sonido 00:43:23
lo oyo, ¿no? 00:43:25
y no paso 00:43:28
no lo oigo, pero fíjate 00:43:29
por favor, mira lo que voy a hacer yo 00:43:31
porque es lo que debería hacer 00:43:32
a ver, a ver 00:43:34
ahí pones la dirección 00:43:36
que me has mandado, la IP4, ¿no? 00:43:37
No, no, esa no es la... ¿Tú quién eres? 00:43:40
¿Modesto o Adrián eres tú? No, no, no, no, yo soy 00:43:42
Manuel, Manuel. Manuel, pues tú 00:43:44
en el archivo que he mandado inicialmente 00:43:46
te buscas... Yo tengo que poner la mía. Pones la tuya, eso. 00:43:48
Vale, vale. Sí, sí. 00:43:51
A ver, vale, vamos a ver dónde estoy yo. 00:43:52
No hay ningún cambio ahí. 00:43:55
Es SH y Open, ¿no? Nada más. 00:43:56
Exacto. Pues a mí me da un error fatal 00:43:58
cuando hago eso. 00:44:00
Juan Félix, ¿me puedes 00:44:03
reiniciar 00:44:04
ISMIE2 00:44:06
que me da acceso denegado 00:44:07
no sé si es que he metido mal la contraseña 00:44:10
dos, tres veces 00:44:13
y se me ha quedado que me dice acceso denegado 00:44:14
vale, te voy a hacer 00:44:17
un rebuild del ISMIE2, ¿vale? 00:44:20
vale 00:44:23
login como 00:44:23
el ISMIE guión que nos has dado a cada uno, ¿no? 00:44:26
no, el login es 00:44:30
root, para todos 00:44:31
ah, root 00:44:33
vale, enter 00:44:35
y la password la que tiene 00:44:37
lo que nos ha dado 00:44:39
que esa es la parte difícil 00:44:40
yo abro el mío 00:44:43
y veis login as y ahí escribe root 00:44:45
y la contraseña de este 00:44:48
del que compartimos Adrián 00:44:50
Modesto y yo es 00:44:52
ismie.io 00:44:53
el ismie.02 ya está 00:44:54
reconstruido 00:45:01
gracias, ahora voy a probarlo 00:45:02
pero espérate porque ahora te tengo que pasar 00:45:07
las nuevas credenciales 00:45:09
te lo voy a pasar por el chat 00:45:11
vale 00:45:14
esta mañana 00:45:32
yo que lo he probado 00:45:48
lo digo por si estáis alguno en el instituto 00:45:49
esta mañana lo he probado yo desde el instituto 00:45:52
y no me ha dejado entrar 00:45:54
pero me ha dado bastantes problemas 00:45:55
y al final he llegado a la conclusión que era por la red 00:45:57
por algún, no sé si 00:45:59
tendrá alguna limitación, la red está de 00:46:01
Wedu y he conectado a través del móvil y todos 00:46:03
los problemas han desaparecido de pronto 00:46:05
lo digo por si estáis alguno en el instituto 00:46:06
vale 00:46:09
nos quedamos aquí una vez que hemos cambiado 00:46:15
la password, ¿no? 00:46:17
ya estamos todos aquí más o menos, entiendo 00:46:18
estamos viendo ahí nuestra máquina que podemos 00:46:20
puede ser que por 00:46:22
exceso de intentos te bloquee 00:46:25
el putic, no creo 00:46:29
no, no, no, no puede ser 00:46:31
¿eres el de 00:46:33
Ismíe02? 00:46:35
Ismíe02 00:46:39
soy yo, he metido la 00:46:40
contraseña y me ha cerrado el puti 00:46:41
a ver, voy a probar yo con 00:46:43
Ismíe02, vale, fijaos, yo puedo tener 00:46:47
ahí Ismíe01 abierto 00:46:49
y ahora me puedo abrir otro 00:46:51
al Ismíe02 00:46:53
Ismíe02, con los datos que yo tengo aquí 00:46:54
sería el que hemos 00:46:57
asignado a Antonio, que tiene esta dirección 00:46:59
procedemos 00:47:02
me da este 00:47:06
alerta de seguridad que le tengo 00:47:08
que dar a aceptar, tú ni siquiera llegas a ver 00:47:11
esto entonces, Antonio 00:47:13
eso ha pasado, he metido 00:47:14
la contraseña, he entrado 00:47:17
como Ruth, he metido la contraseña 00:47:19
y a partir de ahí es cuando 00:47:21
van a empezar los problemas, se me ha cerrado 00:47:23
el puti, vale, yo ya he puesto 00:47:25
Ruth, tú has llegado a cambiar la contraseña entonces 00:47:27
no me he dejado 00:47:29
vale, voy a probar yo, vale 00:47:30
uxl9x 00:47:32
www.r 00:47:36
esta no es, me parece 00:47:42
me has dado una que empieza por jw 00:47:43
hay dos antonios 00:47:46
la ip que me has dado 00:47:49
es la que empieza por jw 00:47:53
me la acabas de enviar 00:47:55
ah, perdona, claro, si es que la hemos 00:47:56
renovado, si, si, perdona 00:47:59
Sí, sí, a ver. Entonces, esta está aquí. JW, efectivamente, está aquí. Vamos a ver que falle. 00:48:01
J-W-T-E-V-N-A-L-F-X-T-U-J-T-L-H-A-N 00:48:22
Curren pasos. 00:48:41
J-W-T-E-U-N-A-L-F-X-E-U-J-T-L-H-A-N. 00:48:44
Pues efectivamente, a mí también me pasa eso. 00:48:59
Vale, vale, no soy el único. 00:49:05
¿Y eso por qué? 00:49:07
174. 00:49:16
174. 00:49:20
¿A alguien más le pasa esto? 00:49:25
¿me oís? 00:49:26
00:49:29
a mí me pasa 00:49:30
si la metes mal 00:49:31
te echa 00:49:32
que a lo mejor 00:49:34
la he metido mal 00:49:35
y también 00:49:35
nada más meterla 00:49:36
antes de poner la nueva 00:49:37
te vuelve a pedir 00:49:38
otra vez la misma 00:49:39
sí, sí 00:49:40
eso seguro 00:49:41
claro 00:49:41
y entonces 00:49:42
en cuanto que te equivoques 00:49:42
te echa 00:49:43
vale 00:49:43
voy a probar entonces 00:49:44
otra vez 00:49:45
habré cometido un error 00:49:46
perdonad 00:49:46
perdonad 00:49:47
la demora 00:49:48
a ver 00:49:49
voy a intentarlo otra vez 00:49:49
rápido 00:49:50
a ver 00:49:51
root 00:49:56
J, W, T, T, ah, si antes me he equivocado, efectivamente, V, N, A, L, F, X, T, U, J, T, L, H, A, N, y ahora la vuelvo a escribir, que es J, W, T, T, V, N, A, L, F, X, T, U, J, T, 00:50:02
L-H-A-N. 00:50:32
Eso es. 00:50:35
Es que había algún error. 00:50:36
Vale. 00:50:37
Antonio, te pongo también como contraseña 00:50:38
Ismíe I-O-T. 00:50:40
Vale. 00:50:45
Todo en minúscula. 00:50:45
Ya está. 00:50:46
Ismíe I-O-T. 00:50:47
Vale. 00:50:49
Pues seguimos entonces. 00:50:49
Yo ya me salgo de tu máquina, ¿vale? 00:50:51
Yo tengo un problema con el puti 00:50:53
que me da error fatal. 00:50:54
Y me dice no conectado. 00:50:56
No sé por qué. 00:50:57
No entro ni siquiera. 00:50:58
¿Al puti? 00:51:00
Sí. 00:51:01
le pongo la dirección 00:51:02
le pongo el SSH, le doy a open 00:51:04
y no me... 00:51:06
se pone PuTTY inactivo porque ha dado un error fatal 00:51:08
vale 00:51:10
puede ser que tengas 00:51:12
algún 00:51:13
antivirus en marcha o algo 00:51:15
no suelo tenerlo 00:51:17
vale, te voy a buscar 00:51:19
una alternativa PuTTY 00:51:22
Juan Félix 00:51:23
los que tenemos Linux 00:51:28
si utilizáramos el terminal 00:51:30
podríamos acceder 00:51:32
con una sesión tipo Telnet 00:51:33
con una sesión SSH 00:51:35
mejor, en vez de Telnet 00:51:38
sí, pero podríais perfectamente 00:51:40
a ver 00:51:41
yo que sé, el KITI por ejemplo 00:51:43
el KITI seguirá siendo gratuito 00:51:46
espero 00:51:48
vale, es este, prueba 00:51:48
que no le funcione al PUTI, que pruebe con el KITI 00:51:51
KITI 00:51:54
lo que pasa es que KITI creo que es solo para 00:51:55
no sé si tienen versión 00:51:58
creo que es solo para Windows 00:51:59
yo tengo Windows, sí 00:52:00
Kitty de nuevo el set 00:52:02
ya le saltamos 00:52:04
aquí 00:52:07
abrí 00:52:08
lo que pasa es que son de estas páginas 00:52:11
que no sabes lo que estás descargando ya 00:52:16
Kitty download 00:52:18
descargar la versión 00:52:20
clásica, la Windows clásica 00:52:22
entonces yo ya tengo aquí el Kitty 00:52:24
el Kitty es parecido 00:52:28
es este que ves aquí, vale, es muy parecido al Putty 00:52:30
y si, es parecido 00:52:33
entonces 00:52:35
bueno, de hecho es idéntico 00:52:36
es idéntico porque me está cogiendo 00:52:37
hasta la configuración de Putty 00:52:41
vale, pues pones ahí 00:52:42
y cuando termines, cuando des ahí 00:52:44
¿qué es? ¿dónde tienes que dar? 00:52:46
aquí tienes que escribir la dirección IP 00:52:48
¿quién eres tú? perdona 00:52:49
Fernando, con el 5 me parece que estoy 00:52:52
vale, Fernando 00:52:55
voy a entrar yo, vale 00:52:56
Fernando Rosa 00:52:57
Vale, Fernando, pues pones esta dirección IP 00:52:59
que es 116, 203, 135, 115. 00:53:01
Y no hay que tocar nada más, ¿vale? 00:53:08
El puerto queda al 22. 00:53:09
Sí, y aquí es donde se va a empezar. 00:53:11
Lo único, asegúrate que pongas SH y le das Open. 00:53:13
¿Open dónde estaba? No lo he visto. 00:53:16
Open abajo a la izquierda. 00:53:19
Hay cuatro o cinco botones abajo a la izquierda 00:53:21
y el primero es Open. 00:53:23
Vale, vale. 00:53:24
Y te debería salir un mensaje de alerta de este estilo. 00:53:25
vale, no he llegado antes 00:53:29
a ver, voy a ir con el kit y a ver si me deja 00:53:31
gracias 00:53:33
te dejo entonces ahí solo 00:53:34
tú sigues si quieres 00:53:36
vale, entonces 00:53:37
lo que os estaba diciendo, ahora tenemos que instalar Docker 00:53:41
entonces 00:53:43
hay varias formas de instalar Docker 00:53:44
lo que os pongo aquí, lo que estáis viendo en pantalla ahora 00:53:46
son las instrucciones sacadas 00:53:49
de la propia documentación de Docker 00:53:51
entonces lo suyo es ir al sitio 00:53:53
de documentación de Docker y según el sistema 00:53:54
operativo que tengáis, pues un Ubuntu 00:53:57
un Raspbian, lo que 00:53:59
sea, ahí te va a decir cómo se instala, ¿vale? 00:54:01
y la instalación, como veis 00:54:03
en este caso, tiene como varias 00:54:05
partes, una primera parte que es 00:54:07
añadir las claves, otra segunda 00:54:09
parte que es añadir el repositorio 00:54:11
y otra 00:54:12
perdonad, que estoy con alergia 00:54:14
y me vienen estos nudos, a ver, y otra que es 00:54:18
hacer la instalación, que es esta de aquí abajo, ¿vale? 00:54:20
entonces, todo esto os lo voy a 00:54:22
pegar en el chat 00:54:24
y vais a tener que ir ejecutando, comando 00:54:26
a comando, vale, os llamo 00:54:28
la atención sobre este 00:54:30
fijaos este comando 00:54:31
eso es un único comando, vale, veis que está 00:54:33
sangrado, pues eso es un único comando 00:54:36
entonces si queréis, esperad a que lo vaya 00:54:38
haciendo yo y lo vamos haciendo a la vez, entonces 00:54:40
os lo pego en el chat para que lo tengáis 00:54:42
vamos al chat 00:54:44
y que no se desespere nadie porque la recompensa 00:54:47
merece, bien 00:54:55
y ahora, del chat 00:54:57
¿qué hacemos? pues vamos cogiendo esos comandos 00:54:59
cojo el primero 00:55:01
en el chat lo que pasa es que creo 00:55:02
que se ve partido. No sé si se puede 00:55:05
poner el chat más ancho. 00:55:07
Juanfe, 00:55:08
yo es que estoy con dos 00:55:09
ordenadores. En uno te tengo aquí 00:55:13
y en otro lo tengo 00:55:15
esto. ¿Puedes pegar esto en 00:55:19
el aula 00:55:20
o en algún otro lado todo el fichero? 00:55:23
¿Sabes lo que te digo? No sé si me he explicado. 00:55:27
Sí, sí, sí. 00:55:29
Es que si no, voy a tener que estar tecleando 00:55:31
ahí todo, de un 00:55:33
ordenador a otro. 00:55:35
eso es lo que estoy haciendo yo 00:55:36
estoy tecleando tecla a tecla 00:55:38
con las instrucciones iniciales 00:55:40
las que tienes ahora mismo en pantalla 00:55:43
lo mismo que hiciste 00:55:44
el martes 00:55:48
que lo pegaste ahí 00:55:50
en el aula 00:55:51
lo haces igual 00:55:53
y desde el aula ya lo cogemos 00:55:56
es lo mismo que hiciste el martes 00:55:58
con el programilla este 00:55:59
vale, voy al aula virtual 00:56:01
entonces 00:56:04
lo voy a pegar 00:56:05
ahí en el tema 4 00:56:11
en el tema 2 00:56:13
tema 4, añadir 00:56:15
un área de texto 00:56:17
instalación docker 00:56:21
instalación docker 00:56:26
a ver que verifique que está bien 00:56:28
sí, creo que está bien 00:56:32
vale, pues lo tenéis ahí, vale, guardar 00:56:36
sí, ahí está 00:56:39
lo he puesto por secciones para que sepáis 00:56:46
lo que estamos haciendo en cada uno 00:56:48
ya aparece, gracias 00:56:49
pues nada, ahora lo que no sé 00:56:51
es si podéis copiarlo de ahí, porque a mí no me deja 00:56:54
Dios, no me digas esto ahora 00:56:55
a ver, ¿podéis copiar el texto de ahí? 00:56:57
sí, sí, yo sí puedo copiarlo 00:56:59
que susto 00:57:01
¿en qué parte estamos? que estoy perdido 00:57:02
tema 3, tema 4 00:57:05
tema 4 00:57:06
vale, está 00:57:09
entonces, el primer comando que cojo es este 00:57:10
sudo apt-get update 00:57:14
y me lo llevo a mi consola 00:57:15
de Putty 00:57:19
y lo pego ahí, ¿cómo se pega? con el botón 00:57:20
derecho del ratón, ¿vale? 00:57:23
se pulsa el botón derecho del ratón, no es con control V 00:57:25
es botón derecho del ratón 00:57:27
o sea, lo copiáis con control C 00:57:28
pero pegarlo es botón derecho del ratón 00:57:31
no lo estás compartiendo, ¿no? 00:57:33
¿no? 00:57:35
lo estás compartiendo, a ver 00:57:36
sí, yo lo estaba viendo 00:57:38
ah, sí 00:57:40
sí, sí, sí 00:57:43
vale, yo ya he copiado el primero 00:57:43
¿vale? y esto es uno detrás de otro 00:57:47
o sea, sin más 00:57:49
ya he hecho el sudo apt-get update 00:57:50
ahora pego el siguiente 00:57:53
el siguiente 00:57:55
el siguiente 00:57:59
y el siguiente 00:58:08
los que empiezan 00:58:14
con almohadilla no son comandos, ¿vale? 00:58:16
los que empiezan con almohadilla son 00:58:18
comentarios, entonces eso no hace falta que lo 00:58:20
peguéis. Perdona, Juanfe 00:58:22
en la ventana de Putty, ¿no? 00:58:24
Exacto 00:58:27
y fijaos 00:58:27
copiar comando a comando 00:58:29
lo que tienes ahí 00:58:33
exacto, pero esto es un solo comando 00:58:34
el que estoy enseñando ahora 00:58:37
todo este largote 00:58:38
es uno solo 00:58:39
Adrián y Modesto 00:58:41
esto no lo hagáis porque ya lo estoy 00:59:27
haciendo yo, ¿vale? Entonces, si lo hacéis, lo único 00:59:29
es que, bueno, pues estamos haciendo todos 00:59:31
lo mismo. Entonces, esperáos a que 00:59:33
lleguemos luego a la parte de 00:59:35
MIM y ahí ya lo 00:59:38
hacéis vosotros. Sí, sí, sin problema. 00:59:39
Yo ya he estado alguna vez en algún Linux, 00:59:41
así que no... 00:59:43
Entonces, vamos a ir todos hasta este comando, 00:59:47
¿vale? Hasta este que tengo yo 00:59:50
aquí marcado, el sudo apt-get install docker. 00:59:51
La almohadilla también, no, ¿no? 00:59:56
No, los que tienen almohadilla 00:59:58
los ignoráis. Esa línea la ignoráis. Es un comentario. 01:00:00
El que has dicho que es solo uno 01:00:04
es este aquí. El de Echo 01:00:06
son cuatro líneas las que ocupa. 01:00:08
Correcto. 01:00:10
No me lo deja. 01:00:49
¿Cuál no te deja? 01:00:51
El app de repository. 01:00:53
Los he ido colocando a mano todos 01:00:56
para evitar complicaciones 01:00:58
pero cuando le doy a botón 01:01:00
me posiciono 01:01:02
en el putty con el ratón 01:01:04
pulso botón derecho 01:01:06
se me queda el icono verde 01:01:09
no me aparece como habitualmente 01:01:12
me ocurre en los terminales 01:01:14
que te aparece todo el texto 01:01:16
no me pega nada 01:01:17
¿qué comando es el que estás pegando ahora? 01:01:19
el add 01:01:23
iba a copiar add de repositorio 01:01:24
y las cuatro líneas 01:01:26
esa línea, la de 01:01:28
acer repository, esa no la has copiado, ¿no? 01:01:31
no, todavía, esa no 01:01:34
he intentado copiar la entera 01:01:35
esa y las otras tres 01:01:37
pero no me coge, no me aparece ninguna 01:01:39
en pantalla 01:01:41
vale, esta no la tienes que pegar, ¿vale? 01:01:41
la que tiene almohadilla, no, la que tiene almohadilla es un comentario 01:01:44
entonces, es la que empieza 01:01:47
por echo, la copias 01:01:48
que lo estoy haciendo yo ahora 01:01:50
control c 01:01:51
vale, un segundito, echo 01:01:53
no me sale nada en pantalla 01:01:56
voy a tratar de ponerlo a pelo 01:02:19
aunque me cueste 01:02:21
no, no, a pelo te vas a llevar un rato 01:02:22
tú tienes que escribir 01:02:24
esto lo estoy intentando 01:02:25
selecciono el texto 01:02:28
le doy a copiar 01:02:29
me voy al terminal 01:02:31
me posiciono 01:02:34
a ver, control c 01:02:36
por si hay algún error 01:02:37
es que con un terminal normal le doy a copiar 01:02:38
y pegar y me lo coge, pero es que aquí 01:02:43
botón derecho 01:02:45
botón derecho 01:02:46
tendría que salir directamente 01:02:48
no me sale 01:02:51
por eso es lo que me extraña 01:02:52
voy a intentar de ponerlo a mano 01:02:55
Vamos a ver. 01:02:57
está el Docker. Ahora podéis comprobar que el Docker está funcionando si escribís 01:03:33
Docker. Escribís Docker, sin más, pulsáis intro y veréis que os saldrá ahí toda la 01:03:37
información de Docker. Entonces, voy a contaros lo que vamos a hacer a continuación. El siguiente 01:03:42
paso va a ser crearnos un usuario que no sea el usuario raíz. Ahora mismo estamos utilizando 01:03:48
nuestra máquina virtual como usuario raíz, como el usuario superadministrador, por así 01:03:52
decirlo, hay aplicaciones 01:03:58
que no permiten 01:04:01
ser instaladas por el usuario raíz 01:04:02
luego vais a ver un ejemplo de ellas 01:04:04
entonces para evitar eso 01:04:06
lo que vamos a hacer es añadirnos 01:04:08
un usuario nuevo en nuestra máquina 01:04:10
eso se hace con los cuatro comandos 01:04:12
que os he puesto aquí abajo, el primer 01:04:14
comando 01:04:16
añade un usuario, en este caso yo lo he llamado 01:04:17
Juanfe, vosotros podéis poner ahí vuestro nombre 01:04:20
sudo adduser juanfe 01:04:22
el segundo comando 01:04:24
añade juanfe 01:04:26
al grupo docker 01:04:28
sabéis que en las máquinas 01:04:29
unit los usuarios 01:04:32
pueden pertenecer a varios grupos 01:04:34
y esos grupos les confieren 01:04:35
ciertas capacidades 01:04:37
entonces lo que vamos a hacer es añadir el usuario 01:04:39
que creáis tanto 01:04:41
al grupo docker como al grupo 01:04:43
sudo, con lo cual se va a convertir 01:04:46
en un super usuario 01:04:48
y por último vamos a comprobar 01:04:49
que sois capaces de cambiar de usuario 01:04:51
eso se hace con su guion y el nombre 01:04:53
del usuario 01:04:55
entonces bueno, yo voy a empezar a hacer esto 01:04:56
despacio para dar tiempo a que el compañero 01:04:59
nos coja, entonces añado 01:05:01
el usuario, vale, cuando 01:05:03
lo añado lo primero que me dice, oye 01:05:05
¿qué contraseña quieres dar a este usuario? 01:05:07
esto si queréis Modesto y Adrián 01:05:09
si lo podéis hacer, si queréis, vale, podéis 01:05:11
crearos vuestros propios usuarios 01:05:13
¿lo podemos hacer en paralelo o esperamos 01:05:15
a que lo hagas tú? Sí, sí, lo podéis hacer en paralelo 01:05:17
perfectamente, pero no le llaméis 01:05:19
Juanfe, darle otro nombre 01:05:21
vale, entonces 01:05:22
Les tengo que escribir la contraseña para Juanfe dos veces. 01:05:25
Luego me piden una serie de datos, el nombre completo, la habitación, el número de teléfono. 01:05:28
Todo eso lo dejáis vacío. 01:05:34
Y al final te dice, ¿es la información correcta? 01:05:37
Pulsáis Yes y ya está. 01:05:40
Ya está añadido el usuario Juanfe. 01:05:41
Siguiente paso. 01:05:44
Una vez que ya tengo ese usuario, lo añado al grupo Docker. 01:05:45
Eso es tan sencillo como pegar ese comando que veis ahí. 01:05:50
Lo añado también al grupo sudo. 01:05:55
Sí, perdón. 01:05:58
Perdona, cuando te introduces el número de usuario, 01:05:59
te pide que introduzcas la password, ¿no? 01:06:02
La que hemos puesto nosotros. 01:06:04
No, la password que tú le quieras asignar a ese usuario. 01:06:06
Estás creando un usuario nuevo y te dice 01:06:09
qué contraseña quieres que use este usuario. 01:06:11
Entonces, fue la password que tú quieras. 01:06:14
Vale. 01:06:16
oye Juanfe, una duda 01:06:57
porque yo iba ahí todo disparado, no lo sé 01:07:00
el sudo 01:07:02
el sudo 01:07:03
apt-get install docker 01:07:05
ese que se hace justo antes del usuario 01:07:08
que estamos creando, eso se hacía 01:07:10
como root, ¿no? 01:07:12
sí, como root 01:07:14
me pide un full number y un room number 01:07:15
sí, eso dale intro 01:07:19
lo dejas vacío, eso no hace falta especificarlo 01:07:20
es opcional 01:07:22
opcional, todo eso es opcional 01:07:23
todo esto fuera, ¿no? 01:07:26
intro, intro, intro, hasta que te diga 01:07:27
es correcta la información 01:07:30
y entonces pulsas la Y de Yes 01:07:31
y pulsas intro, y ya está 01:07:34
vale, ya está 01:07:35
ese es el primer comando, ahora seguimos con los demás, ¿no? 01:07:36
claro, ese es el primero 01:07:40
que es crear el usuario, y ahora lo que vas a hacer 01:07:41
es ese usuario incluirlo dentro de un grupo 01:07:44
que se llama Docker, y dentro de otro grupo 01:07:45
que se llama sudo, cada uno de estos grupos 01:07:47
le confiere habilidades, por ejemplo 01:07:50
el primero, pues le confiere la habilidad de poder 01:07:51
instalar, descargar imágenes 01:07:53
levantar contenedores, ¿vale? 01:07:55
y el segundo lo convierte en un superadministrador 01:07:57
del sistema 01:07:59
¿Puedes dejar la página con los comandos? 01:08:00
Ah, sí, perdón 01:08:02
Está 01:08:03
aquí 01:08:06
No, no 01:08:08
Ah, sí, vale, la de user mod 01:08:10
Vale, sí 01:08:13
Hola, acabo de entrar ya, por fin 01:08:13
Me pierdo la clave 01:08:17
No, era que 01:08:20
al ser una contraseña 01:08:20
que estaba confundiendo 01:08:23
una letra, porque estaba subrayada de rojo 01:08:26
y no veía la I por la V. No, no. 01:08:28
He instalado el kitty de las 01:08:30
narices, que me ha costado. 01:08:32
Y ya con el kitty, después 01:08:35
de un buen rato, ya he entrado 01:08:36
y ahora ya estoy perdido absolutamente. 01:08:38
O sea, gracias, pero 01:08:40
bueno, me veré el vídeo, porque 01:08:41
otra cosa... No, no, no. 01:08:44
No estás tan perdido. Si ya estás dentro, 01:08:46
¿vale? Sí. Lo único que tienes que hacer 01:08:48
es ir pegando estos comandos de uno en uno. 01:08:50
Que los tienes ahí en 01:08:52
el aula virtual. 01:08:54
¿Vale? 01:08:56
Pego comando y doy a intro. 01:08:57
Perdón, no te he escuchado bien. 01:08:59
Perdón, pego comando y doy a intro. 01:09:01
Exacto. 01:09:04
Lo copias aquí, luego te vas 01:09:05
al terminal, 01:09:07
lo pegas, pero con el botón derecho del ratón 01:09:09
se pega aquí en este terminal, ¿vale? 01:09:11
Y ves que te va a aparecer 01:09:13
y pulsas intro. Comando a comando. 01:09:14
Y ya está. 01:09:18
Pero el otro número, 01:09:20
otro nombre al usuario. 01:09:21
¿Perdón? 01:09:26
simplemente tú vete añadiendo estos comandos 01:09:29
tú no uno, por favor 01:09:33
vale, ten en cuenta lo que he dicho 01:09:33
este del echo son cuatro líneas 01:09:36
es un solo comando 01:09:38
el resto no, el resto son 01:09:39
una sola línea 01:09:42
venga, entonces lo que os decía 01:09:43
ya tengo mi usuario 01:09:49
¿cómo cambio de usuario? pues simplemente escribe 01:09:50
su guión y yo quiero cambiar a Juanfe 01:09:52
primero, ¿cómo sé que estoy en root? 01:09:54
porque fijaos, aquí en el prom 01:09:56
veis que pone root 01:09:58
ahora mismo estoy identificado como el usuario 01:09:59
root en la máquina 01:10:02
ismie01, ahora con el comando 01:10:04
su-juanfe 01:10:06
me dice que estoy identificado 01:10:07
como el usuario juanfe 01:10:10
en la máquina ismie01 01:10:12
si quiero volver a ser root, pues simplemente 01:10:14
hago su-root 01:10:16
me pide la contraseña del root 01:10:18
que ahora 01:10:20
es ismie.iot 01:10:22
y veis, ya vuelvo a ser 01:10:23
root 01:10:26
esto es simplemente para que lo practiquéis 01:10:27
como se cambia de un usuario a otro 01:10:31
es más rápido 01:10:33
si escribes exit y ya está 01:10:34
no te pide contraseña 01:10:36
pues ya está, es más rápido todavía 01:10:38
y si sois como yo, que no tenéis mucha experiencia 01:10:44
en Linux, pues todo esto de tener que 01:10:54
usar el terminal os parecerá un suplicio 01:10:55
¿vale? que a mí me pasa 01:10:58
entonces, ¿qué es lo que vamos a hacer a continuación? 01:10:59
pues lo primero que vamos a hacer 01:11:02
es instalarnos Portainer 01:11:04
Portainer es un gestor 01:11:05
de contenedores, es una 01:11:08
interfaz gráfica para manejar 01:11:09
Docker, entonces ya no vamos a tener que escribir 01:11:12
más cosas en el terminal 01:11:14
¿vale? voy a esperar unos 01:11:16
minutillos para resolver 01:11:19
dudas, sí que me gustaría que por favor nadie abandone 01:11:21
o sea, por muy perdido que crea uno 01:11:23
que está, realmente no es tan 01:11:25
complicado, salvo que surjan 01:11:27
problemas con el ordenador o algo así 01:11:29
pero es básicamente copiar y pegar 01:11:31
esto que está extraído 01:11:33
directamente de la documentación, o sea, yo aquí no he inventado 01:11:35
nada, está tal cual está 01:11:37
la documentación y lo único que he hecho es 01:11:39
ponerlo aquí en fila para que os resultara 01:11:41
más sencillo 01:11:44
Vale, esto 01:11:45
estoy en 1, 2, 3 01:11:50
4, 5, 6, 7, el séptimo 01:11:52
comando que es una dirección HTTPS 01:11:54
¿se supone también? 01:11:56
No, a ver, tú estás en, me temo que estás 01:12:01
en el comando de que empieza por 01:12:03
no, no, no, todavía no 01:12:04
he hecho todos los sudos 01:12:07
sudo, sudo, certificate, sudo, etc 01:12:08
sudo, ahora viene un HTTPS 01:12:11
eso también se pone 01:12:13
dime cuál es porque 01:12:15
no estoy entendiendo cuál me dices 01:12:17
léemelo un poco más, por favor 01:12:18
línea 9 que puede ser 01:12:20
1, 2, 3, 4, 5 01:12:22
6, 7, la línea 7 01:12:25
no, perdón 01:12:26
ah, no, vale, vale, perdón 01:12:29
es que no me he mirado aquí 01:12:30
y he copiado 01:12:32
el Sudocool 01:12:34
FS sin el HTTPS 01:12:37
la línea 9 01:12:39
no, no, no, 1, 2, 3 y 4 01:12:42
la línea, ¿esa es la 9? 01:12:44
ah, sí, no es la línea 9, perdón 01:12:47
sí, es que estaba contando 01:12:48
pues esa nada, simplemente coges todo esto 01:12:49
y lo copias y lo pegas y ya está 01:12:53
cojo todo, vale, vale, es que no 01:12:54
la contraseña de Rucco la he dicho que era, Juanfe 01:12:56
la que hayas puesto tú 01:12:59
¿tú eres Adrián o Modesto? 01:13:01
no, no, no, no 01:13:02
pues esa la has puesto tú, la contraseña 01:13:04
ya la has puesto tú 01:13:06
a ver, Juanfélix 01:13:07
estoy, sigo perdido 01:13:20
en el 01:13:22
añadir el repositorio a las 01:13:24
fuentes, a las apt-surs 01:13:26
cuando lo 01:13:28
meta por línea de comando 01:13:30
la comilla que aparece delante del 01:13:32
dep, la quito o la mantengo 01:13:34
no, no, se mantiene todo, tiene que estar 01:13:36
idéntico a como está ahí, no se quita nada 01:13:38
el eco barra hacia atrás 01:13:40
todo seguido 01:13:42
con un espacio en medio 01:13:44
entre el eco y la barra un espacio 01:13:46
entre la barra y el 01:13:47
yo he copiado en un editor de texto plano 01:13:49
claro, copiátelo en un editor 01:13:52
a ver si te está cogiendo 01:13:54
igual te está cogiendo caracteres raros o algo 01:13:55
no sé lo que puede estar pasando 01:13:58
por eso he cogido el editor de texto plano de linux 01:13:59
a ver si me lo coge 01:14:02
lo pego de todas formas 01:14:03
en el chat 01:14:05
No, si el problema que tengo, Juan Félix, es que le doy a pincho, intento darle botón derecho, botón izquierdo y no me aparece nada en el put y no sé si es que al configurarlo alguna de las opciones que tiene de retorno de carro o alguna de estas no la ha configurado. 01:14:07
Esperamos, ya lo intentaré. 01:14:29
No te sé decir porque no me ha pasado nunca. 01:14:32
bueno 01:14:35
vamos a dar un pasito más 01:14:37
como seguramente nos atranquemos 01:14:40
otra vez, pues no desistáis 01:14:42
por favor, seguid intentándolo 01:14:44
insisto, son pasos 01:14:45
la operativa 01:14:48
es sencilla, porque es copiar 01:14:50
esto, pero claro, si no tienes que copiar a mano 01:14:52
es fácil que cometas errores o demás 01:14:54
entonces, por favor, no desistáis y continuar 01:14:55
¿vale? entonces 01:14:58
¿qué tenemos ahora? pues lo que tenemos ya 01:14:59
es un motor de contenedores instalado 01:15:02
tenemos aquí, estoy como usuario raíz 01:15:04
entonces lo que ha comentado Germán 01:15:07
si habéis entrado al usuario 01:15:09
Juanfe o al que 01:15:11
os hayáis creado, pues dais exit y volvéis 01:15:13
al raíz, y ahora lo que vamos a hacer 01:15:15
es instalar Portainer 01:15:17
para poder instalar Portainer 01:15:19
recordad lo que os he dicho, lo que tenemos que hacer 01:15:21
es ir 01:15:23
al registro y descargarnos 01:15:24
la imagen de Portainer, una vez que tengamos 01:15:27
la imagen, que son esas capas de solo lectura 01:15:29
vamos a desplegar un 01:15:31
contenedor sobre esas capas 01:15:33
de la imagen, ¿vale? 01:15:35
¿Esto cómo se hace? Pues mira, os pongo la presentación. 01:15:37
Esto es volver ya a la presentación, ¿vale? 01:15:40
Entonces, el primer comando 01:15:42
es descargar la imagen 01:15:43
que os lo voy a pegar 01:15:45
para que lo tengáis 01:15:47
en el chat y lo voy a 01:15:49
ejecutar yo. Ahí lo único que le estamos 01:15:57
Una pregunta, 01:16:00
entonces, ahora antes de ejecutar 01:16:01
este comando, ¿estamos como root 01:16:04
o como el nuevo usuario que nos hemos creado? 01:16:06
estamos como root ahora mismo 01:16:08
como root, vale 01:16:10
pero vamos, daría igual, pero bueno, estamos como root 01:16:11
¿en qué 01:16:14
diapositiva estás? 01:16:17
en la diapositiva 44 01:16:19
¿esto qué ha hecho? 01:16:22
pues ha descargado la imagen 01:16:36
de Portainer 01:16:38
pero aún no tenemos el contenedor creado 01:16:39
entonces lo primero que podríamos 01:16:41
querer saber es, oye, pero esta 01:16:43
esta imagen, ¿dónde está? 01:16:45
¿dónde está almacenado 01:16:48
en mi ordenador, pues esto si no queréis 01:16:49
no lo hagáis, lo hago yo 01:16:51
tú puedes hacer, está ahí en la presentación de todas formas 01:16:53
no os perdéis nada 01:16:56
yo le puedo dar un docker info 01:16:57
¿vale? y al hacer el docker info 01:16:59
a ver si lo puedo poner más grande 01:17:02
para que lo veáis 01:17:05
lo que vais a ver aquí 01:17:06
es que, a ver 01:17:09
aquí bajo la esta 01:17:11
aquí hago el docker info 01:17:15
veis que aquí hay una línea 01:17:16
que me dice que está utilizando 01:17:21
el controlador overlay 2 01:17:24
y aquí abajo hay otra línea que me da el pad de docker 01:17:26
aquí es donde se están instalando esas imágenes 01:17:30
entonces toda esa información la tenéis ahí 01:17:33
esto no hace falta que lo hagáis, vosotros seguís con lo que estéis 01:17:36
yo simplemente voy a ir contando algunos detalles sobre docker 01:17:42
para que no sintáis que estáis haciendo 01:17:45
algo mágico, sino que realmente lo que estamos haciendo 01:17:48
Simplemente bajarnos un archivo de imagen, que ese archivo de imagen está perfectamente ubicado en esta carpeta var lib docker overlay 2, ¿vale? Entonces yo, por ejemplo, si hago un ls de esa carpeta, var lib docker overlay 2, veis que ahí tengo unos números que me parecen rarísimos, ¿vale? 01:17:51
estos números en realidad tan raros 01:18:15
son cada una de esas capas de la imagen 01:18:17
que os estaba hablando anteriormente, ¿vale? 01:18:19
¿Cómo lo puedo saber eso? Pues eso 01:18:21
por ejemplo, tú puedes decir 01:18:23
para saber qué imágenes tienes instaladas, le dices 01:18:24
docker image, ¿vale? 01:18:27
Y veis que me dice que ahora mismo 01:18:29
la única imagen que tengo descargada 01:18:31
es la imagen de 01:18:33
Portainer. Y para 01:18:35
inspeccionar esa imagen 01:18:36
tengo que escribir docker image 01:18:39
esto no hace falta que lo hagáis, ¿eh? Insisto, simplemente 01:18:41
para que quede aquí como referencia grabado en el vídeo 01:18:43
estoy ejecutando una serie 01:18:46
de comandos de docker para que vosotros 01:18:48
tengáis un poco más de noción de cómo 01:18:50
funciona esto, entonces lo voy a inspeccionar 01:18:52
inspect 01:18:54
y tengo que poner el nombre que tiene la imagen 01:18:55
que el nombre es este que veis aquí 01:18:58
portainer, portainer c 01:18:59
entonces lo pego ahí 01:19:01
y veis aquí lo que se está diciendo 01:19:02
veis aquí tenemos 01:19:05
la capa inferior 01:19:07
que es uno de esos números raros que hemos visto 01:19:08
en la capa overlay 2 01:19:11
la capa de fusión y la capa superior 01:19:12
son distintas capas 01:19:15
así es como funciona Docker, las aplicaciones 01:19:16
están distribuidas en capas 01:19:19
entonces todo eso que 01:19:21
aparece ahí tan abstracto y tan complicado 01:19:22
en realidad son esas capas que os estaba enseñando 01:19:25
anteriormente en el gráfico 01:19:27
la capa 01:19:30
lower que es la de solo lectura, la capa 01:19:31
upper que es la de lectura y escritura 01:19:33
la capa merge que es la combinación de las dos anteriores 01:19:35
y la word que normalmente 01:19:37
es un directorio que está vacío, que es una capa 01:19:39
de trabajo, bueno, eso no tiene mayor 01:19:41
trascendencia, vale, ahora 01:19:43
ya si que, esto si lo tenéis que hacer 01:19:45
lo que vamos a hacer es ejecutar 01:19:47
contenedor de portainer 01:19:51
sobre esa imagen de portainer 01:19:53
y eso como se hace, con este comando 01:19:55
que veis aquí, que os lo voy a pegar, vale 01:19:57
y os lo voy a explicar 01:19:59
lo pego en el chat 01:19:59
y lo explico 01:20:03
entonces 01:20:05
en este comando lo que le estamos diciendo 01:20:09
docker 01:20:12
Quiero ejecutar la de paso de ahora de momento, ¿vale? 01:20:14
Eso es detached, que quiere decir con un terminal propio. 01:20:18
Quiero ejecutar, veis aquí, al final, este contenedor haciendo binding del puerto de la máquina anfitrión 8000 01:20:22
al puerto del contenedor 8000, haciendo binding del puerto de la máquina anfitrión 9443 01:20:32
al puerto del contenedor 9443 01:20:38
asignando a esta imagen 01:20:41
el nombre portainer 01:20:43
de tal forma 01:20:44
que en caso de que se apague 01:20:45
el ordenador 01:20:47
ella sola se reinicie siempre 01:20:48
con docker 01:20:50
y además quiero crear 01:20:51
varios volúmenes 01:20:53
esta V indica 01:20:54
quiero crear este volumen 01:20:55
y luego quiero crear 01:20:56
este otro volumen 01:20:57
recordad que los volúmenes son 01:20:58
directorios de la máquina anfitrión 01:21:00
este directorio 01:21:03
que quedan vinculados 01:21:04
a directorios del contenedor 01:21:06
De tal forma que lo que el contenedor almacenaría en este directorio y que se perdería en caso de que el contenedor se parase, lo que ocurre es que en lugar de guardarse en ese directorio del contenedor, se almacena en un directorio de la máquina anfitrión, que es este otro directorio, ¿vale? Y así evitamos que se pierda ese contenido. 01:21:08
Entonces, concretamente aquí, en el caso de Portainer, 01:21:27
os puede parecer un poco raro que hagamos binding de dos puertos. 01:21:31
Bueno, el puerto que realmente utiliza Portainer es el 9443. 01:21:34
Pero el puerto opcional es 8000 y se utiliza para algunas funcionalidades avanzadas. 01:21:39
Aquí, hoy concretamente no lo vamos a usar. 01:21:45
Pero bueno, como este es el comando que os vais a encontrar cuando vayáis al registro de Portainer en Docker Hub, 01:21:47
para que sepáis por qué está ahí eso. 01:21:55
Entonces, ese comando directamente me voy al terminal y lo ejecuto. Y ya está. Con esta operación, lo que acabo de conseguir es levantar un contenedor de Portainer en este servidor. Y ahora ese contenedor yo puedo acceder desde mi navegador web. 01:21:56
lo único que tengo que hacer, esto ya lo podéis 01:22:15
hacer también vosotros si queréis, Modesto 01:22:17
y Adrián, es en el navegador web 01:22:19
en Firefox o en el que vosotros utilicéis 01:22:21
voy a escribir 01:22:23
la dirección IP de mi 01:22:26
de mi 01:22:29
ISMIE01, a ver si me acuerdo 01:22:30
de cuál es 01:22:33
es esta de aquí, con el puerto 01:22:34
9443 01:22:49
hay que hacerlo con HTTP 01:22:52
S, ¿vale? 01:22:55
Con una petición HTTP no lo admite, HTTPS, dos puntos, barra, barra, ¿vale? Igual, como no tengo certificados, os sale esta advertencia de riesgo, le dais avanzado y le dice, sí, soy consciente y acepto el riesgo, ¿vale? 01:22:56
Y ahora aparece Portainer. 01:23:15
Aquí podéis estar teniendo un problema gordo. 01:23:18
Y es que si tardas más de 5 minutos en acceder a Portainer, 01:23:21
después de haber instalado la imagen, 01:23:25
no te va a permitir crear el usuario administrador, ¿vale? 01:23:27
Se va a detener el contenedor directamente. 01:23:31
Entonces, si os pasase eso, ¿qué tendréis que hacer? 01:23:33
Venir al terminal y en el terminal escribir 01:23:36
docker stop 01:23:39
por tainer 01:23:40
y docker 01:23:42
start por tainer 01:23:46
docker 01:23:48
start por tainer 01:23:49
esto como os digo es simplemente 01:23:53
una medida de seguridad 01:23:55
por si tardáis mucho tiempo en establecer la 01:23:56
contraseña para que no quede esto abierto 01:23:58
ahí sin ninguna contraseña 01:24:00
bueno yo ya que he accedido por primera vez 01:24:02
pues como veis lo que me está pidiendo 01:24:04
es una contraseña para 01:24:07
el usuario raíz que va a ser 01:24:08
Adrián y Modesto va a ser la misma 01:24:10
de antes, ¿vale? 01:24:12
Ismie, IOT 01:24:14
¿Confirmo la contrase? No, están muy fastidios 01:24:15
Tiene que ser al menos de 12 caracteres 01:24:18
Pues entonces va a ser 01:24:20
Ismie, Ismie 01:24:22
IOT 01:24:24
Ismie, Ismie, 5, 13, sí 01:24:25
Ismie, Ismie 01:24:29
IOT 01:24:31
Y creo el usuario 01:24:32
¿Puedes repetir esto último? ¿Cómo has entrado a esta 01:24:34
página para... ¿De dónde has sacado la IP? 01:24:43
Sí, la 01:24:46
La IP es la que os he dado en el documento 01:24:47
con las credenciales, ¿vale? 01:24:50
Y lo único es que cuando escribas 01:24:53
https://esa dirección IP 01:24:55
2.9443 01:24:58
te va a pedir que pongas 01:25:01
una contraseña nueva al usuario administrador. 01:25:03
Hay que añadir el puerto, ¿no? 9443. 01:25:07
Sí, sí, exacto. 01:25:10
9443, vale. 01:25:12
Pues es que a mí me da error. 01:25:13
no es seguro, a mí no me deja entrar 01:25:15
sí, sí, no, eso está bien 01:25:17
ahí estás bien, te dice no es seguro 01:25:19
pero abajo te pondrá opciones avanzadas 01:25:21
o continuar o algo así, dependiendo del navegador que estés usando 01:25:23
sí, ah, vale 01:25:26
sí, ah, vale 01:25:27
perfecto, ya está 01:25:29
¿es barra barra dos puntos o dos puntos 01:25:31
barra barra? 01:25:33
https dos puntos barra barra 01:25:35
la dirección IP dos puntos 01:25:37
nueve mil cuatrocientos cuarenta y tres 01:25:39
vale, ya estoy dentro, Juanfe 01:25:41
muy bien 01:26:00
Ah, vale. Nuestro es la que más has dicho, ¿no? 01:26:02
Admin. 01:26:04
Admin y Ismier, Ismier y Jotet. 01:26:06
Me dice timeout HTML autorización. 01:26:14
¿Qué puede ser eso? 01:26:18
Perdona, repítemelo que no lo he oído. 01:26:19
Sí, que me pone timeout html.html out. 01:26:22
Y no me ha pedido contraseña. 01:26:27
Https, dos puntos. 01:26:28
Voy a volver a intentarlo. 01:26:33
Sí, inténtalo. 01:26:34
igual, pero te parece 01:26:36
hay escrito algo en medio de 01:26:38
portainer, han pasado más de 5 minutos 01:26:39
new portainer installation 01:26:42
me parece 01:26:43
¿qué más dice ahí? 01:26:45
¿te dice algo más? 01:26:49
your portainer timeout of 01:26:51
security purposes 01:26:53
claro, pues eso es lo que os decía, si pasa más de 5 minutos 01:26:54
desde que 01:26:57
creáis el contenedor 01:26:59
hasta que accedéis a él 01:27:01
hay que pararlo y volverlo a poner en marcha 01:27:02
docker stop por tainer 01:27:05
docker start por tainer 01:27:07
Juanfe 01:27:09
puedes escribir el comando este de arrancar 01:27:11
el por tainer 01:27:14
en un fichero de texto 01:27:15
ahí en grande, es que al copiarlo 01:27:18
aquí en el chat está partido y 01:27:19
no sé si hay blancos por medio 01:27:21
este comando 01:27:23
lo dices, Germán 01:27:28
¿dónde quieres 01:27:29
que lo pegue? 01:27:33
déjalo ahí, a ver ahora 01:27:34
Es que me da error de formato, ¿no? 01:27:35
De que le estoy poniendo mal los parámetros. 01:27:43
Vale. 01:27:45
No sé qué será. 01:27:46
A ver si vuelvo a ella. 01:27:47
¿De username dejamos admin o cambiamos el username? 01:27:51
Sí, el username dejadlo, por favor. 01:27:54
Vale, de acuerdo. 01:27:56
Bueno, los que habéis llegado a instalar Portainer, 01:28:02
si queréis ir picheando un poco, 01:28:05
veis que estáis ahí en una pantalla inicial 01:28:06
que le está pidiendo elegir entre una de dos opciones. 01:28:08
La opción, perdona Germán, cambio un poco porque no me acuerdo. 01:28:13
La opción de la derecha es añadir un entorno. 01:28:16
¿Eso qué sería? 01:28:19
Eso sería que tú tienes Portainer en una máquina, 01:28:20
en este servidor que hemos creado en Nuremberg, 01:28:24
y que tú quieres usar ese Portainer para gestionar contenedores de otra máquina distinta. 01:28:26
Eso no es lo que queremos hacer nosotros. 01:28:32
Nosotros lo que queremos hacer es usar la opción de la izquierda. 01:28:34
entonces le dais directamente 01:28:36
a la opción de Get Startup 01:28:38
a la de la izquierda 01:28:41
y ahí podéis 01:28:42
ir investigando por vuestra cuenta 01:28:49
lo que queráis, ahí vais a ver 01:28:52
que tenemos contenedores, que tenemos plantillas 01:28:53
de momento tenemos 01:28:56
un único contenedor que es el propio contenedor 01:28:57
de Portainer, ¿estás con ello Germán? 01:28:59
Bueno 01:29:17
sigo aquí, me sigue dando 01:29:17
ahí el error 01:29:19
¿Quieres que te lo pegue en el documento 01:29:20
de la aula virtual, he añadido 01:29:28
al final del... 01:29:30
mejor, a ver si puedo hacer copiar y pegar 01:29:31
y se ve 01:29:34
pues lo pego, a ver si me deja editar 01:29:35
sí, arrancar 01:29:45
el contenedor 01:29:59
por binary 01:30:02
vale, pues ya 01:30:03
lo tienes ahí, vale, a ver si te deja cogerlo 01:30:09
de ahí 01:30:11
vale, entonces lo que os decía 01:30:12
si vais bicheando por ahí un poco 01:30:17
si dais aquí en la opción get started 01:30:20
veis que aparece que ahora mismo 01:30:21
el único entorno que tenemos es el entorno 01:30:24
local, entonces yo hago clic ahí 01:30:25
en el entorno local 01:30:28
y veis que me indica que ahora mismo no tengo 01:30:28
ningún stack, tengo una imagen, puedo acceder 01:30:31
a ver que imagen es esa 01:30:34
veis que la imagen que tengo es precisamente 01:30:35
la imagen de Portainer 01:30:38
que redes tengo 01:30:39
que volúmenes tengo, vale pues son los 01:30:41
volúmenes que hemos creado precisamente para Portainer 01:30:43
al arrancarlo, y luego 01:30:46
un detalle que tiene muy interesante Portainer 01:30:47
es este que os muestro aquí de las 01:30:50
plantillas, ¿vale? Entonces 01:30:52
fijaos, Portainer 01:30:54
viene con plantillas para que tú ya 01:30:56
puedas instalar directamente un montón de 01:30:58
aplicaciones, ¿vale? Aquí vienen unas pocas 01:31:00
entonces están organizadas 01:31:01
por categorías, entonces puedes decir 01:31:04
pues aplicaciones para la nube, aplicaciones 01:31:05
de monitorización, de plataforma 01:31:08
como servicio, ¿vale? 01:31:10
Aplicaciones para el borde 01:31:12
entonces veis que tenemos aquí 01:31:14
un montón de posibilidades 01:31:16
por ejemplo, si yo me voy al borde 01:31:17
veis que tengo 01:31:20
algunas de las que yo os he estado comentando 01:31:22
tenemos Grafana, tenemos InfluxDB 01:31:23
tenemos NodeRed 01:31:25
tenemos una versión de Mosquito 01:31:27
entonces lo interesante que tiene esto 01:31:29
es que ya podrías instalar desde aquí 01:31:31
si tú quisieras estas aplicaciones 01:31:33
ya no te tienes que andar con todo el rollo 01:31:35
que hemos tenido ahí en el terminal 01:31:37
de tener que estar descargando 01:31:39
la imagen y arrancando 01:31:41
el contenedor, sino que simplemente te vienes 01:31:43
aquí y dices, oye, yo quiero montar en mi servidor 01:31:45
un Wordpress o lo que sea 01:31:47
pues te vienes aquí a gestores 01:31:49
de contenidos y te puedes 01:31:51
montar un Drupal, un Joomla, lo que tú quieras 01:31:53
un Wordpress, ¿vale? que te quieres montar 01:31:55
yo que sé, hay muchísimas cosas 01:31:57
¿vale? a ver, por ejemplo, en plataforma 01:31:59
como servicio, pues un 01:32:01
docu, como contenedor 01:32:03
un gestor de imágenes, ¿vale? 01:32:05
tienes un montón de cosas 01:32:10
lo que tú quieras, un servidor, pues te puedes montar 01:32:11
un Apache o lo que necesites 01:32:13
un cross inverso 01:32:14
entonces 01:32:16
lo interesante es que tenemos esta posibilidad 01:32:18
de como os digo, de instalarnos 01:32:21
directamente 01:32:23
un contenedor, yo voy a 01:32:23
hacerlo con Node.Ref, entonces imaginaos 01:32:26
que yo quiero instalarme con Node.Ref 01:32:29
¿qué hago? le digo 01:32:30
hago clic aquí 01:32:32
le digo 01:32:34
le doy un nombre aquí arriba 01:32:37
le llamo por ejemplo Node.Ref 01:32:40
lo voy a llamar 01:32:45
la zona horaria 01:32:47
esto era 01:32:49
la zona horaria, no me acuerdo 01:32:50
como se ponía, era 01:32:53
no sé si era 01:32:54
era gmt más 1 01:32:57
no sé si era aquí poner gmt más 1 01:33:00
vale, y luego le digo 01:33:03
desplegar 01:33:05
entonces lo que está haciendo ahora es 01:33:06
descargar la imagen 01:33:16
del registro 01:33:17
crear el contenedor 01:33:19
y cuando termine tendremos el contenedor 01:33:21
listo para poderlo utilizar 01:33:23
¿Lo vamos haciendo? 01:33:24
No, esto si queréis no lo hagáis, ¿vale? 01:33:29
Simplemente lo estoy ilustrando 01:33:31
para que veáis cómo se haría esto de instalar 01:33:32
un contenedor 01:33:35
De hecho es que no me acuerdo si esto era gmt más 1 01:33:37
lo que había que poner aquí en la zona horaria 01:33:39
Bueno, parece que ha funcionado, ¿vale? 01:33:41
Entonces, yo ahora mismo ya tendría aquí 01:33:43
este node red 01 01:33:45
¿Veis que está arrancando 01:33:47
el contenedor? 01:33:49
está indicando aquí 01:33:51
y lo que ha hecho este contenedor 01:33:52
si os fijáis aquí 01:33:54
es que me está haciendo binding 01:33:55
del puerto externo 1880 01:33:57
al puerto interno 1880 01:34:00
esto no quiere decir 01:34:02
que si yo ahora 01:34:03
accediera a mi dirección IP 01:34:04
indicando como puerto 01:34:07
en 1880 01:34:11
ya tendría 01:34:12
hino de red funcionando 01:34:15
¿veis? 01:34:17
esta es la potencia que tiene precisamente 01:34:20
los contenedores docker 01:34:23
yo ahora mismo he desplegado 01:34:25
un contenedor de docker 01:34:27
pero si por ejemplo tengo 10 alumnos 01:34:29
en clase, les podría levantar 01:34:31
a cada uno de ellos aquí 01:34:33
su propio contenedor, yo me podría 01:34:35
venir ahora a ver los contenedores 01:34:37
veis que ya tengo el de portainer 01:34:38
y el de node-red y podría simplemente 01:34:40
duplicar este contenedor 01:34:43
eso sí, vinculando 01:34:45
en vez del puerto 1880 externo 01:34:47
pues a uno el 1881 01:34:50
el otro en 1882 y así sucesivamente 01:34:52
porque si no se pisarían todos en el mismo puerto 01:34:54
esto es para que veáis 01:34:56
un poco la potencia que tiene esto 01:34:58
de Portainer para instalar 01:35:00
aplicaciones, yo este contenedor como no lo voy 01:35:02
a usar directamente 01:35:04
lo voy a eliminar 01:35:05
y también en un 01:35:09
momento te cargas un contenedor 01:35:11
igual que lo has levantado lo eliminas 01:35:14
es realmente muy 01:35:16
conveniente, muy cómodo 01:35:17
bueno, no sé 01:35:19
como y que tal lo lleváis, me gustaría 01:35:21
No sé si hacer una ronda de minuto y resultado, como dicen en la radio, o lo que vosotros me digáis. 01:35:23
Yo, que soy Germán, que yo por mi parte ya estoy enganchado aquí al container, ya está bien. 01:35:33
Vale, bueno, mirad, algunos comandos básicos, los tenéis ahí en la presentación, no los voy a hacer todos, 01:35:42
pero uno que se usa mucho 01:35:46
es docker ps menos a 01:35:48
eso te va a sacar un listado 01:35:50
de todos los contenedores que tienes en funcionamiento 01:35:52
docker ps menos a 01:35:55
entonces ves que yo tengo ahora mismo 01:35:56
el portainer en funcionamiento desde hace 01:35:58
13 minutos 01:36:00
y aquí te da toda la información 01:36:01
que tiene vinculado el puerto 8000 al 8000 01:36:03
el 9443 al 9443 01:36:06
que es exactamente 01:36:09
la misma información 01:36:10
que estáis viendo de forma visual 01:36:11
en el port liner 01:36:14
entonces es mucho más cómodo 01:36:16
verlo en port liner que verlo aquí 01:36:18
entonces eso ya lo tenemos 01:36:20
ya tenemos el port liner funcionando 01:36:22
ya hemos visto como se pueden instalar 01:36:24
distintas aplicaciones 01:36:26
que podríamos tener varios contenedores 01:36:28
funcionando 01:36:30
y ahora lo que vamos a hacer 01:36:31
es dar un pasito más 01:36:33
en docker 01:36:36
nosotros lo que podemos hacer es instalar 01:36:38
aplicaciones independientes 01:36:40
pero hay veces que me interesa que un conjunto de aplicaciones 01:36:42
funcionen de forma 01:36:45
conjunta, eso es precisamente 01:36:47
lo que queremos hacer con MIM 01:36:49
con Mosquito, InfluxDB, Node.js y Grafana 01:36:50
queremos que se comporten, que se puedan 01:36:53
comunicar entre ellas directamente 01:36:55
para hacer eso, lo que 01:36:57
se usa es un orquestador 01:36:59
de paquetes, vamos a usar un 01:37:01
orquestador muy básico 01:37:03
que se llama Docker Compose 01:37:04
entonces, ese contenedor 01:37:06
ese orquestador, lo que me 01:37:09
Me permite decir, oye, yo quiero crear un entorno independiente para estas cuatro aplicaciones que van a colaborar entre sí. 01:37:11
¿Y esto cómo se hace? 01:37:19
Pues, si nos ha parecido complicado todo esto que hemos hecho en el terminal, 01:37:21
pues resulta que para hacer un Docker Compose, resulta que tenemos que configurarlo todo en un archivo de texto que se llama docker-compose.yml. 01:37:26
¿Qué aspecto tienen esos archivos de texto? 01:37:36
Pues tienen este aspecto que veis aquí, nada amigable. 01:37:38
nada amigable a primera vista 01:37:41
luego cuando te pones a mirarlos 01:37:43
ves que no son tan complicados 01:37:44
por ejemplo, este 01:37:46
¿este quién está diciendo? 01:37:47
pues que este entorno 01:37:49
va a tener un servicio 01:37:52
que se llama Junla 01:37:54
y otro servicio que se llama JunlaDB 01:37:55
que es una base de datos 01:37:58
el servicio Junla va a utilizar la imagen Docker 01:37:59
Junla, y sin embargo 01:38:02
el servicio JunlaDB va a usar la imagen 01:38:03
MySQL, y como veis 01:38:06
es lo mismo que hemos escrito antes a mano 01:38:08
solo que ahora lo tenemos aquí 01:38:10
en un solo archivo de texto 01:38:12
y veis tiene tres servicios en realidad 01:38:13
Joomla, JoomlaDB y phpMyAdmin 01:38:16
como veis aquí, entonces que ocurre 01:38:18
pues claro, si ahora nos ponemos 01:38:20
nosotros a generar un archivo 01:38:22
como este, para mosquito 01:38:24
influxDB, grafana 01:38:25
y no de red, pues es bastante probable 01:38:28
que metamos la pata, entonces 01:38:30
para evitar que podamos meter la pata 01:38:31
resulta que hay una aplicación 01:38:34
que se llama IoT Stack 01:38:36
que nos va a permitir 01:38:37
crear estos archivos de forma automática 01:38:39
entonces, por favor 01:38:42
Modesto y Adrián, esto lo voy a hacer 01:38:44
también solo yo 01:38:46
¿cómo se instala esta aplicación? 01:38:47
pues lo primero que os voy a pedir 01:38:50
es que cambiéis al usuario que habéis creado 01:38:52
antes, el mío se llamaba Juanfe 01:38:54
pues cambio a ese usuario 01:38:56
¿por qué? porque esta es una de esas 01:38:58
aplicaciones que no está permitido 01:39:00
ejecutarla como usuario raíz 01:39:02
como usuario root 01:39:04
entonces tenéis que escribir su espacio 01:39:05
guión, espacio y el nombre 01:39:08
de usuario que vosotros hayáis elegido 01:39:10
una vez que hemos hecho eso 01:39:12
lo único que hay que hacer es ir siguiendo los comandos 01:39:14
que tenemos en la presentación 01:39:16
que es instalar 01:39:18
curr, este en principio no haría 01:39:20
falta porque seguramente esté ya instalado 01:39:22
pero bueno, como lo pone en la documentación 01:39:24
pues lo voy a ejecutar 01:39:26
a mi antes no me ha funcionado 01:39:28
a la hora de copiar y pegar desde la presentación 01:39:31
es un pdf 01:39:33
a mi tampoco 01:39:33
claro, es que igual vosotros al tener el pdf 01:39:35
tenéis problemas, vale, pues voy a 01:39:38
voy a pegar estos cuatro comandos igual 01:39:40
en el aula virtual como he hecho antes con Germán 01:39:42
vale, me parece que no te va a quedar 01:39:44
con remedio, si, porque no funciona 01:39:46
vale, pues lo hago un momento, venga, vamos allá 01:39:47
donde está el aula virtual, aquí 01:39:49
lo edito 01:39:51
recordad que esto no lo podéis hacer como usuario raíz 01:39:55
vale, esto, insisto, tenéis que hacerlo 01:40:00
como el otro usuario 01:40:02
que hemos creado, entonces esto 01:40:04
va a ser instalar 01:40:06
IOT stack 01:40:08
IOT stack 01:40:09
el CUR 01:40:12
lo hemos usado antes, así que 01:40:14
sí, por eso, el CUR sé que no hace 01:40:15
falta porque lo hemos usado, pero bueno 01:40:18
como viene la documentación 01:40:19
lo pego también, que no me cuesta nada 01:40:22
es el CUR 01:40:23
luego con el CUR descargamos 01:40:26
el script de IOT 01:40:28
stack, que es esta 01:40:30
segunda línea 01:40:32
y luego 01:40:32
nada, las instrucciones nada 01:40:38
luego cambiamos a la carpeta IOTStack, que es esta otra, y desde la carpeta IOTStack ejecutamos el menú .sh, creo que era esta, con sudo, pues vale, con sudo, ya está, ahí tenéis, son esos cuatro comandos que he puesto al final, 01:40:42
instalar el CUR, que en teoría no haría falta 01:41:05
después de instalar el CUR 01:41:08
descargarnos 01:41:10
con CUR 01:41:12
el gestor de instalación 01:41:13
que es lo que voy a hacer yo ahora 01:41:16
¿vale? 01:41:18
¿veis? este paso, si intentáis hacerlo 01:41:20
como raíz, os va a dar un error 01:41:22
os va a decir que no se puede hacer como raíz 01:41:23
pues ya está, yo he tenido mucha suerte 01:41:25
y no me da ningún error, y seguro que a vosotros 01:41:46
tampoco os va a dar ningún error, porque tenemos 01:41:48
máquinas idénticas todas, así es que 01:41:50
fenomenal, si ahora hago un 01:41:52
ls, pues veis que me ha creado ahí una carpeta 01:41:54
que se llama iotstack, pues si yo cambio 01:41:56
a esa carpeta 01:41:58
desde esa carpeta 01:41:59
ahora ya puedo ejecutar 01:42:02
el script del menú 01:42:03
antes de hacer esto, antes de ejecutarlo 01:42:10
es muy importante que maximicéis la pantalla 01:42:12
¿vale? que maximicéis el terminal 01:42:14
y aquí tenemos en todo su esplendor 01:42:16
el generador 01:42:29
de docker-compose 01:42:31
de iotstack 01:42:33
entonces 01:42:33
es un menú muy sencillo 01:42:36
en el que tú te desplazas con las teclas del cursor 01:42:39
¿veis? yo estoy pulsando la flecha abajo 01:42:41
y como veis he llegado 01:42:43
a una sección que se llama instalaciones nativas 01:42:45
si quiero ver que opciones 01:42:47
tengo ahí, pues simplemente pulso intro 01:42:49
¿vale? y veis que 01:42:51
una de las opciones que 01:42:53
tiene es instalar Docker y Docker Compose 01:42:55
así es que ¿qué podríamos haber hecho? 01:42:57
hoy en vez de martirizaros 01:42:59
instalando Docker y Docker Compose 01:43:01
podría haber venido directamente 01:43:02
y haber instalado IoT Stack 01:43:05
es decir, estos últimos cuatro pasos 01:43:06
que hemos hecho 01:43:08
y desde aquí haber pulsado 01:43:09
Instal Docker y Docker Compose 01:43:11
y se hubiera instalado automáticamente 01:43:12
¿por qué no lo he hecho? 01:43:13
y he preferido martirizaros 01:43:16
porque así me ha permitido explicaros 01:43:18
cómo funcionan los contenedores 01:43:20
y cómo funciona Portainer 01:43:21
entonces vuelvo atrás 01:43:22
eso es respecto a las instalaciones nativas 01:43:25
pero lo que a nosotros nos interesa hoy 01:43:28
es la primera opción 01:43:30
¿cómo has llegado ahí? 01:43:33
es que yo estoy todavía en el proceso de instalación 01:43:36
o de carga 01:43:39
de lo de antes 01:43:40
eso hay que meter 01:43:41
los últimos cuatro comandos que he puesto yo 01:43:46
ahí en 01:43:48
¿eso ya los has hecho? 01:43:49
no, es que estaba en ello mientras te estaba 01:43:52
escuchando 01:43:54
espero que lo hagáis 01:43:54
prefiero que vayamos a la vez aquí 01:43:56
Juanfe, soy Adrián 01:43:59
yo con mi usuario también tengo que hacerlo 01:44:02
o tengo que esperar a que termines tú 01:44:03
no Adrián, tienes que esperar a que lo haga yo 01:44:05
vale 01:44:08
hay algunos 01:44:08
comandos que no me los coge 01:44:12
me dice 01:44:13
command of phone 01:44:15
¿en cuál estás? 01:44:17
¿cuál es el que te lo deje? 01:44:21
sudo espacio 01:44:22
punto barra menú punto sh 01:44:23
¿qué has hecho del anterior? 01:44:26
cd virgulilla barra iot stack 01:44:30
para que ese comando te funcione 01:44:32
he acabado con install.sh 01:44:38
completed 01:44:41
vale 01:44:42
y a la hora de meter el último comando 01:44:44
no, pero es que no es el último, te falta este 01:44:47
entonces, te falta 01:44:49
¿cuál? 01:44:50
este que estoy marcando ahora en la pantalla, el de cd 01:44:55
espacio virgulilla 01:44:57
si, ah 01:44:59
a ver, este creo que ya lo he hecho 01:45:00
espérate, un momento 01:45:04
si lo has hecho, deberías estar viendo 01:45:05
aquí en el PROM y OTSTACK 01:45:08
Sí, ahora sí, efectivamente 01:45:09
tiene razón, no lo había, me he saltado uno 01:45:11
Perfecto 01:45:13
Está creando 01:45:18
Python virtual 01:45:20
La primera vez tardó un pelín 01:45:22
en arrancar, pero luego ya que arrancaba 01:45:25
rápido. Ya, ya lo tengo 01:45:27
Vale, y ahora os podéis estar 01:45:28
preguntando, ¿para qué tanto sufrimiento? 01:45:31
Bueno, pues el sufrimiento es por esto, fijaos 01:45:33
si yo voy ahí a la primera opción, VULSTACK 01:45:35
¿Veis todo esto que tenemos 01:45:37
aquí son aplicaciones, ¿vale? 01:45:40
Todas relacionadas con IoT. 01:45:42
Blink, Cronograph, Decon, 01:45:45
DomoticZ para 01:45:47
Domotica, Spruino, 01:45:48
Grafana, Home Assistant, 01:45:51
InfluzeDB, Mosquito, 01:45:53
N8n, Node.Rez, OpenHab, 01:45:54
Pijol, Portainer, 01:45:57
Postgre, Base de Datos, Prometheus, 01:45:59
Python, ¿vale? 01:46:01
Todo esto son 01:46:03
aplicaciones que alguien ya se ha comido 01:46:04
la cabeza para que 01:46:07
nosotros ahora podamos crear un Docker 01:46:08
Compose con la combinación de estas 01:46:10
aplicaciones que nosotros queramos 01:46:12
¿vale? yo tengo un proyecto que necesito 01:46:14
Python, Node.js y 01:46:16
Mosquito, pues elijo aquí Python, Node.js 01:46:18
y Mosquito y esto me va a generar 01:46:20
ese archivo YML que os he 01:46:22
comentado que no son súper complejos 01:46:24
pero que es fácil meter la pata 01:46:26
entonces, como esta herramienta 01:46:28
es solamente para generar ese archivo 01:46:30
y lo que vamos a hacer es empezar desde arriba 01:46:32
y vamos a ir marcando las aplicaciones 01:46:34
que a nosotros nos interesan 01:46:36
¿vale? que son las que os decía 01:46:37
de min, entonces 01:46:40
perdona que me he pasado 01:46:41
vamos despacio, están por orden 01:46:43
alfabético, cuando lleguéis a la A 01:46:46
pues empezamos, no sé si habrá alguna por la A 01:46:48
pero vamos a la primera 01:46:50
es importante que tengáis la ventana 01:46:51
maximizada porque si no vais a empezar a ver 01:46:54
este menú bastante raro 01:46:56
bueno 01:46:57
estoy como tú, eso nos ha pasado 01:46:59
por impacientes 01:47:09
vale, pues ya 01:47:11
estamos, entonces estoy aquí 01:47:15
y claro, cuando ves esto, pues te hace una ilusión 01:47:17
impresionante, porque de pronto dices 01:47:19
pues es que puedo instalar lo que quiera 01:47:21
entonces, nosotros vamos a ir pasito 01:47:22
a pasito, y vamos a instalar 01:47:25
grafana, veis 01:47:27
estoy en la posición de grafana 01:47:29
¿cómo la selecciono? con la barra espaciadora 01:47:31
y vais a ver que en los paréntesis que hay a la izquierda 01:47:33
aparece una X 01:47:35
para indicarme que ya tengo seleccionado grafana 01:47:36
para instalarlo, vale 01:47:39
pues ahora que ya tengo grafana, sigo bajando 01:47:41
y yo quiero instalar 01:47:43
también influxdb, como veis 01:47:45
hay dos versiones de InfluxDB, la 1 01:47:47
y la 2, yo de momento 01:47:49
sigo usando la 1, vale 01:47:51
y os recomiendo que hoy uséis la 1 porque los ejercicios 01:47:52
que vamos a hacer están basados en la 1 01:47:55
pero bueno, la verdad es que ya sería 01:47:57
momento de ir pasando a la versión 2 01:47:59
InfluxDB 01:48:00
luego sigo bajando 01:48:03
y aquí 01:48:05
viene ya 01:48:06
la opción de elegir 01:48:08
Node.Ref, a ver me he salto a Mosquito 01:48:10
perdona, me he salto a Mosquito, vale 01:48:13
Mosquito 01:48:14
y por último no de red 01:48:15
y no de red ojito 01:48:19
¿vale? veis en no de red cuando lo he seleccionado 01:48:21
me aparece ahí a la derecha 01:48:23
en amarillo y unas exclamaciones 01:48:25
eso quiere decir que 01:48:27
no de red requiere una 01:48:29
configuración adicional 01:48:31
para entrar en esa configuración adicional 01:48:32
tengo que pulsar la tecla flecha derecha 01:48:35
esto está ahí puesto ¿vale? está ahí escrito 01:48:37
donde pone abajo control 01:48:39
ahí lo explica, pulso la tecla flecha derecha 01:48:40
y entonces me aparece 01:48:43
otro menú 01:48:45
en el que aparece seleccionada la primera opción 01:48:45
select and build add-on list 01:48:49
hago pulso intro 01:48:50
y veis me aparece un listado 01:48:52
de extensiones 01:48:55
que se pueden instalar junto a 01:48:57
Node-RED, Node-RED es un lenguaje de 01:48:59
programación visual al que se le pueden 01:49:01
añadir por así decirle 01:49:03
add-ons o en realidad se llaman 01:49:04
módulos, entonces veis que por defecto 01:49:07
ya me trae varios seleccionados 01:49:09
uno que se llama ping, otro para 01:49:11
influxdb, otro 01:49:13
para generar dashboard, que está muy bien 01:49:15
el que no vamos a necesitar hoy 01:49:17
es este, por ejemplo, el que pone ahí 01:49:19
NodePy GPIOD 01:49:20
eso no tiene sentido, si tú tienes 01:49:22
NodeRed, en una Raspberry Pi 01:49:25
es decir, si esto lo hacéis en una Raspberry Pi 01:49:26
estupendo, dejad ese 01:49:29
módulo disponible, pero 01:49:30
como no es el caso, pues 01:49:33
no lo necesitamos, entonces lo he 01:49:34
lo he deshabilitado pulsando 01:49:37
la tecla barra espaciadora 01:49:38
como veis hay muchos más 01:49:40
y no os agobiéis, si tú se te 01:49:42
olvide instalar un módulo aquí, lo vas a poder instalar 01:49:44
posteriormente, así que tampoco hay que vivir 01:49:46
agobiado, simplemente que sepáis 01:49:48
que te está diciendo el menú, oye si quieres 01:49:50
te ayudo, y ya de paso te instalo 01:49:52
los módulos que probablemente vas a necesitar 01:49:55
porque claro, si me has pedido instalar InfluxDB 01:49:57
probablemente vas a necesitar 01:49:59
el módulo de InfluxDB, bueno 01:50:00
yo aquí he quitado el de Raspberry Pi 01:50:02
simplemente pulso intro 01:50:05
para volver al menú anterior 01:50:06
ahora con las flechas abajo 01:50:08
le digo go back, para volver 01:50:10
al menú anterior 01:50:13
vale 01:50:15
y aquí para iniciar 01:50:16
la creación del docker compose 01:50:19
pulso intro 01:50:21
y ya está 01:50:22
entonces si ha ido todo bien te dirá 01:50:24
construcción completa docker compose 01:50:26
yml 01:50:29
y esto que es lo que ha hecho 01:50:30
lo que ha hecho es crear un archivo docker compose 01:50:33
con todo lo necesario 01:50:35
para que yo ahora baje aquí una opción 01:50:36
vaya a docker commands 01:50:39
pulso intro 01:50:40
y le diga 01:50:42
restar stack 01:50:43
reiniciarle la pila 01:50:45
y lo que está ocurriendo ahora mismo 01:50:47
es que se están descargando las imágenes de grafana 01:50:49
mosquitono, de red 01:50:51
se están creando contenedores de todos ellos 01:50:53
y en unos instantes tendré 01:50:55
todo esto montado en mi servidor 01:50:58
para poder utilizarlo 01:50:59
yo me he quedado en build 01:51:07
complete, ¿quiere quedar después? 01:51:10
01:51:13
ahora no te lo puedo enseñar pero 01:51:13
en docker commands 01:51:15
el primero es boolean stack 01:51:18
el segundo creo que es docker commands 01:51:20
pues entras ahí y hay uno 01:51:22
que es restart stack 01:51:24
me parece que se llama 01:51:26
vale 01:51:27
entonces si tenéis la misma suerte que he tenido yo 01:51:29
que deberíais, pues veis que aquí va a acabar 01:51:36
diciéndote ya tenemos construido 01:51:38
mosquitos, no de red, la red de los 01:51:40
contenedores grafana, mosquitos, está todo perfecto 01:51:42
vale 01:51:44
entonces ya directamente pulso intro 01:51:45
y ya lo que puedo hacer es salir 01:51:47
de esta aplicación 01:51:50
para salir de esta aplicación 01:51:51
le digo volver atrás 01:51:53
y salir 01:51:55
¿vale? 01:51:56
y ya están todos los contenedores funcionando 01:51:59
¿cómo lo sé? porque por ejemplo si hago un docker 01:52:01
ps-a 01:52:03
veis que me está diciendo aquí que ya tengo node-red 01:52:04
grafana, mosquito, influxdb funcionando 01:52:07
si no quiero verlo aquí 01:52:09
y me gusta más verlo en portainer 01:52:11
pues si me voy a portainer y le digo 01:52:13
que quiero ver los contenedores, veis que ya tengo 01:52:15
todos los contenedores funcionando 01:52:17
grafana, influxdb, mosquito y node-red 01:52:19
¿vale? además aquí en Grafana 01:52:21
está muy bien porque te está indicando 01:52:23
precisamente que puertos utilizan 01:52:25
perdón, en Portainer está muy bien porque te indica 01:52:27
los puertos 01:52:29
perdona, cuando termina 01:52:29
que vuelves otra vez al menú 01:52:32
simplemente salir o hay que darle restar 01:52:34
stack para que vuelva, para que arranque 01:52:37
todo, que has dicho 01:52:39
restar stack hay que dárselo solo una vez 01:52:40
si ya se lo has dado no hace falta que se lo des 01:52:42
otra vez, y ya que has reiniciado 01:52:44
la pila, ya directamente le das salir 01:52:47
la opción salir del menú 01:52:48
Sí, sí, no, pero RestartStack se le da después de que ha empezado a bajarse todo y demás y tal. 01:52:50
Sí, sí, sí, sí. 01:52:55
Y te dice, intro tal para volver al menú. 01:52:57
Sí, ya no tienes que volver a hacerlo. O sea, eso es porque ya se ha hecho un RestartStack, entiendo yo, ¿no? 01:53:02
Vale, vale. 01:53:08
No lo habías hecho. 01:53:08
Vale, entonces va aquí ya está, ¿no? 01:53:10
entonces, lo que os decía 01:53:11
ya podéis ver vuestros contenedores aquí, todos saludables 01:53:20
todos funcionando, vale 01:53:23
como veis, tenemos ahora dos stacks 01:53:24
uno que era el que había creado yo antes para 01:53:29
no de red y otro que se ha creado 01:53:31
específico para estos últimos cuatro contenedores 01:53:34
bien, y ahora ya 01:53:37
todos, vale, Adrián, Modesto 01:53:41
también podéis hacer lo que voy a hacer ahora yo 01:53:43
ya podéis ir con vuestros navegadores web 01:53:45
a visitar vuestros nodes de red 01:53:48
simplemente tenéis que 01:53:50
escribir la dirección IP 01:53:51
2.1880 01:53:53
y os van a aparecer 01:53:56
ahí vuestros nodes de red 01:53:58
¿vale? 01:53:59
es esto que estoy mostrando yo ahora en pantalla 01:54:03
para los que no lo hayáis visto antes 01:54:05
es un lenguaje de programación que crearon 01:54:07
ingenieros de IBM 01:54:10
específico para Internet de las Cosas 01:54:11
ellos se dieron cuenta de que 01:54:14
internet de las cosas era muy complejo 01:54:15
porque realmente entran en juego 01:54:17
muchas tecnologías distintas 01:54:19
y entonces lo que hicieron fue 01:54:21
crear este lenguaje de programación 01:54:23
que estaba basado en Javascript 01:54:25
concretamente en Node.js 01:54:27
de tal forma que aquí por ejemplo 01:54:29
para que os hagáis una idea 01:54:31
pues crear un servidor web 01:54:32
es tan sencillo como hacer lo que yo acabo de hacer 01:54:35
con hacer esto acabo de crearme 01:54:37
un servidor web 01:54:39
¿vale? 01:54:40
si quiero crearme un servidor TCP 01:54:42
igual de sencillo 01:54:45
que quiero publicar 01:54:47
un broker MQTT 01:54:49
igual de sencillo 01:54:50
aquí la ventaja que tenemos 01:54:52
es que simplemente arrastrando un módulo 01:54:54
de estos 01:54:56
directamente nos evitamos 01:54:57
crear un montón de 01:55:00
código, entonces como veis 01:55:02
están aquí organizados 01:55:04
los nodos 01:55:06
en distintas categorías 01:55:09
categoría de red, categoría de secuencia 01:55:10
de analizador, de almacenamiento 01:55:13
fijaos que curioso, veis, ahí aparecen ya 01:55:14
nodos para InfluxDB 01:55:17
esto es precisamente porque en el 01:55:19
menú anterior 01:55:21
en Node.RED, cuando aparecía lo de issue 01:55:22
yo he visto que allá 01:55:25
me estaba diciendo Node.RED, oye, ¿quieres que te instale 01:55:27
los nodos de InfluxDB? 01:55:29
y como estaba marcado, veis, ya los tengo aquí 01:55:30
instalados, los del dashboard 01:55:33
que también venían allí 01:55:35
entonces veis que tenemos un montón de nodos 01:55:36
lo que os decía 01:55:39
no hay que asustarse, si se te ha olvidado 01:55:41
algo, lo puedes añadir en cualquier momento 01:55:43
fijaos, me vengo aquí a la derecha, no hace falta 01:55:45
que lo hagáis, porque voy a instalar uno al azar 01:55:47
para que veáis como se hace 01:55:49
y aquí, en administrar 01:55:50
paleta, esto es la paleta donde 01:55:53
están los nodos, ves que aparecen los nodos 01:55:55
que yo tengo instalado, pero también tengo 01:55:57
la opción de instalar nuevos nodos 01:55:59
¿nodos cuántos? o sea, ¿módulos 01:56:00
cuántos hay? muchísimos 01:56:03
porque como Node.js es código abierto 01:56:05
pues hay muchísima gente 01:56:07
contribuyendo, entonces, por ejemplo 01:56:09
Hay uno que se llama World Map, que es para mostrar información sobre un mapa, pues sería este, que además se ha actualizado hace dos días, pues yo le doy a instalar, le digo a instalar, y vais a ver que en un instante ese módulo está ya instalado, y lo que vamos a ver es que aquí a la izquierda, pues veis que nos aparecen nuevos nodos relacionados con ese módulo. 01:56:11
pues igual que he hecho esto 01:56:36
ya podéis estar imaginando 01:56:38
que existen módulos prácticamente para cualquier 01:56:40
cosa que se os pase por la cabeza 01:56:42
imaginaos que yo quiero hacer una integración 01:56:43
con telegram 01:56:46
pues me vengo aquí a administrar paletas 01:56:47
voy a instalar, busco telegram 01:56:49
y veis que tengo varios 01:56:52
incluso, ahora ya me tocaría un poco 01:56:55
más investigar cual de estos es más fiable 01:56:57
pues hombre, a lo mejor uno que tiene 01:56:59
tres años, pues es menos fiable 01:57:01
que uno que hace un mes que se 01:57:03
editó, pero como veis 01:57:04
tenéis aquí la opción de hacer prácticamente 01:57:07
lo que se os pase por la cabeza. 01:57:08
Bien, vamos a empezar con una introducción muy básica 01:57:10
a Node-RED, ¿vale? 01:57:12
Simplemente para que entendáis cómo funciona esto. 01:57:14
Perdona un momento, no me entra en Node-RED. 01:57:16
¿Qué dirección hay que dar para que entre en Node-RED? 01:57:18
La dirección IP que te haya correspondido a ti, 01:57:20
dos puntos, 1880. 01:57:23
¿Con el HTTPS? 01:57:25
No, sin la S, en este caso. 01:57:26
Vale, yo creo que será el fallo. 01:57:30
Sin la S. 01:57:34
La dirección. 01:57:44
Vale, sí, sí que entra. 01:57:44
Era la S la que me fallaba. 01:57:46
Un momento, Juanfe, que voy a intentarlo yo. 01:57:47
Vale, sí, sí, sin problema. 01:57:49
Vale, pues ya estamos aquí. 01:57:57
Juanfe, una cosa, ahí en el... 01:58:01
aquí en el 01:58:03
Portainer, yo me veo 01:58:05
aquí el Portainer corriendo, pero el 01:58:07
resto de nodos no lo veo. ¿Dónde hay 01:58:09
que acceder ahí para ver todo 01:58:11
lo que está corriendo ahí de Docker? 01:58:12
Eso lo puedes ver en el Portainer, 01:58:17
que lo ves aquí en Contenedores. 01:58:19
A ver, pero ese... 01:58:21
A ver, yo tengo Home y debajo parece que tengo otra cosa diferente a lo tuyo, ¿no? 01:58:23
¿Tú no tienes el entorno local ahí abajo, debajo de Home? 01:58:29
Debajo de Home tengo una cosa que pone Environment y ya está, y no pone nada más. 01:58:33
Vale, pues dale ahí a Environment, Germán. 01:58:38
Pero aquí en Environment esto parece que no tiene nada. 01:58:41
¿Tú cuando entras, cuando le das a Home no te aparece esto que estoy viendo yo ahora? 01:58:47
cuando le doy a home 01:58:50
me aparece, sí, el 01:58:53
el portainer, ya está 01:58:55
y ahí el local 01:58:57
¿aparece local? 01:58:58
ah, sí, aparece aquí local 01:59:01
pues le das a local, ¿vale? 01:59:02
y en local veis que ya te aparecen ahí 01:59:05
por ejemplo, dos stats, seis imágenes 01:59:07
cinco contenedores 01:59:09
sí, me aparece cinco containers, sí, ahora sí me aparece 01:59:10
y luego aquí a 01:59:13
containers, vale, ahora sí 01:59:15
vale, correcto, venga, gracias 01:59:17
Muy bien. Vale, vamos a empezar con algo sencillito, ¿vale? 01:59:19
En Node-RED. Perdona, ¿otro compañero me había dicho que iba a probar él con Node-RED? ¿Lo ha conseguido? 01:59:24
Sí. 01:59:29
Perfecto. Venga, pues vamos a hacerlo más sencillo. 01:59:30
Lo más sencillo es usar un nodo de inyección, que es esto, y engancharlo a un nodo de depuración. 01:59:33
¿Y cómo se engancha? Pues fijaros, todos los nodos tienen un puerto de salida y algunos tienen un puerto de entrada. 01:59:39
lo único que hay que hacer es hacer clic en el puerto de salida 01:59:47
y arrastrar el ratón para unirlo al puerto de entrada del siguiente 01:59:50
entonces veis que así lo que he creado 01:59:53
es un flujo, que lo puedes mover 01:59:56
lo que estoy haciendo es programar, no lo perdáis de vista 01:59:58
lo que estoy haciendo es crear un programa 02:00:01
y este programa que hace, pues un nodo inyector 02:00:03
lo que hace es que va a inyectar una marca de tiempo 02:00:06
un time stand, es decir, la fecha y la hora 02:00:10
entonces cuando nosotros hagamos clic en esta lengüetita que está aquí 02:00:12
a la izquierda 02:00:16
este nodo va a inyectar la fecha y hora 02:00:17
que va a salir por este cable 02:00:20
y va a llegar a este otro nodo 02:00:22
que es un nodo de depuración 02:00:24
y la misión de este segundo nodo de depuración 02:00:25
es mostrarme todo lo que le llegue 02:00:28
aquí, en la paleta de depuración 02:00:30
¿vale? tenéis que hacer clic 02:00:32
en la mariquita esta que hay ahí 02:00:34
y os debería mostrar 02:00:36
una paleta vacía 02:00:38
bien, pues yo ya tengo mi programa creado 02:00:39
si os fijáis, junto a los nodos 02:00:42
aparece un puntito de color azul 02:00:44
y en el propio flujo 02:00:46
aparece un punto de color azul 02:00:48
eso quiere decir que a ese flujo 02:00:50
se le han hecho cambios 02:00:53
que aún no están en ejecución 02:00:54
hemos hecho cambios 02:00:56
y esos cambios no se están ejecutando aún 02:00:58
para ejecutarlos hay que pulsar en 02:01:01
instanciar 02:01:02
entonces, ¿qué es lo que me pasa a mí? 02:01:04
que como Modesto y o Adrián 02:01:09
están también trabajando por ahí 02:01:11
¿veis? a mí me dice que puede haber 02:01:13
un problema, bueno, yo le digo, no pasa nada 02:01:15
vamos a fusionar lo de todos y ya está 02:01:17
¿vale? entonces le doy a 02:01:19
distanciar y ya está funcionando 02:01:21
¿veis? yo tengo aquí un flujo 1 02:01:23
imagino que por aquí ha estado también trabajando 02:01:25
alguno de los compañeros y tiene su propio flujo 02:01:27
¿vale? ¿la marca de tiempo 02:01:30
la editas? ¿qué has dicho? 02:01:31
no, no, no la he tocado, le he dejado, o sea, solo han puesto 02:01:33
los dos nodos y los he unido con un cable 02:01:35
porque quiero enseñaros cómo funciona y ya está 02:01:37
y ahora fijaos 02:01:39
activo el panel de la mariquita 02:01:44
aquí a la derecha, ¿vale? del debug, del insecto 02:01:46
y aquí, en la marca 02:01:49
de tiempo, hago clic en la lengüecita 02:01:51
que tiene a la izquierda 02:01:52
al hacer clic ahí, se inyecta 02:01:54
la fecha y la hora a través del 02:01:57
cable, llega al panel de depuración 02:01:58
y el panel de depuración 02:02:01
me lo está mostrando aquí, me está diciendo 02:02:03
oye, he recibido 02:02:04
un objeto con la propiedad payload 02:02:06
que es un número, ¿vale? 02:02:08
y ahí tenemos la hora y fecha actual 02:02:11
en formato timestamp 02:02:13
el compañero veis que están haciendo clic 02:02:14
y van apareciendo debajo 02:02:16
cada vez que ellos hacen clic, pues va apareciendo 02:02:18
aquí debajo también, ¿todo bien? 02:02:20
02:02:37
vale, esto es 02:02:37
muy sencillo, ¿vale? ¿qué vamos a hacer a continuación? 02:02:39
el otro día en clase, lo que estuvimos 02:02:42
haciendo fue integrar 02:02:44
con Zing Speed, y para integrar 02:02:46
os tuve que contar HTTP 02:02:48
y os dije, hombre, no es 02:02:49
muy habitual usar en Internet de las cosas 02:02:52
HTTP, se usa por conveniencia 02:02:53
porque estamos muy acostumbrados 02:02:56
todos conocéis ese protocolo y nos resulta familiar 02:02:57
pero en Internet de las Cosas es más habitual 02:03:00
utilizar un protocolo que se llama MQTT 02:03:03
voy a dar unas nociones sobre MQTT 02:03:05
e inmediatamente vamos a pasar a utilizarlo 02:03:09
MQTT es simplemente un protocolo de aplicación más 02:03:11
igual que tenemos HTTP, FTP u otros 02:03:14
pues hay uno que se llama MQTT 02:03:17
es un protocolo bastante antiguo que ya se diseñó en su momento 02:03:19
para transmitir 02:03:24
información entre máquinas 02:03:26
o sea, información que en principio 02:03:27
no estaba destinada a personas 02:03:29
entonces es un protocolo mucho menos 02:03:31
verboso que HTTP 02:03:33
¿y cómo funciona? pues funciona 02:03:34
fijaos en el gráfico de la derecha 02:03:37
lo que tenemos es un elemento 02:03:38
central, que es el broker 02:03:41
MQTT, ¿vale? el broker es simplemente 02:03:43
un despachador, es como una oficina 02:03:45
de correos, a esa oficina 02:03:47
de correos le llegan 02:03:49
mensajes 02:03:51
y esta oficina de correo despacha 02:03:51
esos mensajes. Entonces, ¿cómo le llegan 02:03:55
los mensajes? Pues le llegan porque otros dispositivos 02:03:58
o otros ordenadores o otras motas 02:04:01
publican en ese broker. ¿Veis? Yo aquí, por ejemplo, 02:04:03
tengo un automóvil que está publicando 02:04:07
su velocidad en el broker y a su vez 02:04:10
tengo un teléfono móvil, ¿vale? 02:04:13
Y un servidor que están suscritos 02:04:15
a esa información 02:04:18
con lo cual el automóvil 02:04:21
publica en el broker 02:04:22
y el móvil y el servidor 02:04:24
como están suscritos reciben 02:04:26
automáticamente la velocidad 02:04:28
de ese automóvil 02:04:31
por eso esto se llama un protocolo de publicación 02:04:32
suscripción 02:04:35
ventajas 02:04:36
es súper ligero 02:04:38
MQTT a diferencia del HTTP 02:04:39
es mucho más ligero 02:04:42
y apenas consume ancho de banda 02:04:44
por lo que os decía, porque es muy poco verboso 02:04:46
entonces se suele decir que MQTT produce un desacoplamiento 02:04:49
a tres niveles, el primero es un desacoplamiento 02:04:52
en el espacio, ¿por qué? porque 02:04:56
el móvil no necesita saber la dirección IP 02:04:58
del automóvil para acceder a la información del automóvil 02:05:02
solamente necesitan, todos los elementos 02:05:04
que intervienen, solo necesitan conocer la dirección IP 02:05:08
del broker, entonces esto es un 02:05:11
desacoplamiento en el espacio, porque veis 02:05:14
aquí podría aparecer otro suscriptor 02:05:15
suscribirse a esa información 02:05:17
sin tener que conocer nada del 02:05:19
automóvil, ¿vale? ese es el primer 02:05:21
desacoplamiento en el espacio 02:05:23
luego es en el tiempo, ¿por qué? 02:05:25
porque por ejemplo el móvil 02:05:29
podría estar apagado 02:05:30
el automóvil estar publicando 02:05:31
sus velocidades y cuando el teléfono 02:05:33
móvil se active 02:05:36
podría descargar todas esas velocidades 02:05:37
del broker, ¿vale? pues entonces 02:05:40
tenemos un desacoplamiento 02:05:41
en el espacio, en el tiempo 02:05:43
y por último tenemos un desacoplamiento 02:05:45
más difícil de entender que es el desacoplamiento 02:05:47
asíncrono, os decía antes 02:05:50
MQTT es tan ligero 02:05:52
que yo lo puedo 02:05:53
incluir por ejemplo en un SP32 02:05:54
como el que usamos el otro día 02:05:57
sin que suponga para ese SP32 02:05:58
una carga grande, es decir, el SP32 02:06:02
va a poder tener toda su 02:06:04
funcionalidad, la que sea leer sensores, actuadores 02:06:05
o lo que sea, y la carga 02:06:08
que le supone publicar o suscribirse 02:06:09
un bróker MQTT es mínima, es decir, apenas vamos a encontrar pausas en el funcionamiento 02:06:12
normal del microcontrolador para atender el bróker MQTT. Por eso se dice también que 02:06:17
produce un desacoplamiento de sincronía. Entonces, ¿cómo se publica y se suscribe 02:06:22
a la información un bróker MQTT? Mediante buzones. Este automóvil publica un buzón 02:06:30
y estos dispositivos se suscriben a ese buzón, con lo cual toda la información que entre 02:06:36
en ese buzón va a ser 02:06:41
recibida por todos los suscriptores de ese buzón 02:06:43
en la terminología MQTT 02:06:45
no se llaman buzones, se llaman 02:06:47
topics 02:06:49
y los topics tienen este aspecto 02:06:50
que estáis viendo aquí abajo 02:06:53
simplemente son como rutas de archivos, por así decirlo 02:06:54
veis que aquí tengo un topic 02:06:57
de primer nivel, que sería mi casa 02:06:58
que tiene a su vez un subtopic 02:07:01
que se llama planta baja 02:07:03
que tiene otro subtopic que se llama 02:07:05
salón, que tiene otro subtopic 02:07:07
que se llama temperatura, esto que sería 02:07:09
el sensor de temperatura del salón 02:07:11
de la planta baja de mi casa 02:07:13
y veis que el separador que se utiliza 02:07:14
es la barra 02:07:17
¿vale? pues además de utilizar 02:07:18
estos topics 02:07:21
podemos utilizar también metacaracteres 02:07:23
por ejemplo 02:07:25
en un topic MQTT si ponemos 02:07:26
el signo más, quiere decir 02:07:29
cualquier valor, es decir 02:07:31
que aquí estoy viendo los sensores 02:07:33
de temperatura de cualquier 02:07:35
habitación de la planta baja 02:07:37
de mi casa 02:07:40
¿veis? eso es lo que significa el signo más 02:07:40
los sensores 02:07:43
de temperatura de cualquier estancia 02:07:46
de la planta baja de mi casa 02:07:48
y el otro metacarácter 02:07:50
que podemos utilizar es la almohadilla 02:07:52
que quiere decir todos los 02:07:53
subniveles a partir de aquí ¿vale? la almohadilla 02:07:56
siempre tiene que ser el último, no puede 02:07:58
haber nada detrás de la almohadilla 02:07:59
esto querría decir 02:08:01
todos los sensores, sean de temperatura 02:08:03
o de cualquier otra cosa 02:08:06
de todas las estancias 02:08:07
sea el living room o cualquier otro 02:08:09
de la planta baja de mi casa 02:08:11
¿se entiende? 02:08:13
los 02:08:16
topics se separan con barras 02:08:17
el signo más indica 02:08:19
cualquiera 02:08:21
y el signo amarillo significa 02:08:22
cualquier subnivel 02:08:25
todos los subniveles a partir de aquí 02:08:27
bueno, pues esto es lo básico 02:08:29
de MQTT, luego tiene otros detalles que son 02:08:31
muy interesantes como la garantía de servicio 02:08:33
no voy a entrar en esto 02:08:35
básicamente es que hay garantía de servicio 0, 1 o 2 02:08:36
esto que quiere decir 02:08:39
que tú puedes utilizar MQTT 02:08:41
con QoS Quality of Service 02:08:43
0, 1 o 2 02:08:45
Quality of Service 0 es disparar y olvidar 02:08:46
es decir, el cliente 02:08:49
envía la información 02:08:51
publica en el broker 02:08:53
¿vale? 02:08:54
y se olvida 02:08:57
el destinatario 02:08:58
no hace ACK 02:09:01
entonces lo que sabemos con esto 02:09:02
es que el paquete se va a publicar 02:09:05
pero puede ocurrir que se publique varias veces 02:09:08
entonces para evitar eso 02:09:10
o que no se publique ninguna, esto podría 02:09:11
estar caído y perderse 02:09:14
alguna de estas comunicaciones, entonces esta calidad 02:09:16
de servicio ¿para qué se usa? 02:09:18
por ejemplo, tú tienes un sensor de temperatura que está 02:09:19
enviando cada 5 minutos 02:09:22
pues oye, porque se pierda 02:09:24
alguna medición, no pasa nada 02:09:26
si es una vivienda, claro, si es un dispositivo 02:09:27
crítico, no, entonces usa 02:09:29
calidad de servicio cero, ¿por qué? porque es la 02:09:31
más rápida la que menos recursos consume pero si tú tienes que tener la certeza de que no se pierde 02:09:33
ninguna medida entonces puedes utilizar calidad de servicio 1 eso es lo que se llama al menos una vez 02:09:39
es decir tienes la certeza de que todo lo que publiques se va a recibir en el broker pero 02:09:46
tienes el inconveniente de que se puede recibir duplicado si por el motivo que fuera no quieres 02:09:51
que se reciban mensajes duplicados ya tienes que ir a calidad de servicio 2 que es la de exactamente 02:09:56
una vez, el problema que tiene esto 02:10:01
es que ya se vuelve bastante más pesado el protocolo 02:10:03
entonces lo habitual 02:10:05
es utilizar una garantía de servicio 0 02:10:06
o 1, en la mayoría de los casos 02:10:09
¿vale? entonces 02:10:10
lo que vamos a hacer ahora 02:10:12
es ver cómo podemos enviar paquetes 02:10:14
a un broker MQTT, cómo podemos 02:10:17
mandar la información, y para eso 02:10:19
tenemos que entender lo que hemos hecho 02:10:21
con el stack IoT 02:10:23
nosotros lo que hemos hecho en un stack es instalar 02:10:24
varios contenedores, influx de red 02:10:27
no de red, grafana, ¿vale? 02:10:29
Y todos esos contenedores, por estar dentro de un stack, comparten una red propia. Y esa red cuenta con un servidor DNS de nombres de dominio. Entonces, unos pueden referirse a otros desde no de red. Yo, por ejemplo, puedo hacer alusión a Mosquito simplemente escribiendo el nombre de Mosquito. 02:10:31
o sea, no tengo que saber en qué dirección IP está Mosquito 02:10:53
ni nada por el estilo, simplemente escribo Mosquito 02:10:56
y ya tengo acceso al broker de Mosquito 02:10:59
entonces vamos a hacer este ejercicio que os muestro en pantalla 02:11:02
y ahora lo voy a hacer paso a paso 02:11:05
yo aquí lo que hago es con un inyector 02:11:07
en vez de inyectar la fecha y la hora, voy a inyectar cualquier información 02:11:10
por ejemplo, voy a inyectar una temperatura 02:11:14
la inyecto, sale por el cable 02:11:16
y esto es un nodo de publicación MQTT 02:11:19
que lo que va a hacer es publicar esa información 02:11:22
que le llega en el topic televisión 02:11:24
del salón de la casa 02:11:26
en mosquito 02:11:28
¿vale? veis que aparece aquí esto verde 02:11:29
eso quiere decir que ya tenemos nodo de red conectado 02:11:31
con mosquito 02:11:34
y a la vez voy a tener aquí otro nodo 02:11:34
de mosquito que va a estar suscrito 02:11:38
a cualquier cosa que entra a mi casa 02:11:40
sea el salón, sea la televisión 02:11:42
o sea cualquier otra cosa 02:11:44
y me lo va a mostrar en el panel de depuración 02:11:45
¿vale? 02:11:48
entonces 02:11:48
voy a montar esto en Node.js 02:11:50
para que veáis como se hace 02:11:53
me vengo a Node.js 02:11:54
yo a mi flujo le voy a cambiar 02:11:56
el nombre 02:11:59
para no confundirlo con el de los compañeros 02:12:00
que están compartiendo 02:12:03
estamos compartiendo 02:12:04
la misma instancia ¿vale? 02:12:07
entonces hago 02:12:10
un inyector 02:12:11
y este inyector que antes no lo he configurado 02:12:13
si lo quisiera configurar tengo que hacer 02:12:16
doble clic sobre él 02:12:18
¿vale? y veis que por defecto 02:12:19
está inyectando 02:12:21
los milisegundos que han transcurrido 02:12:23
desde la época 02:12:26
yunis 02:12:26
pues en lugar de eso, yo podría mandarle 02:12:29
por ejemplo un objeto json, un booleano 02:12:31
o lo que yo quisiera, vamos a suponer que le quiero mandar 02:12:33
un json, que va a ser por ejemplo 02:12:35
temperatura 02:12:38
2.25 02:12:40
¿vale? 02:12:44
lo podéis hacer así 02:12:46
o veis que tiene un editor incluso más bonito 02:12:47
o incluso un editor visual, lo que tú prefieras. 02:12:49
¿Qué no os queréis complicar? 02:12:52
Pues no os compliquéis, si le mandáis simplemente un texto, 02:12:54
me llamo fulanito o lo que tú quieras. 02:12:56
Os llamo la atención ahora aquí sobre una cosa. 02:12:59
Yo os he dicho que cuando pulsemos el iconito del inyector 02:13:02
va a salir información por el cable 02:13:05
y esa información se inyecta en varios objetos. 02:13:08
Tenemos un objeto principal que es el objeto missave, 02:13:11
el objeto mensaje, que tiene propiedades 02:13:14
una carga de pago y un topic 02:13:17
hoy solo vamos a usar la carga 02:13:18
de pago, pero habrá algún módulo que nos obliga 02:13:21
a usar el topic, de momento usamos la carga de pago 02:13:23
pulso hecho 02:13:25
yo habiendo hecho esto, ¿qué ocurre? 02:13:26
pues fijaos, si lo engancho aquí al debug 02:13:29
y instancio 02:13:30
si pulso aquí, ¿veis que aparece? 02:13:32
temperatura 25, bueno 02:13:35
pues ya está, ahora ¿qué voy a hacer? 02:13:37
publicarlo en el broker MQTT 02:13:39
¿lo vamos haciendo esto, Juan Félix? 02:13:40
¿cómo? 02:13:42
¿vamos haciendo esto al mismo tiempo? 02:13:43
sí, sí, sí, esto lo tenéis que ir haciendo a la vez 02:13:45
espero un poco si queréis 02:13:47
para que os pongáis a la vez 02:13:49
yo creo que sí 02:13:51
el objeto es un JSON, ¿no? 02:13:52
sí, yo he puesto un JSON 02:14:15
pero vamos, si no os queréis complicar 02:14:16
pues cogéis un texto o un número y mandáis cualquier cosa 02:14:18
que no tiene importancia ahora mismo 02:14:20
entre comillas lo de temperatura 02:14:22
02:14:28
en JSON siempre 02:14:29
la clave va entre comillas 02:14:31
ahora lo que os decía, en la paleta vais bajando 02:14:56
hasta la sección de red, y veis que tenéis 02:15:02
de MQTT hay dos, el primero que es 02:15:04
para suscribirse, y el segundo que es 02:15:07
para lo que yo quiero hacer en este caso, que es para publicar 02:15:10
entonces fijaos que aquí ocurre algo que no habíamos visto hasta ahora 02:15:13
cuando lo coloco en la zona central 02:15:16
además del punto azul que me indica que todavía 02:15:19
no he puesto en funcionamiento este nodo, me aparece 02:15:22
un triángulo rojo. El triángulo rojo indica que ese nodo 02:15:25
requiere una configuración adicional. Es decir, no basta con pulsar instancial 02:15:29
para que funcione. Si pulso instancial me va a dar un error. Necesito 02:15:33
configurar algo en este nodo. Entonces, para ver qué es lo que tengo que configurar 02:15:37
hago doble clic sobre él. Y claro, evidentemente lo que me está 02:15:41
pidiendo configurar, veis que aparece marcado en rojo, es 02:15:48
oye, tú quieres publicar, pero dime en qué broker MQTT quieres publicar. 02:15:51
y aquí viene la magia 02:15:56
de lo que hemos hecho con Jotestack 02:15:59
y es que vamos a poder desde Node.js 02:16:01
hacer referencia 02:16:03
a Mosquito simplemente 02:16:05
utilizando su nombre 02:16:07
entonces lo que voy a hacer aquí donde pone servidor 02:16:08
es hacer clic en el signo más 02:16:11
y crear 02:16:15
una conexión 02:16:18
a un broker Mosquito que la voy a llamar 02:16:20
MosquitoJF para que los compañeros 02:16:23
si quieren puedan hacerlo con sus propias iniciales 02:16:24
y veis lo bonito está aquí 02:16:27
ahora cuando me pide el servidor 02:16:29
yo no tengo que poner ninguna dirección IP 02:16:31
simplemente tengo que escribir 02:16:33
mosquito 02:16:35
y ya está 02:16:36
mosquito es con doble T 02:16:37
mosquito 02:16:43
de MQTT 02:16:44
todo en minúsculas 02:16:46
eso sí es muy importante 02:16:49
bien, mientras hacéis esto 02:16:50
os voy enseñando algo 02:16:54
si yo voy al terminal 02:16:55
vais a ver que ahí en el terminal 02:16:57
tenemos precisamente ese archivo docker-compose-yml 02:16:59
que nos ha creado el menú de IoT Stack. 02:17:03
Si accedo a él, para que lo veáis, 02:17:06
fijaos lo que tenemos aquí. 02:17:09
Esto es todo lo que nos ha ahorrado IoT Stack. 02:17:11
Tener que escribir todo esto. 02:17:14
Y no solamente tener que escribirlo, 02:17:17
sino saber lo que hay que escribir. 02:17:18
Hay veces que algunos de estos programas 02:17:20
entran en conflicto entre ellos, 02:17:23
tienen variables de entorno, como veis aquí. 02:17:26
pues todo esto nos lo ha hecho automáticamente 02:17:28
el IOT stack 02:17:30
¿y por qué es en minúscula? 02:17:32
que me preguntaba el compañero 02:17:34
porque tiene que ser exactamente como está escrito aquí 02:17:35
el servicio 02:17:38
¿veis que aquí está escrito el servicio mosquito en minúscula? 02:17:39
pues eso es lo que tenemos que poner nosotros 02:17:42
cuando luego usemos influxdb 02:17:44
pues igual, todo en minúscula, sin guiones 02:17:46
ni nada 02:17:48
¿vale? 02:17:49
pues ya tengo ahí mosquito incluido 02:17:56
pulso añadir 02:17:59
y ahora me dice, muy bien, ya que me has dicho en qué servidor 02:18:00
quieres publicar, por favor dime ahora 02:18:04
en qué topic, pues yo que sé, como es una temperatura 02:18:06
pues lo voy a publicar, por ejemplo, en casa 02:18:09
vamos a poner salón 02:18:11
o mejor, venga 02:18:15
como el ejemplo, planta baja 02:18:18
salón, y veis aquí viene lo de 02:18:21
la calidad de servicio que os decía, aquí puedes poner calidad de servicio 02:18:26
0, 1 o 2, lo puedo dar con calidad de servicio 0 02:18:29
por ejemplo, y pulso hecho, ahora ya solamente me falta 02:18:32
unir este inyector con este publicador 02:18:43
pero claro, ¿cómo sé yo si esto funciona? pues para saber si 02:18:46
funciona, lo que voy a hacer a su vez es crearme un suscriptor 02:18:52
para crearme el suscriptor, cojo un bloque MQTT 02:18:56
y veis que nuevamente me aparece el triángulo rojo 02:19:02
si hago doble clic, pues veo que evidentemente ese triángulo 02:19:07
rojo aparece porque me dice, oye, ¿a qué 02:19:12
broker te quieres conectar? al broker 02:19:14
que he creado antes, al broker MosquitoJF 02:19:16
¿y a qué topic 02:19:18
te quieres suscribir? 02:19:20
pues me voy a suscribir a todos los 02:19:22
que dependan de mi casa 02:19:24
casa, barra 02:19:25
almohadilla 02:19:28
igual, calidad 02:19:30
de servicio, pues la que tú quieras y demás 02:19:32
vale, pues ahora ya directamente 02:19:34
podría enchufarlo aquí 02:19:38
al depurador 02:19:40
y si no queréis andar con tantos cables por ahí 02:19:42
pues simplemente podéis crear también otro depurador nuevo 02:19:47
no pasa nada 02:19:49
lo voy a instanciar 02:19:50
voy a borrar todo lo que tengo en la ventana de terminal 02:19:54
para que veáis lo que entra nuevo 02:20:00
bueno, lo primero que ya es mágico 02:20:01
es que como veis automáticamente en OdeRed 02:20:03
ya se ha conectado a Mosquito 02:20:05
inmediatamente me aparece aquí de enfajo 02:20:07
conectado 02:20:09
ahora voy a inyectar por aquí la temperatura 02:20:10
la inyecto 02:20:13
llega el broker MQTT 02:20:14
y como resulta 02:20:16
que el propio Node.Ref está suscrito 02:20:19
a ese broker 02:20:21
y a todos los subtopics 02:20:22
que dependan de casa 02:20:24
veis que aquí automáticamente me está diciendo 02:20:26
oye, se ha recibido 02:20:28
temperatura 25 en el 02:20:30
topic casa, planta baja, salón 02:20:32
¿hay alguien ahí o estáis todos 02:20:34
llorando de alegría? 02:20:52
no sé 02:20:53
estamos ahí 02:20:54
estar estamos 02:20:56
yo sé que es un esfuerzo 02:20:58
pero de verdad que merece la pena 02:21:03
lo que acabamos de hacer es un paso impresionante 02:21:05
porque daos cuenta 02:21:07
ahora mismo lo que estamos viendo 02:21:08
es que yo podría publicar en un ordenador 02:21:10
y en vez de hacer esta tontería de ponerlo 02:21:13
aquí en un depurador 02:21:15
esto podría encender un ventilador 02:21:16
o sea igual que he puesto aquí esto de debug2 02:21:19
si esto fuera una Raspberry Pi 02:21:21
yo podría tener aquí los pines de la Raspberry Pi 02:21:23
y decir que este comando 02:21:25
encienda este pin o haga lo que tenga que hacer 02:21:27
¿vale? entonces 02:21:30
es un paso grande 02:21:31
y sin apenas haber programado 02:21:33
nada, como veis es básicamente arrastrar 02:21:35
unos cuantos nodos aquí 02:21:37
de hecho 02:21:39
aquí tenéis uno, por ejemplo, cuando este curso 02:21:47
lo hacemos con Raspberry Pi, pues veis 02:21:49
tenemos aquí dos inyectores 02:21:51
uno que envía el mensaje a encender 02:21:53
y otro que envía el mensaje a apagar 02:21:55
se publica en un topic 02:21:57
que se llama alert y a su vez 02:21:59
estamos suscritos a ese 02:22:01
topic y lo que hacemos es que 02:22:03
asignamos el valor 02:22:05
al pin número 11 de la Raspberry Pi 02:22:06
esto es lo que estáis viendo aquí, ¿vale? 02:22:09
para que veáis un ejemplo de eso que os decía 02:22:10
de cómo podríamos controlar 02:22:12
una Raspberry Pi con mensajes 02:22:14
MQTT 02:22:17
también un SP32 se puede conectar 02:22:17
a MQTT, ¿no? 02:22:22
perfectamente, ahora podríamos ir a Huawei 02:22:24
yo me podría venir aquí a Huawei 02:22:26
arrancar un proyecto de SP32 02:22:30
¿vale? 02:22:37
buscarme una librería de MQTT 02:22:39
aquí en Library Manager 02:22:42
la que tengamos para el Async MQTT 02:22:43
por ejemplo para el SP32 02:22:51
podría irme a la documentación 02:22:52
y en la documentación 02:22:54
como os comentaba el otro día, siempre va a haber 02:22:57
el repositorio y una serie de ejemplos 02:22:59
y en estos ejemplos 02:23:01
voy a encontrar para un 02:23:03
SP32 02:23:05
este va a ser complicado porque ya el nombre se llama 02:23:06
a tope de gama 02:23:12
pero bueno, para que os hagáis una idea 02:23:14
pues aquí tendríamos un 02:23:15
bueno, esto usa hasta 02:23:18
free retos, que aquí es 02:23:19
como veis, como se va a conectar, pues aquí tendría 02:23:21
que poner 02:23:24
el nombre del broker 02:23:24
lo voy a probar, igual no funciona, pero lo voy a intentar 02:23:28
para que lo veamos, entonces me vengo 02:23:30
aquí, pego aquí 02:23:32
el código 02:23:34
entonces, en este código 02:23:34
lo que me está pidiendo es 02:23:37
oye, ¿cuál es 02:23:39
la dirección del broker? 02:23:41
Pues la dirección del broker es mi dirección IP, esta de aquí. Vale, ¿el puerto cuál es? El 1883, que va a intentar conectarse a la Wi-Fi, que la Wi-Fi imagino que la tendrán en el otro archivo, a ver, en este de defines.h, efectivamente, la tienen aquí, entonces yo vengo, lo copio, me creo aquí un archivo nuevo, defines.h, lo pego, 02:23:43
Y recordad que la Wi-Fi de Huawei es sin contraseña. 02:24:17
Entonces aquí en el sketch.inu dice conectándose a MQTT y Wi-Fi BNB, SSP32, Mosquito, Wi-Fi Connected, IP Address, 02:24:26
y va a publicar. Bueno, pues lo voy a probar. Igual funciona, igual no. 02:24:36
Lo que no sé es dónde va a publicar, pero bueno, ahora lo veremos. 02:24:42
entonces lo que ocurriría ahora 02:24:47
es que tendríamos un SP32 02:24:49
publicando en una máquina 02:24:51
que está en la nube, en un broker MQTT 02:24:53
y podría estar publicando 02:24:55
sus temperaturas, podríamos 02:24:57
estar pendiente, podría estar suscrita 02:24:59
también, podría estar suscrita al nodo de red 02:25:01
me pide el 02:25:03
ASINTHP, así es que tengo que instalar 02:25:05
esa librería también 02:25:07
era, cuál era 02:25:08
no sé si era el ASINTHP 02:25:13
que me ha dicho, a ver, espera 02:25:15
se me ha olvidado 02:25:16
creo que era asyn 02:25:21
sí, asyn.pt 02:25:22
añado 02:25:24
has puesto la IP 02:25:25
y has puesto también el 02:25:32
topic o no? 02:25:34
no, no lo he puesto porque este código yo no lo conozco 02:25:36
lo he cogido y lo he copiado y pegado aquí sin más 02:25:38
entonces está publicando 02:25:41
un topic que se llama 02:25:43
parece que se escribe y publica 02:25:44
sí, y el topic a ver si encuentro 02:25:46
donde lo tienen definido 02:25:48
el put topic este 02:25:49
el put topic es este 02:25:50
así en MQTT, pues yo en vez de ese 02:25:53
podría poner 02:25:55
casa, planta baja 02:25:56
temperatura 02:25:59
voy a probar 02:26:02
no sé si va a funcionar 02:26:07
pero bueno, el concepto sería ese 02:26:09
sería que ahora mismo 02:26:11
tendríamos aquí un SP32 02:26:13
que está leyendo su temperatura o lo que sea 02:26:15
y estaría publicando 02:26:17
en este broker, y de hecho si conseguimos 02:26:19
que funciona, pues debería aparecer aquí 02:26:21
lo que esté mandando, que creo que está mandando 02:26:23
números aleatorios, me ha parecido ver por ahí 02:26:25
le voy a dar una oportunidad 02:26:27
pero no más, porque como veis esto 02:26:30
pues va como el otro día 02:26:31
bastante mal, pero bueno 02:26:33
el concepto es ese, el concepto es ver que yo puedo tener 02:26:37
una mota 02:26:39
esa mota, incluso siendo un dispositivo 02:26:40
relativamente sencillo 02:26:43
como un SP32, es capaz de 02:26:45
ejecutar una pila MQTT 02:26:47
sobre wifi 02:26:49
se ha dado cuenta que ya estamos montando 02:26:50
aquí dos pilas, la pila wifi 02:26:52
y la pila MQTT 02:26:54
del stack TCP y P 02:26:56
y puede enviar información a un sistema remoto 02:26:57
a ver si funcionase 02:27:00
pero bueno, tengo poca esperanza 02:27:02
vamos a ver 02:27:04
Feliz, mira a ver si en el otro archivo 02:27:04
que has creado en defines.h 02:27:08
mira a ver si has quitado la contraseña 02:27:10
es que creo que no la has quitado 02:27:12
gracias 02:27:13
ahí está 02:27:14
bueno, no me quedo parado 02:27:16
porque se nos va el tiempo 02:27:27
Lo voy a dejar aquí. Si entrase a funcionar, pues veríamos que empezaría por ahí a salir valores en el nodo de red. Voy a avanzar un poco más en la presentación mientras tanto. Vamos a ir ahora a hablar de InfluxDB. 02:27:28
Ya tenemos Mosquito integrado con Node-REF. Esto ya lo hemos visto. Y ahora vamos a hablar de InfluxDB. InfluxDB es una base de datos de series temporales. Es muy popular porque es de código abierto. 02:27:41
Entonces, la mayoría de las soluciones de Internet de las Cosas utilizan, bueno, algunas utilizan Cassandra, PostgreSQL, pero muchas, muchas usan InfluxDB. 02:28:01
¿Qué quiere decir que sea una base de datos de series temporales? 02:28:13
Pues quiere decir que cada dato que se almacena en la base de datos va siempre acompañado de un sello temporal, de una fecha y una hora. 02:28:17
Entonces, los datos en InfluxDB se almacenan como measurements, como medidas, ¿vale? 02:28:25
Las medidas componen series y las series están compuestas por puntos. 02:28:33
Bien, no os agobieis que esto se explica después, ¿vale? 02:28:39
Pero esto es simplemente terminología. 02:28:42
En una base de datos SQL, ¿vosotros qué tenéis? 02:28:44
Pues tenéis tablas, tenéis registros y tenéis campos, ¿vale? 02:28:48
Pues esto es algo parecido. En InfluDB tenemos medidas, series y puntos. Entonces, ¿cómo se crean estas medidas? Pues tienen que tener una sintaxis muy concreta, que es esta que veis aquí. En primer lugar se pone el nombre de la medida. 02:28:54
luego sin espacio ni nada 02:29:09
y separados por comas 02:29:11
ponemos todas las etiquetas que queramos 02:29:13
etiquetas que son de la forma 02:29:15
clave igual valor 02:29:17
todas separadas por coma 02:29:19
que son opcionales 02:29:21
las etiquetas no son obligatorias 02:29:22
lo que sí que es obligatorio 02:29:24
es tener al menos un campo 02:29:26
que es lo que viene a continuación 02:29:28
veis que hay un espacio 02:29:30
entre la última etiqueta y el primer campo 02:29:31
y los campos son también pares 02:29:34
clave igual valor 02:29:36
y si quieres poner varios los puedes separar por comas 02:29:38
bien, opcionalmente 02:29:40
al final puedes poner 02:29:42
un timestamp en nanosegundos 02:29:43
o si no lo pones 02:29:46
el propio sistema lo va a crear automáticamente 02:29:48
por ti, esto que es así 02:29:50
un poco abstracto 02:29:52
yo creo que se aterriza bien si miramos aquí abajo 02:29:53
aquí he hecho un ejemplo 02:29:56
en el que 02:29:58
tenemos un punto 02:30:00
que se va a añadir 02:30:01
al measurement temperatura 02:30:03
Es decir, yo voy a tener en esa base de datos una medida de temperatura, que en este caso corresponde a la nevera 25 y está expresado en grados Celsius. Esos son los tags. Veis que los tags están directamente unidos al nombre del measurement mediante comas. 02:30:06
Luego hay un espacio y lo que viene a continuación son los fills. Tengo un primer campo que es obligatorio, que es la temperatura exterior son 32 grados en la nevera 25 y he puesto un segundo fill que es la temperatura interior de la nevera son 3,8 grados. 02:30:23
Este es el aspecto que tiene un punto. Esto es un punto de la serie de la medida temperatura. Bien, InfluxDB es bastante complejo. Tiene un montón de opciones. Por ejemplo, se pueden establecer políticas para la retención. ¿Eso qué es? Durante cuánto tiempo se almacenan los datos. 02:30:41
Un problema que tenemos en muchos proyectos de Internet de las cosas es que la cantidad de datos que recibimos es brutal. Entonces no podemos almacenarlos todos. Tenemos que decidir en qué momento caducan. Entonces hay veces que decidimos caducarlos a dos años, a cuatro años, pero tenemos que caducarlos porque ya habéis visto que cuando se han creado las máquinas virtuales, habéis visto que el espacio que tenemos en disco duro es bastante limitado. 02:31:03
son unos 40 gigas 02:31:27
incluso en las más altas de gama 02:31:28
el disco duro 02:31:31
sigue siendo bastante limitado 02:31:32
y es muy caro 02:31:34
entonces lo que hacemos 02:31:35
es que tenemos que 02:31:36
buscar otra forma 02:31:37
caducar los datos 02:31:39
y almacenarlos en copias de seguridad 02:31:41
o lo que sea 02:31:42
pero no podemos mantenernos 02:31:43
en la máquina principal 02:31:44
luego también se pueden crear réplicas 02:31:46
los datos en InfluetDB 02:31:49
pueden estar replicados 02:31:50
para que si hay cualquier tipo de problema 02:31:52
pues no se pierdan 02:31:54
y luego hay una cosa 02:31:55
que se llaman los a-group 02:31:56
que permiten 02:31:57
fraccionar la información 02:32:00
según se está recibiendo 02:32:02
en vez de almacenarlas todas en un solo archivo 02:32:04
de la base de datos, se van creando 02:32:06
como pequeños archivos 02:32:08
y aquí podríamos configurar 02:32:09
yo quiero un archivo para cada mes 02:32:11
pues eso es muy habitual 02:32:13
o depende del volumen de datos que recibas 02:32:14
igual necesitas crear un archivo para cada día 02:32:17
bueno, pues esto es InfluzDB 02:32:19
lo bueno que tiene InfluzDB 02:32:21
es que si tenéis una pequeña experiencia 02:32:23
con cualquier otro tipo de base SQL 02:32:25
base de datos 02:32:28
estructurada 02:32:29
pues resulta que el lenguaje que se 02:32:30
utiliza en InfluxDB es prácticamente 02:32:34
idéntico 02:32:35
de hecho si queréis encontrar una similitud 02:32:36
entre una base de datos InfluxDB 02:32:39
y una base de datos SQL 02:32:41
el nombre de la medida 02:32:43
sería el nombre de la tabla 02:32:45
la medida es la tabla 02:32:47
el timestamp es el 02:32:49
índice primario, tiene que ser único 02:32:51
los tags están indesados 02:32:54
eso que quiere decir 02:32:56
que realizar búsquedas por tags 02:32:58
es muy rápido 02:32:59
pero los campos no están indesados 02:33:00
entonces realizar búsquedas por campos 02:33:03
es lento 02:33:05
bien, pues vamos a hacer un ejercicio con 02:33:06
influxdb 02:33:09
esto es simplemente para que le cojáis un poco 02:33:10
el tacto a la base de datos 02:33:13
luego vais a ver que afortunadamente 02:33:15
grafana 02:33:17
se puede vincular directamente a influxdb 02:33:18
entonces no tenemos que hacer nada 02:33:21
simplemente todos los datos que recibamos 02:33:22
desde Node-RED se los vamos a enchufar 02:33:24
a InfluxDB y de InfluxDB 02:33:27
los va a rescatar automáticamente Grafana 02:33:29
bien 02:33:31
pues para usar InfluxDB 02:33:32
vamos a usar una consola 02:33:34
una consola que tenemos que abrir 02:33:36
en el contenedor 02:33:39
de InfluxDB 02:33:41
¿eso cómo se hace? pues se hace con este comando 02:33:42
que os dejo aquí para que lo podáis poner 02:33:44
docker-compose exec 02:33:46
InfluxDB-bus, aquí le estoy diciendo 02:33:48
ejecuta una consola bus 02:33:51
en el contenedor 02:33:53
influxdb, lo voy a hacer yo para que 02:33:55
lo veáis, esto es en el terminal 02:33:57
y escribo 02:33:59
docker 02:34:01
compose 02:34:02
exec 02:34:04
influx 02:34:08
db, vale 02:34:12
y como veis el prom ha cambiado 02:34:17
ahora no me dice que esté conectado a la 02:34:19
máquina ismie01 02:34:21
ahora me dice ahí que estoy conectado a 02:34:22
algo que es el 9D9 02:34:25
que si os fijáis es exactamente 02:34:27
el ID del contenedor 02:34:29
de InfluxDB que lo tengo aquí encima 02:34:31
vale, es decir, ahora estoy 02:34:33
en la consola de ese contenedor 02:34:35
no estoy en la consola de la máquina 02:34:37
principal, es decir 02:34:39
cualquier comando que yo escriba ahora 02:34:41
lo va a ejecutar InfluxDB 02:34:43
el primer comando 02:34:45
que vamos a ejecutar es precisamente 02:34:47
Influx, ese comando 02:34:49
sirve para acceder 02:34:51
al sistema gestor 02:34:53
de InfluxDB. ¿Veis? Ya estoy 02:34:56
en el cell de InfluxDB. 02:34:57
Y ahora podría decirle, oye, muéstrame 02:35:00
qué bases de datos tienes. 02:35:02
Show database. 02:35:03
Y me dice que no tiene ninguna. 02:35:05
De momento. 02:35:07
¿Vale? Ahora le puedo decir, oye, 02:35:10
quiero crear una base de datos. Pues yo le digo aquí 02:35:12
create 02:35:14
database 02:35:15
database.iot 02:35:17
Y ahora si le vuelvo a decir que me muestre 02:35:19
las bases de datos, veis que ahora ya sí 02:35:21
me aparece una base de datos con el nombre 02:35:24
IOT 02:35:26
os dejo que probéis esto 02:35:26
si queréis salir 02:35:29
de la consola es control D 02:35:32
sale si ya estoy fuera de la consola 02:35:34
de Influenced B 02:35:37
y si queréis salir a la máquina principal 02:35:39
pulsamos exit y veis que 02:35:41
ahora ya estoy nuevamente en la máquina principal 02:35:44
entonces desde la máquina principal 02:35:46
repito, ¿qué es lo que tengo 02:35:47
que hacer? Pues lo primero que tengo 02:35:50
que hacer es acceder a 02:35:52
una terminal del contenedor 02:35:54
InfluxDB y eso lo hacía con Docker 02:35:56
Compose 02:35:58
Exec 02:35:59
en InfluxDB 02:36:00
una consola de tipo bus. Ahora ya 02:36:02
estoy en la terminal del contenedor 02:36:07
de InfluxDB. Aquí lanzo 02:36:09
el cell 02:36:11
de InfluxDB y si ahora por ejemplo 02:36:13
le digo que me muestre 02:36:15
las bases de datos, veis que ya 02:36:16
me aparece ahí que tengo una base de datos que se llama 02:36:19
IoT. ¿Me vais siguiendo? 02:36:21
Sí, sí. 02:36:30
Bueno, menos mal. 02:36:31
Ahora, si yo quiero 02:36:33
usar esa base de datos, tengo que decirle, oye, 02:36:35
quiero usar esa base de datos, 02:36:37
use IoT. Y él me dice, muy bien, 02:36:38
estás usando la base de datos IoT. 02:36:41
Ahora supongamos que queremos añadir 02:36:43
un measurement, que queremos añadir una medida 02:36:45
para insertar, 02:36:47
¿veis que es como MySQL? 02:36:49
Insertar la medida 02:36:51
de temperatura con las etiquetas 02:36:53
nevera 25 y unidad grado Celsius 02:36:55
y los campos exterior 32 02:36:57
interior 3,8 ¿vale? pues lo vamos a insertar 02:36:59
insert 02:37:01
temperatura 02:37:03
nevera 02:37:04
igual 25 02:37:07
unidad 02:37:09
igual Celsius 02:37:11
espacio para separar 02:37:13
las tags de los fields 02:37:15
las etiquetas de los campos 02:37:16
y aquí exterior 02:37:18
igual 02:37:20
no recuerdo lo que había puesto 02:37:21
voy a poner 25 02:37:23
interior 02:37:24
igual 3.8 02:37:26
¿vale? 02:37:28
he puesto algo mal 02:37:30
he puesto insert, se me ha olvidado la T 02:37:32
al principio, insert 02:37:35
ahí 02:37:36
ahí está, ¿vale? 02:37:38
entonces si yo ahora le digo que me muestre 02:37:41
las measurements 02:37:42
¿veis? 02:37:43
me dice que existe ya un measurement 02:37:47
que se llama temperatura 02:37:48
¿vale? ese measurement es como una 02:37:50
tabla, ¿vale? lo que ha ocurrido 02:37:52
es cuando nosotros hemos insertado 02:37:54
sin necesidad de crear 02:37:56
previamente esa tabla 02:37:58
la tabla se ha creado automáticamente 02:37:59
de forma dinámica cuando se recibe el primer 02:38:02
measurement, y ahora ya 02:38:04
sobre esa tabla ya podríamos ejecutar 02:38:05
comandos, como digo 02:38:08
muy parecidos a los de 02:38:10
a los de 02:38:11
MySQL o cualquier 02:38:14
base de datos relacional 02:38:16
entonces veis que aquí tengo 02:38:18
select nevera, que nevera es un 02:38:19
tag, ese está indexado 02:38:22
y exterior que es un fill 02:38:23
que no está indesado, de temperatura 02:38:25
entonces si yo ejecuto eso aquí 02:38:27
select nevera 02:38:29
coma exterior 02:38:32
de la tabla temperatura 02:38:33
o más exactamente 02:38:35
del measurement temperatura 02:38:37
found 02:38:38
expected from, ah si, select 02:38:41
from temperatura, me falta 02:38:43
from 02:38:45
temperatura, pues veis que me sale ahí 02:38:47
el time stamp 02:38:50
el valor de nevera 02:38:52
que era la nevera 25 y la temperatura exterior 02:38:54
que eran 25 grados 02:38:57
entonces bueno, lo tenéis aquí todo 02:38:59
en la imagen para si queréis ver los comandos 02:39:03
como se van creando y aquí os he puesto un ejemplo 02:39:06
para que podáis ver más o menos como es la sintaxis 02:39:09
de selección, tú le puedes decir que quieres seleccionar 02:39:12
de donde lo quieres seleccionar 02:39:15
por ejemplo con un web le puedes decir entre tal segundo y tal otro segundo 02:39:17
limitar, como veis, muy parecido al lenguaje 02:39:22
de MySQL. Entonces 02:39:25
lo que vamos a hacer ahora, el siguiente ejemplo 02:39:27
es coger e inyectar 02:39:31
datos en ese measurement. ¿Cómo los vamos a inyectar? 02:39:34
Pues fijaos, vamos a usar un inyector 02:39:37
ese inyector pasa por aquí por un nodo, que ahora os explicaré 02:39:38
y luego tiene simplemente un nodo de 02:39:43
publicación en InfluenceDB. Entonces 02:39:45
toda la información que llegue por aquí se va a inyectar en 02:39:48
Influx de red, ¿vale? 02:39:51
Entonces, primera cosa importante, 02:39:53
claro, no de red, 02:39:56
cuando coloquemos este nodo, nos va 02:39:57
a mostrar un triangulito rojo, 02:39:59
porque nos va a decir, oye, ¿a qué 02:40:01
base de datos quieres conectarte? 02:40:03
Entonces nosotros le tendremos 02:40:06
que crear 02:40:07
un servidor, como estáis viendo aquí, ¿vale? 02:40:08
Aquí le vamos a decir, no, no, queremos 02:40:11
conectarnos a Influx 02:40:13
de red, ¿veis? Igual que antes, 02:40:15
utilizamos Mosquito como nombre 02:40:17
del servidor, ahora simplemente tenemos que utilizar 02:40:19
InfluxDB 02:40:21
¿a qué base de datos? a la que he creado yo antes 02:40:22
¿vale? a la base de datos 02:40:25
IoT, entonces 02:40:27
vamos a poder publicar directamente 02:40:28
¿y qué vamos a publicar? bueno, pues lo que vamos a 02:40:31
publicar, lo vamos a definir 02:40:33
precisamente en este nodo, ¿vale? 02:40:35
este nodo, lo voy a escribir yo y os lo 02:40:37
pego por ahí para que vosotros lo podáis usar 02:40:39
si queréis, es un nodo 02:40:41
de los más versátiles que hay 02:40:43
es un nodo de función 02:40:45
función, eso quiere decir 02:40:46
que ahí tú puedes escribir el código Javascript 02:40:48
que te dé la gana 02:40:50
¿qué código he decidido yo meter? pues el siguiente 02:40:51
fijaos, yo he cogido 02:40:54
y he creado un código 02:40:56
en que en primer lugar 02:40:58
el payload lo borro, lo dejo vacío 02:41:00
y dentro del payload 02:41:02
creo luego dos objetos 02:41:04
el primer objeto es un objeto 02:41:06
JSON 02:41:08
en el cual en la etiqueta exterior 02:41:09
almaceno un número aleatorio 02:41:12
entre 0 y 1 multiplicado por 5 02:41:14
al que le sumo el valor 20 02:41:16
y en el campo interior 02:41:17
almaceno un número aleatorio 02:41:20
entre 0 y 1 multiplicado por 5 02:41:21
y luego en el payload 1 simplemente 02:41:24
creo un objeto que es nevera 25 y unidad C 02:41:26
como veis es muy parecido 02:41:28
a lo que he hecho antes 02:41:30
y ahora seguramente os estaréis preguntando 02:41:31
¿por qué lo haces así? ¿por qué lo pones 02:41:34
en dos objetos? ¿por qué no lo has puesto en un solo objeto? 02:41:36
bien, pues eso es porque me he leído 02:41:39
la documentación, ¿vale? y ahora la vais 02:41:40
a leer vosotros también cuando vayamos a lo de red 02:41:42
si yo pongo un nodo de inyección 02:41:44
y luego busco 02:41:47
en InfluxDB 02:41:51
para publicar en InfluxDB 02:41:52
que es este, veis como ya 02:41:54
os había advertido yo, aparece el triángulo 02:41:58
pero lo que me interesa ahora es que al hacer click 02:42:00
en el nodo de InfluxDB e ir a la 02:42:02
documentación, te dice aquí 02:42:04
dependiendo 02:42:08
de cómo puedes hacer las cosas 02:42:12
de varias formas, pero yo la que he elegido es esta 02:42:14
dice, si 02:42:16
la carga de pago es 02:42:18
un array, un vector 02:42:20
o una matriz que contiene dos objetos 02:42:22
el primer objeto se considerará 02:42:24
que son los campos 02:42:26
y el segundo objeto se considerará que son 02:42:27
las etiquetas. ¿Veis? Por eso 02:42:30
yo sabía que en el primer objeto 02:42:32
tenía que poner los campos 02:42:33
y en el segundo objeto tenía que 02:42:35
poner las etiquetas. Bueno, pues armado 02:42:38
con toda esta información, ya directamente 02:42:40
Perdona, ¿qué influx de B has 02:42:42
cogido? Porque pone input, output 02:42:44
output 02:42:46
en este caso es output porque queremos guardar 02:42:47
en la base de datos, si quisiéramos 02:42:50
rescatar de la base de datos sería input 02:42:52
aquí está, yo he cogido 02:42:54
este, influx db out 02:43:02
si quisiera 02:43:03
esto, influx dbi 02:43:05
es para lanzar una consulta 02:43:08
y rescatar información 02:43:10
de la base de datos, influx db batch 02:43:12
es para lanzar lotes 02:43:14
son lotes para guardar información 02:43:16
por lotes, en vez de measurement a measurement 02:43:17
por un lote 02:43:19
bueno, lo que os decía 02:43:20
tengo ese nodo, tengo ese nodo, me falta el nodo 02:43:22
de función, el nodo de función 02:43:25
está, a ver si lo encuentro 02:43:27
entre los, sí, pues entre los de función 02:43:29
precisamente, ahí está 02:43:31
entonces yo uno este con este 02:43:33
uno este con este 02:43:40
y vamos a empezar por el 02:43:42
de influxdb, entonces si yo 02:43:44
hago doble clic aquí para configurarlo 02:43:46
veis que lo que me está diciendo es 02:43:48
justo eso, me está diciendo, oye, es que no sé 02:43:50
en qué servidor influxdb 02:43:52
quieres almacenar la información 02:43:54
pues pulso el signo más 02:43:56
y es tan sencillo como darle un nombre 02:43:58
pues yo voy a llamarle influxdb-jf 02:44:01
veis aquí es importante lo de la versión 02:44:04
por eso os decía coger la versión 1 02:44:07
podríamos usar también la versión 2 02:44:09
entonces como tenemos la versión 1 02:44:11
pues la versión 1 02:44:13
y lo bueno ahora es que yo no tengo que escribir aquí 02:44:14
ninguna dirección ip 02:44:17
aquí lo que tengo que poner es directamente 02:44:18
influxdb, el nombre del contenedor 02:44:20
porque tanto no de red 02:44:23
como influxdb están en el mismo stack 02:44:24
entonces comparten una red interna 02:44:27
en la que se conocen por su propio nombre 02:44:29
no necesitan direcciones IP 02:44:31
luego, ¿en qué base de datos 02:44:33
quieres guardar los datos? 02:44:35
la base de datos que he creado antes, que la he creado manualmente 02:44:37
desde el terminal 02:44:39
recordad que aquí en el terminal hubo un momento 02:44:41
en el que yo creé la base 02:44:43
de datos 02:44:45
a ver, ¿dónde lo tengo hecho eso? 02:44:46
es que lo había hecho en la anterior 02:44:50
Entonces, no sé si se habrá borrado ya. Aquí está. Create database IoT. Como yo ya tengo esa base de datos creada, que se llama IoT, ahora puedo venir aquí y almacenar información en esa base de datos. Le digo añadir y él me dice, vale, muy bien. 02:44:52
pues entonces tú quieres guardar 02:45:09
en esa base de datos 02:45:11
y ahora me pregunta, ¿pero en qué medida? 02:45:14
pues la medida 02:45:17
nosotros creo que la estábamos llamando 02:45:17
temperatura, a ver que lo consulte 02:45:19
para hacerlo igual 02:45:21
sí, la habíamos llamado temperatura 02:45:22
pues escribo ahí, temperatura 02:45:27
vale, pues ya desaparece el triángulo rojo 02:45:29
pues la primera parte está resuelta 02:45:33
ahora vamos ya a la parte de la función 02:45:36
esto no lo copiéis, si queréis lo hago yo en un momento 02:45:37
y os lo pego por ahí 02:45:40
aquí sería decirle, oye, quiero empezar con un payload vacío 02:45:41
ahí está 02:45:44
voy a ver que ha pasado con Glowit 02:45:54
se ha quedado colgado, lo vuelvo a dar 02:45:56
por si acaso 02:45:58
vale, lo que os estaba 02:45:59
diciendo 02:46:03
le pongo que quiero una carga 02:46:03
de pago vacía 02:46:06
luego en el 02:46:08
payload 02:46:10
creo un objeto 02:46:13
JSON que va a tener como exterior 02:46:16
el valor 20 por ejemplo 02:46:19
más un math random multiplicado por 5 02:46:23
y que va a tener como objeto 02:46:28
interior simplemente un math 02:46:32
random por 5 02:46:36
random 02:46:37
random por 5 02:46:41
esto lo podéis hacer más grande 02:46:45
si queréis verlo mejor 02:46:47
eso respecto al 02:46:48
a ver aquí he puesto un punto en vez de una coma 02:46:51
cuidado 02:46:53
punto y coma al final porque esto es javascript 02:46:54
y en el 02:46:57
message payload 1 02:46:59
voy a crearme 02:47:01
los tags 02:47:04
un objeto json para los tags 02:47:05
que era 02:47:07
nevera 2.25 02:47:08
unidad 02:47:12
Unidad 2 puntos C. 02:47:13
De grado tercio. 02:47:19
Vale. 02:47:21
Y esto lo voy a pegar ahí en el chat para que lo tengáis. 02:47:22
Le digo hecho. 02:47:27
Le digo instanciar. 02:47:34
A ver, tengo un error. 02:47:37
Me aparece aquí el triángulo rojo. 02:47:37
Eso es que algo he escrito mal. 02:47:40
Que falta el punto y coma que se me ha olvidado aquí al final. 02:47:41
Punto y coma. 02:47:44
Sigue habiendo un error. 02:47:46
que más se me ha olvidado 02:47:47
mensaje pilot 02:47:48
igual tengo que ponerlo así 02:47:52
para indicarle que es un array vacío 02:47:56
sí, eso, justo, ¿vale? 02:47:58
perdona, lo vuelvo a pegar, que tenía un fallo 02:48:00
tengo aquí 02:48:02
ese es el segundo que he pegado 02:48:05
entre tanto, Gowey ha seguido a vuelta a fallar 02:48:12
le vuelvo a dar 02:48:15
bien, esto está hecho 02:48:16
ya lo tengo todo en azul 02:48:18
eso quiere decir que ahora ya puedo instanciar 02:48:20
ya lo tengo instanciado 02:48:23
ahora me voy a la mariquita 02:48:25
y si hago clic aquí 02:48:27
no pasa nada, veis que estoy inyectando 02:48:29
y aquí no aparece nada 02:48:31
porque yo no he puesto ningún depurador 02:48:33
pero sin embargo ahora 02:48:35
si me voy 02:48:37
a la consola 02:48:39
y ejecuto el mismo comando de antes 02:48:41
veis que ahora ya no tengo 02:48:44
un único punto, ahora ya tengo 02:48:45
muchos puntos para 02:48:47
temperatura 02:48:49
veis que tengo ahí todos los valores 02:48:51
que se están introduciendo al azar 02:48:53
para la temperatura 02:48:55
vamos a poner en vez de nevera y exterior 02:48:57
vamos a poner exterior e interior 02:48:59
interior 02:49:01
¿vale? ¿veis como se han ido almacenando? 02:49:03
se han ido introduciendo números 02:49:07
de 20 más 02:49:08
un número al azar entre 0 y 5 02:49:12
para la exterior y un número al azar entre 0 y 5 02:49:14
para la interior 02:49:17
ahora 02:49:19
¿nos pones en el chat lo de la función 02:49:24
de nuevo? para que esté bien 02:49:28
no está bien, la segunda que he puesto está bien 02:49:29
lo he puesto dos veces 02:49:32
la segunda está bien 02:49:34
me voy a ir con la ilusión de que funcione 02:49:35
Huawei pero veo que me voy a ir 02:49:39
con la ilusión 02:49:42
vale, bueno, seguimos 02:49:44
¿qué más ventajas tiene 02:49:46
Node-RED? pues te permite crear paneles 02:49:52
de control, podemos crear 02:49:54
un dashboard sencillito, es decir 02:49:56
yo quiero mostrar un gráfico, pues lo puedo 02:49:57
hacer directamente en Node-RED 02:49:59
¿por qué querría hacer esto? porque vais a ver 02:50:01
que las alternativas son bastante más complicadas 02:50:03
incluso la más simple 02:50:06
que es Grafana, cuando veamos Grafana 02:50:08
posteriormente, porque hoy ya 02:50:10
no va a ser, vais a ver que es 02:50:12
bastante tedioso 02:50:14
por decir poco, ¿vale? 02:50:15
entonces, lo bueno que tiene 02:50:18
Node.js es que me incluye un sistema 02:50:19
de dashboard que es muy precario 02:50:22
pero en algunos casos es suficiente 02:50:23
ese sistema de dashboard 02:50:25
está basado en los siguientes elementos que os muestro 02:50:28
aquí, ¿vale? está basado en fichas 02:50:30
dentro de esas fichas 02:50:31
vosotros lo que vais a tener son grupos 02:50:34
¿vale? 02:50:36
y esos grupos pueden contener o bien gráficos 02:50:37
como estáis viendo aquí, un gráfico de líneas 02:50:40
de las temperaturas exterior e interior 02:50:42
de InfosDB, o bien controles 02:50:44
pueden ser actuadores también 02:50:46
para que tú pulsar un botón 02:50:47
y que se encienda una luz, o se ponga en marcha una máquina 02:50:49
o lo que tú quieras 02:50:52
para crear esto, tenemos 02:50:53
en InfosDB 02:50:56
una sección 02:50:58
completa, aquí abajo, dedicada a los 02:51:00
dashboards, que es todo esto que veis aquí. Veis que tenéis un montón de interfaces 02:51:04
de usuario, botones, menús desplegables, deslizantes, 02:51:08
numéricos, entradas de texto, selectores de color, y luego tenéis también 02:51:12
otros para campos de texto, relojes, relojitos de estos 02:51:16
para marcar analógicamente, gráficos, incluso salidas de audio, 02:51:20
notificaciones, ¿vale? Tenemos muchísimas posibilidades. Entonces, 02:51:24
Entonces, lo que vamos a ver, no sé si nos va a dar tiempo hoy, pero bueno, por lo menos lo voy a plantear. 02:51:28
¿Veis que nosotros teníamos este flujo inicial en el cual estábamos insertando temperaturas al azar en la base de datos sin flujo de BED? 02:51:35
Pues ahora lo que vamos a hacer es coger esos datos y los vamos a filtrar. 02:51:44
Vamos a quitar los tags y nos vamos a quedar solo con los campos. 02:51:53
Es decir, nos vamos a quedar solamente con los valores de exterior e interior, que eran las temperaturas. Esos valores los vamos a pasar por un nodo de tipo split. ¿Eso qué va a hacer? Pues que los va a dividir. 02:51:56
Es decir, en lugar de ser un solo payload, una sola carga de pago con exterior e interior, lo va a convertir en dos cargas de pago, una para exterior y otra para interior, y luego se las va a mandar directamente a un gráfico. 02:52:10
Ese es el cometido que tenemos a continuación y voy a intentar hacerlo. 02:52:27
Entonces, a ver si me da tiempo, me vengo aquí a la función, voy a crear una función nueva, perdón. 02:52:34
Y en esa función lo único que voy a hacer, como veis aquí, es decir, la carga de pago va a ser solamente lo que reciba en el objeto 0. 02:52:42
Recordad que en el objeto 0 iban los campos, entonces quitamos los tags. 02:52:50
Entonces le digo aquí, mi6.payload es igual a lo que he recibido de mi6.payload en el objeto 0. 02:52:55
De esta forma ya, lo que pase a partir de aquí, va a ser solamente los campos. 02:53:05
Esto es lo que he hecho aquí. 02:53:13
Luego, en el nodo de split, esto es muy importante. 02:53:15
lo que voy a decir es que quiero copiar 02:53:22
la clave, fijaos que ahí me va a llegar 02:53:24
exterior 25, interior 02:53:26
3,8, pues la clave es exterior 02:53:28
e interior, entonces 02:53:30
lo que voy a hacer es copiar exterior e interior 02:53:32
en el topic del mensaje 02:53:35
recordad que os he dicho antes que los mensajes 02:53:37
tienen una carga de pago 02:53:38
y tienen un topic, pues lo voy a 02:53:39
cargar en el topic, ¿por qué 02:53:42
hago esto? porque yo ya me he leído 02:53:44
la documentación 02:53:47
y sé que los gráficos 02:53:48
exigen 02:53:50
que los valores 02:53:52
o sea, la serie de valores 02:53:55
el nombre de la serie, aparezca en el 02:53:57
topic, entonces lo hago así 02:53:59
añado un bloque 02:54:01
de tipo split 02:54:03
esos están en los de modificación 02:54:04
a ver donde están, función 02:54:07
red, en secuencia 02:54:09
en secuencia, split 02:54:11
vale, y yo digo aquí 02:54:13
que lo quiero copiar 02:54:17
en topic 02:54:18
copiar clave 02:54:20
a topic, a ver que no se me pase nada 02:54:23
tala tala, creo que está 02:54:25
correcto, hecho 02:54:29
vale, y ahora 02:54:32
por último, pongo 02:54:35
un nodo de tipo gráfico 02:54:37
que me vengo aquí abajo, a los nodos de 02:54:38
tipo gráfico, veis que va a aparecer el triángulo 02:54:41
rojo, porque me está pidiendo 02:54:43
configurar algo 02:54:45
vale, entonces lo que me 02:54:46
está pidiendo es que tengo que añadir un nuevo 02:54:49
grupo de dashboards, vale, fijaos que os he 02:54:51
dicho aquí antes, que los dashboards 02:54:53
están compuestos por fichas 02:54:54
que contienen a su vez grupos y dentro de los grupos 02:54:56
puede haber gráficos o puede haber controles 02:54:58
¿vale? entonces yo tengo que añadir un nuevo 02:55:00
dashboard, el dashboard 02:55:02
lo tengo que añadir a un 02:55:04
tablero, a una ficha, entonces tengo que añadir 02:55:06
una ficha ¿vale? entonces la ficha la voy a 02:55:08
llamar por ejemplo Juanfe 02:55:10
ya tengo la ficha 02:55:11
una vez que tengo la ficha 02:55:14
esto ya 02:55:16
está hecho 02:55:18
no sé si ahora estoy añadiendo el grupo 02:55:19
el grupo lo voy a llamar 02:55:22
temperaturas 02:55:24
¿vale? y veis ya tengo ahí 02:55:26
donde se va a publicar 02:55:33
y luego, bueno, aquí tenéis pues 02:55:35
un montón de opciones para configurar 02:55:37
no sé si he configurado alguna más en la presentación 02:55:39
voy a ver 02:55:42
bueno, mostrar la leyenda para que 02:55:42
sepamos cuáles son los nombres de las 02:55:45
de las series, ahí van a aparecer exterior e interior 02:55:48
y ya estaría, estaría hecho 02:55:51
¿vale? entonces ya puedo instanciar 02:55:53
todo esto 02:55:55
y una vez que lo tengo instanciado 02:55:56
a ver ahora, ¿dónde está? 02:55:59
lo de mostrar los dashboards, está aquí 02:56:01
veis que ahí tengo 02:56:03
mi dashboard de temperatura 02:56:05
y veis que aquí pone muy pequeñito 02:56:07
link, ¿vale? 02:56:08
pues ahí si hago clic en el link 02:56:10
¿por qué no me deja acceder al link? 02:56:12
ah, no, perdonad, que le he dado a añadir link 02:56:17
no, no, no es ahí, perdonad que me he equivocado 02:56:19
está aquí en temperatura 02:56:21
aquí, perdonad, sería 02:56:23
este otro icono, el que está aquí arriba, ¿vale? 02:56:27
el que está encima del link, hago clic ahí 02:56:29
y ya directamente tengo aquí 02:56:31
la ficha Juanfe con el grupo 02:56:34
temperaturas, de tal forma que 02:56:37
si ahora nosotros vamos 02:56:39
insertando aquí unas cuantas temperaturas 02:56:40
a ver, la vuelta a fallar 02:56:43
último intento 02:56:46
lo que vamos a ver es que 02:56:48
esas temperaturas tendrían que estar apareciendo 02:56:50
aquí, y no están apareciendo porque 02:56:52
a ver, algo he hecho mal 02:56:54
he mandado la función 02:56:57
que es el payload 0 02:57:02
aquí he dividido por topic 02:57:05
y aquí he mandado 02:57:07
el gráfico, el gráfico está en 02:57:09
juanfetemperatura, la voy a echar 02:57:11
muestro la leyenda, algo se me ha pasado 02:57:13
aquí, me voy a borrar este 02:57:19
link que no lo tenía que haber metido 02:57:21
distancio 02:57:23
una cosa 02:57:26
lo de dividir 02:57:27
el array 02:57:29
no lo hacías en la función 1 02:57:32
no, aquí en la 02:57:33
función esta lo que he hecho es descartarlo 02:57:36
en esa solo si 02:57:38
pero digo, en la función 02:57:40
en la anterior 02:57:41
en la de arriba 02:57:43
ah perdón 02:57:44
si, si, si 02:57:46
claro, tengo que sacarlo de aquí 02:57:48
tienes razón Germán, gracias 02:57:50
Sí, sí, perfecto, gracias. Entonces, le doy ahí, instanciar, instanciado con éxito, y inyecto unos cuantos valores aquí. ¿Veis? Y ya va apareciendo ahí la temperatura exterior e interior. ¿Veis? El gráfico. Esto, idealmente, pues lo estaría mandando el SP32. En lugar de hacerlo yo con un inyector, sería el propio SP32 el que lo estaría mandando y estaríamos ya viendo aquí el gráfico en tiempo real. 02:57:51
bueno, son las 7 02:58:21
vamos a ver 02:58:23
os voy a dejar estas máquinas virtuales 02:58:25
hasta el jueves que viene 02:58:27
para que podáis practicar con ellas 02:58:29
luego las borraré 02:58:31
por favor no abuséis 02:58:33
no sé que no vais a abusar de ellas 02:58:34
quiero decir, no las uséis para mandar correos 02:58:37
indeseados ni cosas por el estilo 02:58:39
entonces 02:58:41
nada más, espero que la grabación 02:58:43
os sirva de referencia porque entiendo 02:58:46
que es mucha información y tendréis que irla revisando 02:58:47
poco a poco 02:58:50
y aquí quedo para cualquier consulta 02:58:50
que me queráis hacer 02:58:53
una cosa que el tema 02:58:54
es que para acceder aquí 02:58:57
al nodo de red 02:58:59
no te pide ni usuario ni contraseña 02:59:00
yo me puedo conectar a cualquiera 02:59:02
de los compañeros 02:59:05
claro Germán, por eso os digo que no abuséis 02:59:06
eso luego 02:59:09
lo digo como concepto 02:59:10
que poca seguridad tiene 02:59:13
no, porque por defecto 02:59:15
siempre viene todo sin seguridad 02:59:17
pero tú te vas a Node.js Security 02:59:19
y vas a encontrar ahí cómo añadirle 02:59:21
según el tipo de seguridad que tú quieras 02:59:23
si quieres por contraseña, si quieres por 02:59:25
certificados, entonces aquí te 02:59:27
explica cómo tendrías que ir al contenedor 02:59:29
qué tendrías que ir añadiendo 02:59:31
para tener seguridad 02:59:32
incluso hacer seguridad por OAuth 02:59:34
lo que tú necesites 02:59:37
pero sí, por defecto vienen todos 02:59:38
desprotegidos 02:59:41
¿para qué? para que sea lo más fácil 02:59:43
posible ponerte a trabajar 02:59:45
Luego ya lo aseguras como tú quieres. Grafana, por ejemplo, sí viene protegido. Grafana vais a ver que si intentáis acceder a Grafana, lo primero que os va a pedir es cambiar la contraseña. Y en Mosquito igual. Mosquito viene sin ninguna protección. Habría que hacer lo mismo. Irse a la documentación de Mosquito y ver qué tipo de seguridad quieres aplicar y aplicarla. Puede ser lo más fácil es utilizar contraseñas y ya está. 02:59:47
Muy bien 03:00:11
Vale 03:00:16
Pues nada, paro yo la grabación si os parece 03:00:18
Bien, ok 03:00:21
Gracias 03:00:22
Y la subo al aula habitual a lo largo de mañana 03:00:23
Seguiremos con la grabación 03:00:27
Idioma/s:
es
Materias:
Tecnología
Etiquetas:
Tecnología
Niveles educativos:
▼ Mostrar / ocultar niveles
  • Formación Profesional
    • Ciclo formativo de grado básico
      • Primer Curso
      • Segundo Curso
    • Ciclo formativo de grado medio
      • Primer Curso
      • Segundo Curso
    • Ciclo formativo de grado superior
      • Primer Curso
      • Segundo Curso
Autor/es:
ISMIE
Subido por:
Mediateca ismie
Licencia:
Reconocimiento - No comercial - Compartir igual
Visualizaciones:
17
Fecha:
24 de febrero de 2025 - 10:57
Visibilidad:
Público
Centro:
ISMIE
Duración:
3h′ 00′ 29″
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
944.99 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid