Ir al contenido
JelinaJelina DocumentationDocumentación técnica
Volver al sitio oficial

Ejemplo de implementación de aplicaciones

Este artículo explica cómo implementar aplicaciones en dispositivos mediante JelinaCloud.

Las capturas conservan material real existente del producto y muestran configuraciones y accesos a operaciones. Los nombres de dispositivos, versiones y servicios son datos del ejemplo; utiliza los de tu proyecto.

Antes de implementar, instala JelinaOS e incorpora el dispositivo a una flota de JelinaCloud. Consulta Añadir dispositivos.

Dispositivo Versión de JelinaOS Versión de Jelinvisor Versión del kernel
I.MX8MP EBC-RS08-A2 imx8mmebcrs08a2 Debian-10 1.0.4 1.0.9 5.4.70-g62c07ec2f origin

Flujo de implementación de aplicaciones

Abre la organización y la flota del dispositivo. Selecciona «Versiones → Nueva versión», elige el modo de edición y pulsa Siguiente para abrir el editor de compose.yml.

Entrada para crear una Release en la flota

Elegir el modo de edición:

El modo de desarrollador permite editar Compose; el modo sin desarrollo utiliza formularios. A continuación se muestran ambos.

Ejemplo con el modo de desarrollador

En el editor de compose.yml, escribe la configuración de los servicios. Una misma versión puede incluir servicios en contenedores y locales. Se explican por separado para facilitar la lectura.

Puedes buscar las imágenes necesarias en Docker Hub (https://hub.docker.com/search?q=). Consulta la documentación de cada imagen para conocer su procedimiento de implementación.

Ejemplo con un servicio MySQL:

  1. Escribe la configuración.

Configuración de aplicaciones en modo de desarrollador

version: 2
services:
#Nombre del servicio
db:
# mysql: nombre de imagen; latest selecciona la última versión y puede omitirse para obtenerla de Docker Hub de forma predeterminada. También puede indicarse una versión, como mysql:5.7
image: mysql:latest
#Variables de entorno
environment:
# Contraseña de acceso del superadministrador MySQL
MYSQL_ROOT_PASSWORD: '123456'
#Puertos mapeados entre anfitrión y contenedor
ports:
- '3306:3306'
  1. Pulsa «Siguiente → Guardar» para guardar la versión.

  2. Pulsa el icono de archivo de la lista de servicios y carga el paquete. Las imágenes públicas pueden descargarse por su nombre desde Docker Hub, por lo que la carga es opcional.

Lista de servicios y carga de paquetes de la Release

  1. Después de cargar, selecciona «operation → Publicar» en la esquina superior derecha para publicar la nueva versión.
  1. Crea un script sencillo helloworld.sh para probar.

El script recorre los números del 1 al 100. Cuando el resto de dividir el número entre 10 es cero, muestra hello world y espera 10 segundos. Al terminar, lee la variable name del dispositivo y muestra su valor.

#!/bin/bash
#Recorrer de 1 a 100; cuando el resto al dividir entre 10 sea 0, mostrar hello world y esperar 10s
for((i=1;i<=100;i++));
do
if [ $(expr $i % 10) == 0 ]
then
echo "hello world $i"
sleep 10
done
#Leer la variable de dispositivo name, establecida en jack, y mostrarla. El usuario configura name en variables comunes de flota o privadas del dispositivo. Consulta la sección Configuración del dispositivo y variables de servicio
echo "name:$name"

Empaqueta helloworld.sh como helloworld.tar.gz.

  1. Escribe y guarda la configuración.
version: 2
programs:
#Nombre del servicio
helloworld:
program: helloworld
#Política de reinicio: reiniciar si falla el servicio
restart: on-failure
#Comando de inicio del servicio
command: /usr/bin/bash helloworld.sh
  1. Pulsa el icono de archivo de la lista de servicios y carga el paquete del programa.

Carga de un paquete de aplicación nativa

  1. Después de cargar, selecciona «operation → Publicar» en la esquina superior derecha.

Modo sin desarrollo

Este modo permite configurar los servicios introduciendo únicamente datos básicos, como su nombre y comando de inicio:

Pulsa «Añadir datos», haz doble clic en «–» para editar y rellena la configuración.

Pulsa «Siguiente» para guardar. La carga de paquetes y la publicación siguen los mismos pasos que en el modo de desarrollador.

Configuración de servicios mediante formularios

Las flotas siguen la versión más reciente por defecto, pero el cambio en el dispositivo puede tardar unos 15 minutos. Puedes seleccionar manualmente la versión para acelerar el proceso.

En el resumen del dispositivo, selecciona «operation → Establecer versión» en la esquina superior derecha. Elige la nueva versión en la ventana y pulsa «Establecer versión».

Nota: el dispositivo debe estar conectado y comunicarse con normalidad.

Una vez iniciados los servicios, consulta su estado en la lista del panel del dispositivo.

Versiones actual y deseada, estado de servicios y registros

Los cuatro estados habituales son:

  • Running: servicio en ejecución.
  • Failed: ejecución fallida.
  • Restarting: servicio reiniciándose.
  • Exited: servicio finalizado.
  1. Conecta a la terminal SSH desde el acceso remoto de los detalles del dispositivo o utiliza un cliente SSH existente.

Acceso remoto al dispositivo en JelinaCloud

Después de conectar, ejecuta docker ps para consultar los contenedores en ejecución.

Comprueba que el contenedor esperado aparezca con STATUS igual a Up. Si no aparece, revisa la Release deseada, la descarga de la imagen y los registros.

El nombre del contenedor sigue el formato Nombre del servicio _ ID de imagen _ ID de versión _ Commit de versión.

Comprueba que el servicio db del ejemplo esté en ejecución.

Utiliza journalctl -u jelina-jelinvisor -f para consultar los registros y comprobar el estado de la aplicación.

Contrasta los eventos de inicio y salida de los servicios en los registros del agente con el estado del panel.

El dispositivo informa periódicamente. Comprueba el intervalo actual y el estado real del servicio para confirmar su funcionamiento.

Abre Navicat e intenta conectarte remotamente al MySQL implementado. Introduce la dirección del dispositivo, la cuenta administradora, la contraseña de MySQL de compose.yml y el puerto:

Parámetro Valor del ejemplo
Dirección IP accesible del dispositivo
Puerto Puerto del host asignado en Compose, 3306 en este ejemplo
Usuario root o una cuenta de aplicación creada previamente
Contraseña Contraseña de la base de datos en la configuración actual

Pulsa «Probar conexión». Si se conecta correctamente, la implementación y el acceso funcionan.

También puedes configurar otros valores del entorno de MySQL, como cuentas de aplicación, mediante variables privadas del dispositivo o compartidas de la flota.

Después de iniciar el servicio, su salida aparece tanto en los registros del panel como en la consola remota.

Panel del dispositivo en JelinaCloud:

Estado y registros de los servicios en el panel

Consola remota:

Esta es una salida de ejemplo; los números dependen del avance de la ejecución:

hello world 10
hello world 20
...
name:jack

Al finalizar, name:jack indica que el script ha leído la variable de servicio name. Si el valor no es el esperado, comprueba su ámbito y su contenido real.

Configuración del dispositivo y variables de servicios

Sección titulada «Configuración del dispositivo y variables de servicios»

Prioridad: configuración del dispositivo > configuración de la flota

  • Configuración de la flota: todos los dispositivos la siguen de forma predeterminada.

Configuración compartida de dispositivos de la flota

«Dispositivos cubiertos» indica cuáles utilizan esta configuración.

  • Configuración del dispositivo: cada dispositivo puede establecer sus propios valores.

Configuración individual y estado de sobrescritura

  • Variables compartidas de la flota: por defecto, las variables de entorno de todos los servicios siguen estos valores.

    Por ejemplo, definir a, b y name para todos los servicios hace que estén disponibles en todos los dispositivos.

Variables compartidas de servicios de la flota

También puedes configurar variables para un servicio de imagen concreto:

Añadir variables para un servicio específico

  • Variables privadas del dispositivo: cada dispositivo puede definir sus propios valores. Pulsa «override» para sobrescribir los de la flota.

    Por ejemplo, puedes cambiar name, a y b en un dispositivo. Los nuevos valores solo le afectan a él, sin modificar los demás.

Sobrescritura de variables compartidas en un dispositivo

  1. El dispositivo solo ejecuta los servicios incluidos en la versión actual.

  2. Cambiar variables compartidas o privadas reinicia los servicios que se ejecutan en los dispositivos afectados.

  3. Un servicio local pasa a Exited cuando termina.

  4. La política predeterminada de los servicios locales es restart: always. Con always, el sistema intenta reiniciar los servicios interrumpidos. Los reinicios repetidos dentro de un intervalo pueden provocar el estado Failed. Selecciona la política adecuada entre las opciones admitidas:

restart: Opciones: no,on-success,on-failure,on-abnormal,on-watchdog,on-abort,always; predeterminado: always
  1. Las imágenes de contenedor no públicas y los servicios locales requieren cargar paquetes antes de publicar la versión.

  2. Un servicio local de una nueva versión solo conserva los datos del anterior si mantiene el mismo nombre.

  3. Para persistir datos de servicios en contenedores, declara un volumen al editar compose.yml. No se admiten montajes mediante rutas específicas.

  4. El nombre del contenedor está fijado como Nombre del servicio _ ID de imagen _ ID de versión _ Commit de versión, por lo que no puede sustituirse con container_name en compose.yml.

  5. El modo de desarrollador permite una configuración más amplia que el modo sin desarrollo.

  6. Si Volumes está vacío en compose.yml, no se ha definido ningún volumen; esto no impide la implementación normal del contenedor.