Implantando Node-RED no PLCnext com Docker: Guia Passo a Passo
Um container Docker pode ser usado para rodar um servidor node-RED em um dispositivo PLCnext. Embora o outro método descrito aqui seja um pouco mais rápido. O uso de containers OCI traz algumas vantagens. Por exemplo, ao usar repetidamente os mesmos pacotes para uma aplicação, pode ser útil construir uma imagem padrão e apenas baixá-la do Docker Hub. O Docker também pode ser usado para iniciar e parar o servidor node-red quando quisermos.
Este blog explicará exatamente isso. Primeiro, guiarei você pelo processo de instalação do Docker e verificaremos a instalação. Construiremos uma imagem personalizada com pacotes de nossa preferência pré-instalados com um Dockerfile e criaremos um container a partir da nossa imagem recém-criada. Finalmente, garantiremos que nosso container inicie no boot do controlador e enviaremos nossa imagem para o Dockerhub.
Instalação do Balena Engine
Menti um pouco quando disse que containers Docker podem ser usados para rodar um runtime node-RED em um dispositivo PLCnext. Como você verá, usamos o Balena-engine como engine para rodar containers, mais especificamente usaremos containers OCI (Open Container Initiative). Discutir a nomenclatura nos levaria longe demais para um Makersblog, mas na seção de leitura adicional no final deste blog adicionei alguns links para os interessados.
O procedimento de instalação é bastante fácil e pode ser encontrado aqui para referência completa, mas por razões práticas os comandos também são dados na próxima seção.
Certifique-se de estar logado como usuário root, para criar uma nova senha root digite o seguinte comando no shell e digite sua senha de admin seguida de duas vezes a nova senha root.
sudo passwd root
Faça login como usuário root digitando su seguido da sua senha recém-criada.
Clone o repositório git e vá para a nova pasta
git clone https://github.com/PLCnext/Docker_GettingStarted.gitcd Docker_GettingStarted
Torne o script de setup executável e execute dito script.
chmod +x setup.sh./setup.sh
Obtendo Acesso à Internet dos Seus Containers
Às vezes, durante a instalação, as tabelas nft são configuradas incorretamente. Felizmente, esta é uma correção fácil.
A referência completa pode ser encontrada aqui, mas uma breve descrição do progresso é dada abaixo.
No seu shell digite
ifconfig
A configuração das suas interfaces de rede aparece. Uma delas chamada Balena, anote o endereço Inet desta interface.
Deveria ser algo como: 172.17.0.1
Digite o seguinte comando no seu shell e compare o endereço Inet recebido no passo anterior com a segunda linha no script.
Os dois endereços devem ser iguais, se sim, você pode ir para a próxima seção.
Se não, execute o próximo comando no seu shell e altere o endereço na segunda linha para corresponder ao recebido pelo ifconfig.
nano /etc/nftables/balena.nft
Pare e inicie o balena-engine-daemon para recarregar as tabelas nft.
/etc/init.d/balena stop
/etc/init.d/balena start
Meu Primeiro Container
Para baixar seu primeiro container, use o próximo comando, as flags serão explicadas depois, não se preocupe com elas agora. Agora baixaremos um container node-red sem pacotes personalizados. Se você não precisa de pacotes personalizados, pode parar aqui e navegar para a porta 1880 do controlador.
balena-engine run -d -p 1880:1880 --name nodered --restart always nodered/node-red
Docker Hub
A imagem arm32v7/debian usada na seção anterior foi baixada do Docker Hub.
O Docker Hub é essencialmente um local onde imagens de containers são reunidas e podem ser facilmente baixadas.
Posso recomendar a organização arm32v7, esta organização cria imagens compatíveis com a arquitetura do AXC F 2152.
A organização node-red criou uma imagem compatível com o AXC F 2152, usaremos esta imagem na próxima seção, mas primeiro gostaria de mencionar que se você for usar containers muito, deve criar uma conta no Docker Hub e usar seus repositórios. Você obterá repositórios públicos quase ilimitados e um repositório privado ao criar uma conta gratuita. Resisti a usar o Docker Hub por um tempo, mas me custou muito tempo.
Na última seção deste blog, achatarei um pouco a curva de aprendizado de usar o Docker Hub mostrando como fazer login, re-tag uma imagem e enviar uma imagem para o Docker Hub.
Dockerfile
Um dockerfile é, em certo sentido, a receita para uma imagem docker. Neste blog, usaremos um Dockerfile para criar nossa própria imagem node-red, com os pacotes que precisamos instalados.
A primeira linha de um Dockerfile é quase sempre o comando FROM. Com este comando, definimos uma imagem base a partir da qual construiremos nossa própria imagem.
Após a declaração FROM, começamos a construir nossa imagem. Existem muitos comandos possíveis que podem ser usados em um Dockerfile, mas aqui usaremos apenas RUN.
Uma referência de Dockerfile é fornecida na seção de leitura adicional.
A declaração RUN executará o comando que segue dentro do container que estamos construindo.
Então, para instalar um novo pacote, por exemplo, o pacote SNMP, declaramos: RUN npm install node-red-node-snmp
Após a teoria, vamos construir um Dockerfile. Espero que você ainda esteja em uma sessão SSH (certifique-se de estar de volta no AXC F 2152 e não no container debian de duas seções atrás!).
Você pode criar o Dockerfile com nano e copiar e colar o conteúdo no novo arquivo. Salve (ctrl + s) e saia (ctrl + x).nano Dockerfile
FROM nodered/node-red:latest-minimal
RUN npm install node-red-node-snmp
Agora é hora de construir nossa nova imagem!
balena-engine build . --tag myimage
Quando você receber a mensagem de que a imagem foi tagueada com sucesso, você construiu sua primeira imagem!
Para ver a imagem que você acabou de construir, use o comando: balena-engine images
Rodando Nossa Nova Imagem
Finalmente, estamos prontos para rodar nossa imagem e criar um container a partir dela!
Execute o seguinte comando no shell para rodar o container interativamente.
Interativamente significa que podemos ver no terminal o que está acontecendo dentro do container.
O oposto é detached, marcado com a flag -d
balena-engine run -it -p 1880:1880 --name nodered myimage
Para sair do container e mantê-lo rodando, use ctrl + p ctrl +q
Quando você navegar para o endereço IP do controlador seguido pela porta 1880, o ambiente node red aparece e vemos o pacote snmp instalado!
Iniciando a Imagem no Boot e um Primer sobre Flags do Docker Run
É impraticável inicializar o container manualmente toda vez que o AXC F 2152 é reiniciado. Felizmente, podemos dizer ao Docker para iniciá-lo para nós, e é fácil!
Use apenas o comando listado abaixo. Este também é o momento de obter uma melhor compreensão das flags do docker run usadas. Para começar, uma flag é algo que damos após o comando e começa com -- ou -.
Até agora vimos apenas -it, para rodar um container interativamente e -d para rodar um container detached (em segundo plano).
A flag -p mapeia a porta do container para a porta do host. Primeiro o número da porta do host é declarado, depois o número da porta do container.
Podemos dar um nome ao container com a flag --name. Este nome será mostrado quando você usar balena-engine ps, para listar todos os containers ativos ou balena-engine ps -a para listar todos os containers.
Quando nenhuma flag --name é usada, o balena-daemon atribuirá um nome aleatório ao container.
E por último, mas não menos importante, uma política de restart pode ser atribuída a um container com a flag --restart.
As configurações possíveis podem ser encontradas no link de referência listado nas leituras adicionais.
Por enquanto --restart always fará o truque! Nosso comando será:
balena-engine run -it -p 1880:1880 --name nodered --restart always myimage
Enviando para o Docker Hub
Quando você quiser usar sua imagem em diferentes controladores. É uma boa ideia fazer upload da sua imagem para o Docker Hub.
Pressupondo que você já tenha uma conta e criou um repositório docker, continuaremos. Primeiro, precisaremos fazer login na nossa conta. Isso pode ser feito digitando balena-engine login seguido do seu usuário e senha. Agora é possível baixar imagens de repositórios privados e enviar sua imagem para o Docker Hub.
Para enviar sua imagem para o Docker Hub, é importante acertar o nome. Quando criei um repositório myrep e minha conta de usuário é myaccount, o nome da imagem deve ser myaccount/myrep.
Quando você não nomeou assim ao construir a imagem, você tem que re-tag a imagem usando balena-engine tag oldimagetag newimagetag. No nosso caso, seria:
balena-engine tag myimage myaccount/myrep
Quando nada mais é definido, ele receberá o label latest. É possível adicionar um label adicionando : e um nome de label. Por exemplo:
balena-engine tag myimage myaccount/myrep:alabel
A única coisa que resta é enviar nossa imagem para o Docker Hub com o comando:
balena-engine push myaccount/myrep
Leituras Adicionais e Referências
- PLCnext Docker Getting Started
- What is a Container?
- Dockerfile Reference
- Docker Hub
- Node-RED no Docker Hub
Tecnologia industrial
- Guia Prático de Impressão 3D em Cerâmica: Técnicas, Materiais e Dicas de Design
- Entendendo Corantes Básicos: Usos, Segurança e Aplicações Industriais
- Corantes e Pigmentos Industriais: Guia Completo de Aplicações e Tipos
- Primeiros Passos com TJBot: Construa, Configure e Controle por Voz seu Próprio Robô de IA
- Guia Passo a Passo para Implantar Gateway LoRa RAK 831 no Raspberry Pi 3
- Construa um Gateway LoRa com Módulo RAK831 no Raspberry Pi 3 – Guia Passo a Passo
- Sucesso Duradouro: Lições de Persistência de Abraham Lincoln e Liderança em Manutenção
- IA em Seguros: Guia Prático Inicial para Implementação no Mundo Real
- Tutorial Arduino Iniciante 01: Comece seu Primeiro Projeto
- Otimize Máquinas Cat®: O Guia Definitivo do My.Cat.com