- Visão geral do Jelina
- JelinaCloud
- Exemplos de configuração
Exemplo de implantação de aplicações em dispositivos
Este artigo explica como implantar aplicações em dispositivos pelo JelinaCloud.
As capturas abaixo utilizam materiais reais existentes do produto para mostrar as configurações e os pontos de acesso às operações. Nomes de dispositivos, versões e serviços são dados do exemplo; substitua-os conforme seu projeto.
Antes de implantar aplicações, instale o JelinaOS no dispositivo e adicione-o a uma frota do JelinaCloud. Consulte adicionar dispositivos.
Dispositivo utilizado
Seção intitulada “Dispositivo utilizado”| Dispositivo | Versão do JelinaOS | Versão do Jelinvisor | Versão do kernel |
|---|---|---|---|
| I.MX8MP EBC-RS08-A2 | imx8mmebcrs08a2 Debian-10 1.0.4 | 1.0.9 | 5.4.70-g62c07ec2f origin |
Fluxo básico de operação
Seção intitulada “Fluxo básico de operação”
Publicar uma versão
Seção intitulada “Publicar uma versão”Acesse a organização e a frota associadas ao dispositivo, clique em Versões → Nova versão, selecione o modo de edição e avance para o editor de compose.yml.

Escolher o modo de edição:
O modo desenvolvedor permite editar a configuração compose. O modo não desenvolvedor permite preencher os serviços em um formulário. Veja abaixo exemplos das duas interfaces.
Exemplo com o modo desenvolvedor
No editor de compose.yml, escreva a configuração dos serviços da aplicação. Uma versão pode incluir serviços em contêiner e serviços nativos no mesmo arquivo compose.yml. Para facilitar a explicação, apresentaremos a implantação de cada tipo separadamente.
Implantar serviços em contêineres
Seção intitulada “Implantar serviços em contêineres”Você pode acessar o catálogo de imagens do Docker Hub (https://hub.docker.com/search?q=) para encontrar as imagens de serviço necessárias. Consulte a documentação da página de cada imagem para os detalhes de implantação.
Usaremos como exemplo a implantação do serviço em contêiner Mysql:
- Escreva o arquivo de configuração.

version: 2services: #Nome do serviço db: # mysql: nome da imagem; latest: versão mais recente, opcional; se omitido, obtém a imagem mais recente do dockerhub por padrão. Também é possível especificar uma versão, como mysql:5.7 image: mysql:latest #Variáveis de ambiente environment: # Senha de login do superadministrador mysql MYSQL_ROOT_PASSWORD: '123456' #Portas mapeadas entre host e contêiner ports: - '3306:3306'-
Clique em Avançar → Salvar para salvar a versão em edição.
-
Clique no ícone de arquivo da lista de serviços para enviar o pacote do programa. Serviços Image públicos podem ser obtidos pelo Docker usando o nome da imagem; nesse caso, o upload não é necessário.

- Após concluir o upload, clique em operation → Publicar, no canto superior direito, para publicar a nova versão.
Implantar serviços nativos
Seção intitulada “Implantar serviços nativos”- Crie um script simples helloworld.sh para teste.
O script percorre os números de 1 a 100. Sempre que o resto da divisão por 10 for zero, exibe hello world no console e aguarda 10s. Ao terminar, lê o valor da variável name do dispositivo e o exibe no console.
#!/bin/bash#Percorre de 1 a 100; quando o resto da divisão por 10 é 0, exibe hello world no console e pausa por 10sfor((i=1;i<=100;i++));do if [ $(expr $i % 10) == 0 ] then echo "hello world $i" sleep 10done#Obtém a variável name do dispositivo, definida como jack, e a exibe no console. Observação: name é definida pelo usuário nas variáveis públicas da frota ou privadas do dispositivo. Consulte a seção ##Sobre configurações do dispositivo e variáveis de serviço## abaixoecho "name:$name"Depois de criar o script, empacote helloworld.sh em helloworld.tar.gz.
- Escreva e salve o arquivo de configuração.
version: 2programs: #Nome do serviço helloworld: program: helloworld #Define a política de reinicialização do serviço: reiniciar em caso de falha restart: on-failure #Comando de inicialização do serviço command: /usr/bin/bash helloworld.sh- Clique no ícone de arquivo da lista de serviços e envie o pacote do programa.

- Após concluir o upload, publique a versão em operation → Publicar, no canto superior direito.
Modo não desenvolvedor
Esse modo foi criado para usuários sem experiência em desenvolvimento. Basta informar dados básicos, como nome do serviço e comando de inicialização, para configurar o serviço. A edição funciona assim:
Clique em Adicionar dados, dê um clique duplo em – para editar e preencha a configuração do serviço.
Ao terminar, clique em Avançar para salvar. O upload dos pacotes e a publicação da versão seguem as mesmas etapas do modo desenvolvedor.

Definir a versão do dispositivo
Seção intitulada “Definir a versão do dispositivo”Por padrão, a frota acompanha automaticamente a versão mais recente, mas a transição do dispositivo pode levar cerca de 15 minutos. Para acelerar a mudança, podemos definir a versão manualmente.
Na visão geral do dispositivo, clique em operation → Definir versão, no canto superior direito. Na janela exibida, selecione a versão recém-publicada e clique em Definir versão.
Confirmar o estado da implantação
Seção intitulada “Confirmar o estado da implantação”Atenção: o dispositivo precisa estar conectado à rede e se comunicando normalmente.
Verificar na interface do JelinaCloud
Seção intitulada “Verificar na interface do JelinaCloud”Após iniciar os serviços, consulte seus estados na lista de serviços do painel do dispositivo.

Estes são quatro estados comuns:
- Running: serviço em execução.
- Failed: falha na execução do serviço.
- Restarting: serviço sendo reiniciado.
- Exited: serviço encerrado.
Verificar no dispositivo
Seção intitulada “Verificar no dispositivo”- Abra o terminal SSH pelo acesso remoto da página de detalhes do dispositivo no JelinaCloud ou use um cliente SSH existente.

Verificar a implantação do contêiner
Seção intitulada “Verificar a implantação do contêiner”Após conectar, execute docker ps no console para consultar os serviços de contêiner em execução:
Confirme que o contêiner desejado aparece na lista e que STATUS exibe Up. Caso contrário, investigue o Release de destino, o estado do download da imagem e os logs do contêiner.
Nota: o nome do contêiner é definido como nome_do_serviço _ ID_da_imagem _ ID_da_versão _ Commit_da_versão.
Confirme na lista de contêineres que o serviço db deste exemplo está em execução.
Verificar a implantação do serviço nativo
Seção intitulada “Verificar a implantação do serviço nativo”Você também pode executar journalctl -u jelina-jelinvisor -f para consultar os logs do dispositivo e verificar o estado da aplicação:
Verifique os registros de início e encerramento dos serviços nos logs do agente do dispositivo e compare-os com o estado exibido no painel em nuvem.
O dispositivo informa seu estado periodicamente. Considere o intervalo de atualização configurado e o estado real dos serviços para confirmar que o serviço desejado está funcionando.
Verificar o funcionamento dos serviços
Seção intitulada “Verificar o funcionamento dos serviços”Verificar o contêiner MySQL em operação
Seção intitulada “Verificar o contêiner MySQL em operação”Abra o Navicat e tente conectar remotamente à aplicação mysql implantada no dispositivo. Informe o endereço, a conta de administrador, a senha de administrador do mysql configurada em compose.yml e a porta:
| Item de conexão | Valor neste exemplo |
|---|---|
| Endereço | Endereço IP acessível do dispositivo |
| Porta | Porta do host mapeada no compose; neste exemplo, 3306 |
| Usuário | root ou um usuário de aplicação já criado |
| Senha | Senha do banco de dados na configuração atual da aplicação |
Clique em Testar conexão. A confirmação de conexão bem-sucedida indica que a aplicação foi implantada e está acessível para uso.
Você também pode definir outras configurações de ambiente do MySQL nas variáveis privadas do dispositivo ou compartilhadas da frota, como a conta de usuário do mysql.
Verificar o script nativo helloworld em operação
Seção intitulada “Verificar o script nativo helloworld em operação”Após iniciar o serviço nativo, a saída do helloworld aparece nos logs do painel do dispositivo no JelinaCloud e na saída do dispositivo pelo console remoto:
Painel do dispositivo no JelinaCloud:

Console remoto:
A seguir está uma saída de exemplo do script. Os números variam conforme o andamento da execução:
hello world 10hello world 20...name:jackA saída name:jack no final do script indica que ele leu a variável name configurada para o serviço. Se o valor não for o esperado, verifique o escopo e o valor efetivo da variável.
Configurações do dispositivo e variáveis de serviço
Seção intitulada “Configurações do dispositivo e variáveis de serviço”Prioridade: configuração do dispositivo > configuração da frota
Configurações
Seção intitulada “Configurações”- Configuração da frota: por padrão, todos os dispositivos da frota utilizam essa configuração.

Dispositivos abrangidos: indica quais dispositivos da frota utilizam essa configuração.
- Configuração do dispositivo: cada dispositivo pode definir individualmente os valores de suas configurações.

Variáveis de serviço
Seção intitulada “Variáveis de serviço”-
Variáveis de serviço compartilhadas da frota: por padrão, as variáveis de ambiente dos serviços de todos os dispositivos seguem essa configuração.
Por exemplo, se as variáveis compartilhadas a, b e name forem definidas para todos os serviços, todos os dispositivos da frota terão essas três variáveis.

Também é possível configurar variáveis de ambiente para um serviço de imagem específico:

-
Variáveis de serviço privadas do dispositivo: cada dispositivo pode definir seus próprios valores. Na página de operações, clique em override para sobrescrever os valores da frota e criar uma configuração específica para o dispositivo.
Por exemplo, ao clicar em override, você pode redefinir name, a e b. Os novos valores se aplicam apenas ao dispositivo atual, sem afetar os demais dispositivos da frota.

Outras observações
Seção intitulada “Outras observações”-
O dispositivo executa apenas os serviços presentes na versão atual.
-
Alterar variáveis compartilhadas da frota ou privadas do dispositivo reinicia os serviços em execução no dispositivo.
-
Após terminar a execução, o serviço nativo passa ao estado
Exited. -
A política de reinício padrão dos serviços nativos é
restart: always. Com a políticaalways, o sistema tenta reiniciar o serviço após uma interrupção anormal. Se o serviço reiniciar repetidamente dentro de um intervalo, seu estado será consideradoFailed. Há várias políticas de reinício disponíveis, que podem ser escolhidas conforme a necessidade.
restart: opções: no,on-success,on-failure,on-abnormal,on-watchdog,on-abort,always; padrão: always-
Serviços em contêiner com imagens não públicas e serviços nativos exigem o upload do pacote da aplicação; caso contrário, o Release associado não pode ser publicado.
-
Os dados de um serviço nativo da versão anterior só são preservados quando o serviço da nova versão tem o mesmo nome.
-
Para persistir os dados de serviços em contêineres, defina a montagem de volumes ao editar
compose.ymlna criação do Release. Não há suporte a montagem por caminho especificado. -
O nome do contêiner é definido como
nome_do_serviço _ ID_da_imagem _ ID_da_versão _ Commit_da_versão. Portanto, não é possível redefini-lo comcontainer_nameno arquivocompose.yml. -
O modo desenvolvedor oferece configurações mais abrangentes do que o modo não desenvolvedor.
-
Se o valor de Volumes em
compose.ymlestiver vazio, nenhum volume de dados foi definido. Isso não impede a implantação normal do contêiner.