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 pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
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
PC
00:40:34
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
jw
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
no
00:46:09
vale
00:46:09
ya
00:46:10
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
IP
00:47:02
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
wc
00:47:38
a7
00:47:40
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
sí
00:49:29
a mí me pasa
00:49:30
si la metes mal
00:49:31
te echa
00:49:32
ah
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
en
00:49:51
root
00:49:56
eh
00:50:00
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
y
00:52:27
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
si
01:01:08
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
un
01:19:49
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
y
01:32:33
le digo
01:32:34
le doy un nombre aquí arriba
01:32:37
le llamo por ejemplo Node.Ref
01:32:40
01
01:32:42
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
es
01:32:57
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
Ya
01:45:15
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
sí
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
sí
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
sí
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
02:35:36
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:
- 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
- Ciclo formativo de grado básico
- 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