Node-RED op PLCnext deployen met Docker: Stap-voor-stap handleiding
Een Docker-container kan gebruikt worden om een Node-RED-server op een PLCnext-apparaat te draaien. Hoewel de andere methode die hier beschreven staat iets sneller is, biedt het gebruik van OCI-containers voordelen. Bijvoorbeeld bij herhaald gebruik van dezelfde pakketten voor een applicatie kan het handig zijn om een standaardimage te bouwen en deze van Docker Hub te downloaden. Docker kan ook gebruikt worden om de Node-RED-server te starten en te stoppen wanneer we dat willen.
Deze blog legt dit uit. Eerst begeleid ik je door het installatieproces van Docker en controleren we de installatie. Vervolgens bouwen we een custom image met pakketten naar keuze voorgeïnstalleerd met een Dockerfile en maken we een container van onze verse image. Tot slot zorgen we ervoor dat onze container bij opstart van de controller start en pushen we onze image naar Docker Hub.
Installatie van de Balena-engine
Ik heb een beetje gelogen toen ik zei dat Docker-containers gebruikt kunnen worden om een Node-RED-runtime op een PLCnext-apparaat te draaien. Zoals je zult zien, gebruiken we de Balena-engine als engine om containers te draaien, meer specifiek OCI (Open Container Initiative) containers. De nomenclatuur uitleggen zou ons te ver brengen voor een Makersblog, maar in de "Further reading"-sectie aan het einde van deze blog heb ik enkele links toegevoegd voor geïnteresseerden.
De installatieprocedure is redelijk eenvoudig en vind je hier voor volledige referentie, maar voor het gemak zijn de commando's ook in de volgende sectie gegeven.
Zorg dat je ingelogd bent als root-gebruiker. Om een nieuw root-wachtwoord aan te maken, typ het volgende commando in de shell en voer je admin-wachtwoord in, gevolgd tweemaal door het nieuwe root-wachtwoord.
sudo passwd root
Log in als root-gebruiker door su te typen, gevolgd door je zojuist aangemaakte wachtwoord.
Kloon de git-repository en ga naar de nieuwe map:
git clone https://github.com/PLCnext/Docker_GettingStarted.gitcd Docker_GettingStarted
Maak het setup-script uitvoerbaar en voer het uit:
chmod +x setup.sh./setup.sh
Internettoegang voor je containers
Soms worden de nft-tabellen tijdens de installatie verkeerd ingesteld. Gelukkig is dit een makkelijke fix.
De volledige referentiegids vind je hier, maar een korte beschrijving van het proces:
Typ in je shell:
ifconfig
De configuratie van je netwerkinterfaces verschijnt. Er is er een genaamd "Balena", noteer het Inet-adres van deze interface. Dit zou er ongeveer zo uit moeten zien: 172.17.0.1.
Voer het volgende commando in je shell in en vergelijk het Inet-adres uit de vorige stap met de tweede regel in het script. De twee adressen moeten hetzelfde zijn; zo ja, ga dan naar de volgende sectie. Zo nee, voer het volgende commando in en wijzig het adres op de tweede regel zodat het overeenkomt met het adres van ifconfig.
nano /etc/nftables/balena.nft
Stop en start de balena-engine-daemon om de nft-tabellen her te laden.
/etc/init.d/balena stop
/etc/init.d/balena start
Mijn eerste container
Om je eerste container te downloaden, gebruik het volgende commando (de vlaggen worden later uitgelegd). Nu downloaden we een Node-RED-container zonder custom pakketten. Als je geen custom pakketten nodig hebt, kun je hier stoppen en surfen naar poort 1880 van de controller.
balena-engine run -d -p 1880:1880 --name nodered --restart always nodered/node-red
Docker Hub
De arm32v7/debian-image die in de vorige sectie gebruikt werd, is gedownload van Docker Hub. Docker Hub is essentieel een plaats waar container-images verzameld worden en gemakkelijk gedownload kunnen worden. Ik kan de organisatie arm32v7 aanbevelen; deze maakt images compatibel met de architectuur van de AXC F 2152. De node-red-organisatie heeft een image gemaakt die compatibel is met de AXC F 2152; we gebruiken deze in de volgende sectie. Maar eerst wil ik vermelden dat als je veel met containers werkt, je een account op Docker Hub moet aanmaken en de repositories gebruiken. Je krijgt bijna onbeperkte publieke repositories en één private repository met een gratis account. Ik heb er een tijdje tegen geweerd, maar het heeft me veel tijd gekost. In de laatste sectie van deze blog maak ik de leercurve van Docker Hub wat minder stijl door te laten zien hoe je inlogt, een image herlabelt en een image pusht naar Docker Hub.
Dockerfile
Een Dockerfile is in essentie het recept voor een Docker-image. In deze blog gebruiken we een Dockerfile om onze eigen Node-RED-image te maken, met de pakketten die we nodig hebben geïnstalleerd. De eerste regel van een Dockerfile is bijna altijd het FROM-commando. Hiermee definiëren we een basis-image waarvanaf we onze eigen image bouwen. Na de FROM-statement beginnen we met het bouwen van onze image. Er zijn veel mogelijke commando's voor een Dockerfile, maar hier gebruiken we alleen RUN. Een Dockerfile-referentie-link staat in de "Further readings"-sectie.
De RUN-statement voert het commando dat volgt uit binnen de container die we aan het bouwen zijn. Om een nieuw pakket te installeren, bijvoorbeeld het SNMP-pakket, schrijven we: RUN npm install node-red-node-snmp.
Na de theorie, laten we een Dockerfile bouwen. Hopelijk ben je nog in een SSH-sessie (zorg dat je weer op de AXC F 2152 bent en niet in de Debian-container van twee secties geleden!). Je kunt de Dockerfile maken met nano en de inhoud kopiëren/plakken in het nieuwe bestand. Opslaan (ctrl+s) en afsluiten (ctrl+x).
FROM nodered/node-red:latest-minimal
RUN npm install node-red-node-snmp
Nu is het tijd om onze nieuwe image te bouwen!
balena-engine build . --tag myimage
Wanneer je het bericht ontvangt dat de image succesvol getagd is, heb je je eerste image gebouwd! Om de image te zien die je net hebt gebouwd, gebruik het commando: balena-engine images.
Onze nieuwe image draaien
Nu zijn we klaar om onze image te draaien en een container ervan te maken! Voer het volgende commando in de shell uit om de container interactief te draaien. Interactief betekent dat we in de terminal zien wat er in de container gebeurt. Het tegenovergestelde is detached, gemarkeerd met de vlag -d.
balena-engine run -it -p 1880:1880 --name nodered myimage
Om de container te verlaten en hem draaiend te laten, gebruik ctrl+p ctrl+q. Wanneer je surft naar het IP-adres van de controller gevolgd door poort 1880, verschijnt de Node-RED-omgeving en zien we het SNMP-pakket geïnstalleerd!
De image bij opstart starten en een primer over docker run-vlaggen
Het is onpraktisch om de container handmatig te starten elke keer dat de AXC F 2152 herstart. Gelukkig kunnen we Docker vertellen om dit voor ons te doen, en dat is eenvoudig! Gebruik het onderstaande commando. Dit is ook de tijd om de docker run-vlaggen beter te begrijpen. Een vlag is iets wat we na het commando geven en begint met - of --. Tot nu toe hebben we alleen -it gezien (interactief draaien) en -d (detached/achtergrond).
- De vlag
-pmapt de poort van de container naar de poort van de host. Eerst het poortnummer van de host, dan het poortnummer van de container. - We kunnen de container een naam geven met de
--namevlag. Deze naam wordt getoond bijbalena-engine ps(alle actieve containers) ofbalena-engine ps -a(alle containers). Zonder--namewijst de balena-daemon een willekeurige naam toe. - Ten slotte kan een herstartbeleid aan een container worden toegewezen met de
--restartvlag. De mogelijke instellingen vind je in de referentielink in "Further readings". Voor nu volstaat--restart always!
Ons commando wordt:
balena-engine run -it -p 1880:1880 --name nodered --restart always myimage
Pushen naar Docker Hub
Als je je image op verschillende controllers wilt gebruiken, is het een goed idee om je image naar Docker Hub te uploaden. Vanuit het uitgangspunt dat je al een account hebt en een Docker-repository hebt aangemaakt, gaan we verder. Eerst moeten we inloggen op ons account. Dit kan door balena-engine login te typen, gevolgd door je gebruikersnaam en wachtwoord. Nu is het mogelijk om images van private repositories te downloaden en je image naar Docker Hub te pushen.
Om je image naar Docker Hub te pushen, is het belangrijk de naam correct te krijgen. Als ik een repository myrep heb gemaakt en mijn gebruikersaccount myaccount is, moet de imagenaam myaccount/myrep zijn. Als je het niet zo noemde toen je de image bouwde, moet je de image herlabelen met balena-engine tag oldimagetag newimagetag. In ons geval zou dat zijn:
balena-engine tag myimage myaccount/myrep
Als niets meer gedefinieerd is, krijgt het het label latest. Je kunt een label toevoegen door : en een labelnaam toe te voegen. Bijvoorbeeld:
balena-engine tag myimage myaccount/myrep:alabel
Het enige wat overblijft is onze image naar Docker Hub pushen met het commando:
balena-engine push myaccount/myrep
Verder lezen en referenties
Industriële technologie
- Blijvende Succes: Lessen in Volharding van Abraham Lincoln en Onderhoudsleiderschap
- Cat® Machines Optimaliseren: De Ultieme My.Cat.com Gids
- Aan de slag met TJBot: Bouw, Configureer en Stem-bedien Je Eigen AI-robot
- Stap-voor-stap Handleiding om een RAK 831 LoRa-gateway op Raspberry Pi 3 te Deployen
- Bouw een LoRa Gateway met de RAK831 Module op Raspberry Pi 3 – Stap-voor-Stap Gids
- Arduino Beginner Tutorial 01: Start met Je Eerste Project
- Een Praktische Gids voor Ceramisch 3D-printen: Technieken, Materialen, en Ontwerptips
- AI in verzekeringen: Een praktische startergids voor real-world implementatie
- Node-RED in Docker beheersen: Expert-tips & best practices
- Basiskleurstoffen begrijpen: Gebruik, veiligheid en industriële toepassingen
- Industriële Kleurstoffen & Pigmenten: Uitgebreide Gids voor Toepassingen & Typen