Carte PINE A64, Node.js, Balena, PM2 et ResinOS (Partie 1) …

Image for post
Image for post

L’équipe de Resin.io a mis à disposition son système ResinOS pour favoriser la gestion de flottes de périphériques IoT et la mise en oeuvre du CI/CD vers ces dernières.

Image for post
Image for post
Image for post
Image for post

Je pars d’une carte PINE A64 avec 2 Go de RAM :

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

Et au préalable, je vais charger la dernière version Ubuntu 18.04 en ARM 64 Bits spécifiquement pour cette carte :

Image for post
Image for post

et avec une carte SD, j’utilise Etcher pour charger cette image Ubuntu 18.04 :

Image for post
Image for post

Si on ne dispose du connecteur wifi, il faut utiliser une passerelle vers son réseau wifi (ou sa connection 4G dans mon cas) via le connecteur Ethernet de la carte :

Image for post
Image for post
Image for post
Image for post

Je me connecte en SSH vers cette carte :

Image for post
Image for post

J’y installe le moteur Docker CE :

Image for post
Image for post
Image for post
Image for post

Le moteur Docker est fonctionnel et je me rends alors vers la plateforme Resin.io pour charger ResinOS (mais comme la carte n’est pas officiellement prise en charge, ce sera sous la forme d’une image Docker) :

Image for post
Image for post
Image for post
Image for post

Le principe de fonctionnement pour le chargement d’une application (en outre ici le démonstrateur FranceConnect Agent codé avec Node.js) suit ce principe (même si Docker est remplacé par Balena) :

Image for post
Image for post

Je charge donc l’image de ResinOS sur la carte et via le fichier de configuration fourni par la plateforme, je lance cette image via le moteur Docker local :

Image for post
Image for post
Image for post
Image for post

qui est active :

Image for post
Image for post

La carte apparait alors active sur la tableau de bord de Resin.io :

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

Comme pour toute flotte de périphériques IoT, on peut la géolocaliser via le tableau de bord :

Image for post
Image for post

On voit alors que c’est le moteur Balena et non Docker qui est embarqué au sein de ResinOS (qui tourne sous la forme d’une image Docker dans le cas de cette carte) :

Image for post
Image for post

Pour rappel, Balena est issu du projet Moby de Docker et spécifiquement dédié au contexte IoT :

Image for post
Image for post
Image for post
Image for post

Je peux donc lancer via Balena une image que j’avais chargée sur le Docker Hub du démonstrateur FranceConnect Agent mais pour les machines ARM 64 Bits :

Image for post
Image for post
Image for post
Image for post

et selon ce Dockerfile :

Image for post
Image for post

Je fais donc tourner cette application sur le port HTTP 80 et j’utilise l’endpoint public fourni par Resin.io pour m’y connecter :

Image for post
Image for post
Image for post
Image for post

Test habituel qui fonctionne (comme d’habitude) 😉 …

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

A noter que le moteur Balena peut être aussi installé directement sur la carte PINE A64 :

Image for post
Image for post

Sans ResinOS, je pouvais également lancer cette image du démonstrateur FranceConnect Agent également localement sur la carte :

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

et via le service serveo.net, je pouvais rendre public l’URL du démonstrateur :

Image for post
Image for post
Image for post
Image for post

et l’endpoint public fourni par ce service en ligne :

Image for post
Image for post

Autrement de manière plus classique, il est possible d’utiliser le célèbre NGROK pour le rendre public :

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

via des paquets multi-plateformes :

Image for post
Image for post

Enfin, si je n’ai pas envie d’utiliser des containers mais plutôt nativement vpar exemple un moteur Node.js et PM2 de Keymetrics, on obtient le même résultat. Je clone le dépôt du démonstrateur sur github :

Image for post
Image for post
Image for post
Image for post

J’installe PM2 de Keymetrics et son module de monitoring :

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

et je teste alors son mode cluster pour lancer plusieurs processus en parallèle (en lieu et place ici de containers) …

Image for post
Image for post
Image for post
Image for post

et plusieurs processus sont mis en load-balancing avec un seul port en sortie :

Image for post
Image for post

Localement via la carte, j’ai accès encore une fois au démonstrateur :

Image for post
Image for post

et je réutilise NGROK pour rendre ce démonstrateur accessible sur Internet via l’endpoint public fourni en sortie :

Image for post
Image for post
Image for post
Image for post

et via PM2 j’ai différentes métriques de monitoring accessible sur un tableau de bord de Keymetrics :

Image for post
Image for post
Image for post
Image for post

ou localement sur la carte :

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

et je peux basculer dans des métriques plus avancées dans une logique d’APM via PM2 Plus :

Image for post
Image for post
Image for post
Image for post

Pour finir, la communauté Raspberry Pi a fourni le module Raspberry Pi 3 Compute pour un usage industriel :

Image for post
Image for post

avec un support physique officiel :

Image for post
Image for post

Mais dans l’optique du moteur Balena, un nouveau support est né pour ce module et disponible au nom de Balena Fin :

Image for post
Image for post
Image for post
Image for post

Et l’équipe de Resin.io fournit déjà une image officielle de ResinOS qui lui est dédiée …

Image for post
Image for post

L’équipe de Resin.io propose de nouvelles fonctionnalités autour de son système de gestion de flotte d’objets connectés comme la possibilité de gérer plusieurs périphériques différents en une seule application :

Image for post
Image for post

d’intégrer des microservices notamment au travers du projet open source Flogo :

Image for post
Image for post

ou de générer des tableaux de bord très personnalisés via des partenaires comme Losant :

Image for post
Image for post

Des évolutions à suivre dans le contexte du développement de l’Edge Computing (amené à dépasser en chiffre d’affaires celui du Cloud cette année et qui amènerait au retour de DC de proximité selon certaines analyses) et de l’explosion des objets connectés !

Image for post
Image for post

Liens :

Image for post
Image for post

Above the clouds, the sky is always blue ...

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store