Pular para o conteúdo
JelinaJelina DocumentationDocumentação técnica
Voltar ao site oficial

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 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 de implantação de aplicações — 1

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.

Opção para criar um Release na frota

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.

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:

  1. Escreva o arquivo de configuração.

Exemplo do editor de configuração da aplicação no modo desenvolvedor

version: 2
services:
#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'
  1. Clique em Avançar → Salvar para salvar a versão em edição.

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

Lista de serviços do Release e opção de upload dos pacotes

  1. Após concluir o upload, clique em operation → Publicar, no canto superior direito, para publicar a nova versão.
  1. 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 10s
for((i=1;i<=100;i++));
do
if [ $(expr $i % 10) == 0 ]
then
echo "hello world $i"
sleep 10
done
#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## abaixo
echo "name:$name"

Depois de criar o script, empacote helloworld.sh em helloworld.tar.gz.

  1. Escreva e salve o arquivo de configuração.
version: 2
programs:
#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
  1. Clique no ícone de arquivo da lista de serviços e envie o pacote do programa.

Opção de upload do pacote de aplicação nativa

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

Exemplo de preenchimento dos serviços no modo não desenvolvedor

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.

Atenção: o dispositivo precisa estar conectado à rede e se comunicando normalmente.

Após iniciar os serviços, consulte seus estados na lista de serviços do painel do dispositivo.

Versão atual e de destino, estados dos serviços e logs

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.
  1. Abra o terminal SSH pelo acesso remoto da página de detalhes do dispositivo no JelinaCloud ou use um cliente SSH existente.

Acesso remoto ao dispositivo no JelinaCloud

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.

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.

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:

Área de estado dos serviços e logs no painel do dispositivo

Console remoto:

A seguir está uma saída de exemplo do script. Os números variam conforme o andamento da execução:

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

A 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ção da frota: por padrão, todos os dispositivos da frota utilizam essa configuração.

Configurações compartilhadas dos dispositivos da frota

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.

Configuração de um dispositivo e estado das sobrescritas

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

Lista de variáveis de serviço compartilhadas da frota

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

Adicionar variáveis a um serviço 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.

Sobrescrever variáveis compartilhadas no dispositivo

  1. O dispositivo executa apenas os serviços presentes na versão atual.

  2. Alterar variáveis compartilhadas da frota ou privadas do dispositivo reinicia os serviços em execução no dispositivo.

  3. Após terminar a execução, o serviço nativo passa ao estado Exited.

  4. A política de reinício padrão dos serviços nativos é restart: always. Com a política always, 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á considerado Failed. 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
  1. 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.

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

  3. Para persistir os dados de serviços em contêineres, defina a montagem de volumes ao editar compose.yml na criação do Release. Não há suporte a montagem por caminho especificado.

  4. 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 com container_name no arquivo compose.yml.

  5. O modo desenvolvedor oferece configurações mais abrangentes do que o modo não desenvolvedor.

  6. Se o valor de Volumes em compose.yml estiver vazio, nenhum volume de dados foi definido. Isso não impede a implantação normal do contêiner.