Orange Pi Zero, PM2, Keymetrics, Node.js et Edge Computing …
La société Shenzhen Xunlong Software Limited a sorti plusieurs modèles de sa carte Orange Pi Zero et notamment la version 2 plus dotée d’un processeur ARM Allwinner H5 Cortex-A53 64 Bits (et d’un processeur graphique Mali450) avec 256 ou 512 Mo de RAM : http://linux-sunxi.org/H5
https://fr.aliexpress.com/store/1553371?spm=a2g0w.search0104.3.3.D8KF1L
J’avais posté par ailleurs un article détaillant un retour sur les méthodes de conception de ce type de carte au sein de cette entreprise dans le réseau social Mastodon : http://www.minimachines.net/a-la-une/orange-pi-steven-zhao-52858

Je dispose de deux modèles 32 et 64 Bits de l’Orange Pi Zero ici :

Je pars donc du dernier modèle pour y installer un OS Linux dédié :

La société Shenzhen Xunlong Software Limited propose sur son portail web dédié pour ce type de carte, différents OS détaillés ci-dessous :

Mais vue la taille et les ressources très réduites de ce type de carte, je préfère m’orienter vers une micro-distribution Linux nommée DietPi qui est en fait un fork fortement allégé de Raspbian Linux (lui même issu de Debian 8 Jessie) :

DietPi se retrouve disponible pour différentes cartes et offre la possibilité de se pré-configurer en mode Stateless (sans cable série ni écran) :

Je sélectionne la version correspondante à la carte Orange Pi Zero Plus 2 (H5) :

Je décompacte l’archive pour retrouver l’image à flasher sur une SD-Card :

On observe que c’est bien une version ARM 64 Bits de DietPi Linux qui est utilisée ici …
et je réutilise encore une fois l’utilitaire Open Source Etcher de Resin.io pour flasher ma carte :


Grâce à un fichier de configuration présent sur la SD-Card, je peux préparer mes paramètres Wifi pour permettre à l’Orange Pi Zero de se connecter à mon réseau local :

Je fais la même chose avec ma deuxième carte Orange Pi Zero 32 Bits :

Via un scan Nmap, je récupère l’adresse IP sur laquelle je peux me connecter en SSH (via un petit serveur Dropbear => https://matt.ucc.asn.au/dropbear/dropbear.html ):

Avec ces ressources locales :

Je peux récupérer pour ma petite expérience le moteur Node.js pour les architectures ARMv8 64 Bits :

que j’installe sur la carte :

Et je peux y installer PM2 de la société Keymetrics (startup Française qui a fait la une récemment après avoir été financée par un grand fond d’investissement => https://business.lesechos.fr/entrepreneurs/financer-sa-creation/0211780849550-runa-ce-fonds-russe-qui-investit-a-nouveau-dans-la-french-tech-305738.php ) via NPM :

PM2 est une sorte de couteau Suisse du clustering pour des applications Node.js et relié à sa plateforme SaaS Keymetrics pour notamment du monitoring et de la supervision :



J’y adjoins PM2 Monit (agent de monitoring local) :

Et je récupère localement la démo FranceConnect Particulier (FCP) depuis mon dépôt sur Github :

Lancement d’un cluster local de 3 processus Node.js qui chacun feront tourner l’appli démo de FCP sous forme d’un processus :

PM2 via un mécanisme interne de load balancing retransmet le port d’écoute par défaut de l’appli FCP sur le port TCP 3001 :

Et cela ne me coûte à peine 200 Mo de mémoire vive :

Via mon adresse IP locale, je peux récupérer l’URL en accès local de l’appli :

Je peux installer un serveur Nginx sur la carte pour jouer le rôle de reverse proxy sur le port TCP 80 :


Mais je vais réutiliser un utilitaire plus simple ici à savoir reverse-proxy (module présent dans la registry npmjs.com) :

installation et configuration locale de “reverse-proxy” :


Je récupère alors ma page sur le port 80 avec mon adresse IP locale :



Mais j’ai envie que cette page soit accessible depuis l’extérieur. Je dispose de plusieurs solutions pour ce cas de figure comme Pagekite, Portmap.io, Serveo ou comme la fois précédente Dataplicity. Mais j’opte pour le très connu Ngrok :

avec une URL d’accès depuis internet :

Via un token d’accès et PM2, je fais la liaison entre la carte Orange Pi Zero (dans mon réseau local) vers la plateforme SaaS Keymetrics qui me fournit via PM2 Monit les principales métriques des applis en exécution localement :


Et je dispose d’un contrôle distant sur ses applis Node.js en exécution locale via le portail de Keymetrics (comme avec Cayenne) :

Je peux scaler mon appli Node.js dans ce cluster local :

Avec un contrôle du monitoring activable localement :



Et visualisation des métriques et éventuellement des alertes (à configurer via des Triggers) reliées à Slack par exemple :


Je me retrouve dans un scénario d’Edge Computing (voire de Fog Computing si des communications se mettent en place entre les deux cartes Orange Pi Zero), sachant que pour cette expérience c’est ma passerelle Wifi locale qui joue le rôle de passerelle IoT (IoT Gateway) :


Avec notamment ce petit test du “Physical Web” en utilisant un beacon qui va diffuser localement l’URL d’accès à l’appli FCP Démo via le protocole Eddystone (un scénario qui ressemble de près à ce que j’avais présenté lors du dernier sommet OGP à Paris) dans un contexte de diffusion par exemple d’information aux citoyens :

Et mon émulateur mobile restitue l’appli sur le navigateur web :

On peut imaginer un autre scénario d’un pipeline de mise à jour des applis sur les cartes Orange Pi Zero via Jenkins ou Gitlab CI comme cet exemple (des sortes de pipelines IoT) :

A suivre ! …
Quelques liens sur ce sujet :
http://www.blog-nouvelles-technologies.fr/95275/orange-pi-zero-mini-pc-quadricoeur-moins-de-7e/
https://developers.google.com/beacons/
https://google.github.io/physical-web/
https://techcrunch.com/2017/08/03/edge-computing-could-push-the-cloud-to-the-fringe/
Originally published at telegra.ph on August 7, 2017.