Die Raspberry Pi 4 sind im Moment schlecht zu bekommen und auch zu teuer. Deshalb kann einfach ein gebrauchter Fujitsu Futro S920 verwendet werden. Der ist dann auch noch schneller mit 2,2 GHz Amd-CPU und 4 GB RAM als der Pi 4 und hat auch gleich ein schönes Gehäuse mit 8 GB SSD und Netzteil.
Die innen Ansicht:
Da wollen wir nun ein Debian 64-Bit und eine Node-Red im Docker-Container laufen lassen. Zugriff dann später über SSH und Headless ohne GUI.
Zuerst auf einem USB-Stick ein aktuelles Debian von hier laden und mit BalenaEtcher installieren:
Dann den USB-Stick hinten in das Gerät stecken und davon booten. Während des hochfahren die F12 Taste drücken um in das Bios zu kommen. Dort die Power-Save und Bildschirmschoner ausschalten. Und auch die Funktion freischalten, um vom Stick booten zu können, wenn es nicht ein ist.
Dann über das Menü das Debian installieren:
Wichtig ist das wir den ssh Server mit installieren: (Debian Desktop, Gnome habe ich erstmal angelassen, dann bleibt aber nicht viel Speicher mehr übrig. Ich brauch eigentlich nur ein headleass System deshalb nur ssh und Systemtools.)
(Für die Installation habe ich den Domain Namen: fu gewählt, den nächsten Dialog leer gelassen, einen User z.B. pi angelegt, Proxy leer gelassen und Grub Bootloader in die sda 1 FP kopiert, Wichtig: im Bios muss die interne Netzwerkkarte auf an stehen)
Anmelden per ssh mit ssh pi@IP-ADRESSE und Passwort.
Dann mal gleich die Anmeldung mit Elliptische Kurve – ed25519 Key einrichten wie hier beschrieben.
Das pi home Verzeichnis aufräumen:
1 |
rm -rf Bilder/ Dokumente/ Downloads/ Musik/ Öffentlich/ Schreibtisch/ Videos/ Vorlagen |
So, den Monitor brauchen wir jetzt nicht mehr.
Wir installieren uns noch git und curl als su:
1 2 3 4 5 6 7 8 |
su apt update apt upgrade apt install git curl # check git Version git --version # git version 2.30.2 |
Dann noch einen neuen User mit sudo Rechten anlegen:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
root@fu:/home/pi# sudo adduser sudo_user Lege Benutzer »sudo_user« an ... Lege neue Gruppe »sudo_user« (1001) an ... Lege neuen Benutzer »sudo_user« (1001) mit Gruppe »sudo_user« an ... Erstelle Home-Verzeichnis »/home/sudo_user« ... Kopiere Dateien aus »/etc/skel« ... Geben Sie ein neues Passwort ein: Geben Sie das neue Passwort erneut ein: passwd: Passwort erfolgreich geändert Benutzerinformationen für sudo_user werden geändert. Geben Sie einen neuen Wert an oder drücken Sie ENTER für den Standardwert Vollständiger Name []: Zimmernummer []: Telefon geschäftlich []: Telefon privat []: Sonstiges []: Sind die Informationen korrekt? [J/n] j sudo usermod -aG sudo sudo_user # check ob der neue User in der Gruppe ist getent group sudo # sudo:x:27:sudo_user # Test anmelden su - sudo_user Passwort: # ok, wir haben einen User mit Sudo Rechten su sudo_user # check sudo_user@fu:/home/pi$ sudo ls -la /root |
IOTStack installieren wie hier beschrieben.
1 2 3 4 5 6 7 8 9 10 11 |
# Den pi User evl. in die sudo Gruppe aufnehmen oder mit den User oben arbeiten. sudo usermod -aG sudo pi # Check ob pi in der sudo Gruppe ist getent group sudo # sudo:x:27:sudo_user,pi # Dann nur das Script ausführen curl -fsSL https://raw.githubusercontent.com/SensorsIot/IOTstack/master/install.sh | bash |
Wir brauchen mind. diese docker-compose.yml die pi device entfernen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
version: '3.6' services: nodered: container_name: nodered build: context: ./services/nodered/. args: - DOCKERHUB_TAG=latest - EXTRA_PACKAGES= restart: unless-stopped user: "0" environment: - TZ=Etc/UTC ports: - "1880:1880" volumes: - ./volumes/nodered/data:/data - ./volumes/nodered/ssh:/root/.ssh - /var/run/docker.sock:/var/run/docker.sock - /var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket |
Und im services/nodered das Dockerfile:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# reference argument - omitted defaults to latest ARG DOCKERHUB_TAG=latest # Download base image FROM nodered/node-red:${DOCKERHUB_TAG} # reference argument - omitted defaults to null ARG EXTRA_PACKAGES ENV EXTRA_PACKAGES=${EXTRA_PACKAGES} # default user is node-red - need to be root to install packages USER root # install packages RUN apk update && apk add --no-cache eudev-dev ${EXTRA_PACKAGES} # switch back to default user USER node-red # variable not needed inside running container ENV EXTRA_PACKAGES= # add-on nodes follow RUN cd /usr/src/node-red && npm install --save node-red-configurable-ping RUN cd /usr/src/node-red && npm install --save node-red-contrib-boolean-logic RUN cd /usr/src/node-red && npm install --save node-red-contrib-influxdb RUN cd /usr/src/node-red && npm install --save node-red-dashboard RUN cd /usr/src/node-red && npm install --save node-red-node-pi-gpiod RUN cd /usr/src/node-red && npm install --save node-red-node-rbe RUN cd /usr/src/node-red && npm install --save node-red-contrib-bigtimer |
So, Node-Red läuft nun im Browser in der Version 3.0.2, cool
Nun schalten wir noch den Gnome Desktop aus, da das System Headless ohne Monitor laufen soll, da der doch so 100% CPU braucht mit
1 2 |
sudo systemctl set-default multi-user.target sudo reboot |
Für den Fall das man die Gui doch noch braucht (ungetestet):
1 2 |
sudo systemctl set-default graphical.target sudo reboot |
Dann ist auch nicht mehr so viel Last auf der CPU, um nicht zu sagen, es ist nichts los, obwohl NodeRed im Docker läuft
Oder dann noch gleich ein
sudo apt install htop
das sieht doch besser aus:
Hier zum vergleich mal der Raspberry Pi 4, der seit über 100 Tagen mit Node-Red im Docker läuft:
Dann auch noch gleich die Verzeichisse für den MacOS Finder Freigeben, wie hier beschrieben.