- Visión general de Jelina
- JelinaCloud
- Ejemplos de configuración
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 utilizado
Sección titulada «Dispositivo utilizado»| 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 |
Procedimiento básico
Sección titulada «Procedimiento básico»
Publicar una versión
Sección titulada «Publicar una versión»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.

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.
Implementar servicios en contenedores
Sección titulada «Implementar servicios en contenedores»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:
- Escribe la configuración.

version: 2services: #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'-
Pulsa «Siguiente → Guardar» para guardar la versión.
-
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.

- Después de cargar, selecciona «operation → Publicar» en la esquina superior derecha para publicar la nueva versión.
Implementar servicios locales
Sección titulada «Implementar servicios locales»- 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 10sfor((i=1;i<=100;i++));do if [ $(expr $i % 10) == 0 ] then echo "hello world $i" sleep 10done#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 servicioecho "name:$name"Empaqueta helloworld.sh como helloworld.tar.gz.
- Escribe y guarda la configuración.
version: 2programs: #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- Pulsa el icono de archivo de la lista de servicios y carga el paquete del programa.

- 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.

Seleccionar la versión del dispositivo
Sección titulada «Seleccionar la versión del dispositivo»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».
Comprobar la implementación
Sección titulada «Comprobar la implementación»Nota: el dispositivo debe estar conectado y comunicarse con normalidad.
Comprobar desde JelinaCloud
Sección titulada «Comprobar desde JelinaCloud»Una vez iniciados los servicios, consulta su estado en la lista del panel del dispositivo.

Los cuatro estados habituales son:
- Running: servicio en ejecución.
- Failed: ejecución fallida.
- Restarting: servicio reiniciándose.
- Exited: servicio finalizado.
Comprobar en el dispositivo
Sección titulada «Comprobar en el dispositivo»- Conecta a la terminal SSH desde el acceso remoto de los detalles del dispositivo o utiliza un cliente SSH existente.

Comprobar los contenedores
Sección titulada «Comprobar los contenedores»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.
Comprobar los servicios locales
Sección titulada «Comprobar los servicios locales»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.
Comprobar las funciones de los servicios
Sección titulada «Comprobar las funciones de los servicios»Comprobar el servicio MySQL
Sección titulada «Comprobar el servicio MySQL»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.
Comprobar el script local helloworld
Sección titulada «Comprobar el script local helloworld»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:

Consola remota:
Esta es una salida de ejemplo; los números dependen del avance de la ejecución:
hello world 10hello world 20...name:jackAl 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
Sección titulada «Configuración»- Configuración de la flota: todos los dispositivos la siguen de forma predeterminada.

«Dispositivos cubiertos» indica cuáles utilizan esta configuración.
- Configuración del dispositivo: cada dispositivo puede establecer sus propios valores.

Variables de servicios
Sección titulada «Variables de servicios»-
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.

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

-
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.

Notas adicionales
Sección titulada «Notas adicionales»-
El dispositivo solo ejecuta los servicios incluidos en la versión actual.
-
Cambiar variables compartidas o privadas reinicia los servicios que se ejecutan en los dispositivos afectados.
-
Un servicio local pasa a
Exitedcuando termina. -
La política predeterminada de los servicios locales es
restart: always. Conalways, el sistema intenta reiniciar los servicios interrumpidos. Los reinicios repetidos dentro de un intervalo pueden provocar el estadoFailed. 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-
Las imágenes de contenedor no públicas y los servicios locales requieren cargar paquetes antes de publicar la versión.
-
Un servicio local de una nueva versión solo conserva los datos del anterior si mantiene el mismo nombre.
-
Para persistir datos de servicios en contenedores, declara un volumen al editar
compose.yml. No se admiten montajes mediante rutas específicas. -
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 concontainer_nameencompose.yml. -
El modo de desarrollador permite una configuración más amplia que el modo sin desarrollo.
-
Si Volumes está vacío en
compose.yml, no se ha definido ningún volumen; esto no impide la implementación normal del contenedor.