Ich möchte mit euch ein paar Gedanken zum Thema Homeautomation Plattform teilen und vielleicht die Eine und Andere Anregung geben. Vielfach wird im Bereich der Homeautomation ein Raspberry Pi zum Einsatz kommen. In den letzten Jahren habe ich einige Projekte mit diesem Klein Computer gemacht und Erfahrungen gesammelt. So manche Installation musste mit viel Zeit Aufwand neu hergestellt werden. In diesem Beitrag möchte ich zeigen wie man konzeptionell und strategisch die heutigen Möglichkeiten der „Container-Technologie“ in diesem Bereich anwenden kann. Nicht immer ist ein Raspberry Pi das System der ersten Wahl. Schon allein weil die Preise signifikant gestiegen sind und die Installation von komplexen Umgebungen nicht immer zu der HW-Leistung des Raspberry Pi passen. Aber wenn der Raspi von der HW passt, ist der Vorteil der Container-Technology auch hier spürbar sinnvoll.
Docker ist eine Open-Source-Plattform zum Erstellen, Bereitstellen und Ausführen von Anwendungen in Containern. Ein Container ist eine isolierte Umgebung, die alle Abhängigkeiten und Ressourcen enthält, die eine Anwendung zum Ausführen benötigt. Durch die Verwendung von Containern können Anwendungen unabhängig vom Host-System ausgeführt werden, was Portabilität und Wiederverwendbarkeit erhöht. Docker ermöglicht es auch, mehrere Anwendungen auf einem einzigen Host auszuführen, was die Ausnutzung der Ressourcen des Systems verbessert und die Skalierbarkeit erleichtert. Es ermöglicht auch die Automatisierung der Bereitstellung und Wartung von Anwendungen.
Docker gibt es für Windows und Linux Systeme. Unterstützt werden einfache Systeme wie Raspberry Pi bin hin zu mächtigen HW Plattformen mit viel Ressourcen, Speicher, CPU und Storage.
Was sind die Vorteile einer Docker Installation?
- Isolation: Docker ermöglicht es, Anwendungen in isolierten Umgebungen auszuführen, die von anderen Anwendungen und dem Host-System getrennt sind.
- Portabilität: Anwendungen, die in Docker-Container ausgeführt werden, können leicht auf andere Systeme verschoben werden, da sie alle Abhängigkeiten enthalten.
- Skalierbarkeit: Docker-Container können einfach skaliert werden, indem man mehrere Instanzen desselben Containers auf verschiedenen Hosts startet.
- Wiederverwendbarkeit: Docker-Container können als Basis für andere Container verwendet werden, was die Entwicklung von Anwendungen erleichtert.
- Automatisierung: Docker ermöglicht die Automatisierung der Bereitstellung und Wartung von Anwendungen.
- Effizienz: Docker ermöglicht es, mehrere Anwendungen auf einem einzigen Host auszuführen, was die Ausnutzung der Ressourcen des Systems verbessert.
Um im Bereich der Homeautomation IT-technisch aufgestellt zu sein gibt es für mich folgende Module, auf die ich gern zurück greife.
- Datenbank: mySQL/ Maria DB
- Programmierung und Individualsteuerung: Node-RED
- Datenkonsolidierung und Datenhaltung, Automation: IOBroker
- VPN: openVPN, PIVPN
Diese Module sind alle als DOCKER Module verfügbar und können auf unterschiedlichen Plattformen installiert werden. Docker kann von der Terminalebene auf der Kommandozeile bedient werden oder man bedient sich auch hier eines Werkzeuges. Der Vorteil eines solchen Werkzeuges ist die grafische Bedienbarkeit über einen Browser und Forms innerhalb der Weboberfläche. Insbesondere für Personen, welche nicht tagtäglich auf der Kommandozeile arbeiten, ist das ein einfacher Weg. Ich nutze auf meinem System Portainer.IO dazu und selbst diese Lösung läuft bereits als Container auf der Docker Plattform.
Was genau ist Portainer und wobei hilft mir das?
Portainer ist eine Open-Source-Management-Oberfläche für Docker-Container. Es ermöglicht es Benutzern, Docker-Container, Images, Volumes und Netzwerke zu verwalten und zu überwachen. Portainer bietet eine webbasierte grafische Benutzeroberfläche, die es Benutzern ermöglicht, Container einfach zu erstellen, zu starten, zu stoppen, zu verwalten und zu überwachen. Es ermöglicht auch die Verwaltung von Images, Volumes und Netzwerken und bietet Funktionen wie die Anzeige von Protokollen und die Überwachung von Ressourcen. Es ist einfach zu installieren und zu verwenden und eignet sich besonders für Anfänger und Entwickler, die eine einfache Möglichkeit suchen, ihre Docker-Umgebung zu verwalten.
Mit Portainer werden die Container und die benötigten Artefakte, Images, Networks, Volumes in einer Oberfläche verwaltet. Die grafische Darstellung hilft dem Administrator den Zustand zu erkennen und alle für den Betrieb notwendigen Einstellungen vorzunehmen.
Fasse ich einmal zusammen. Auf einer Hardware installiere ich ein Linux System und darauf als Containerplattform DOCKER. Bei Ubuntu und auch bei anderen Distributionen wird DOCKER Bestandteil der Distribution sein. Weitere Applikationen werden jetzt als Container hinzugefügt. Als erster Container kommt nun der PORTAINER Container zum Einsatz. Danach kann ein Großteil der weiteren Administration innerhalb Portainer auf der Weboberfläche erfolgen. Das Grundsystem ist jetzt vorhanden. Ein paar Gedanken muss man sich konzeptionell zu Storage und Netzwerk machen bevor es weiter geht mit der Installation von Diensten.
Docker gibt mir die Möglichkeit den Service unter der HOST Netzwerk Adresse oder auf dem Docker internen Netzwerk zu installieren. Das Docker interne Netzwerk ist von außen nicht erreichbar und ermöglicht den Containern untereinander zu kommunizieren. Es gibt noch weitere Möglichkeiten, die wichtigsten sind aus meiner Sicht aber die beiden genannten. Entscheidet man sich für das interne Netzwerk und benötigt Zugriff von Außen auf dieses Netzwerk könnte der VPN Zugriff die Lösung sein. Alternativ gingen auch Firewall NAT Rules über das Hosts System. Diese Alternative spricht aus meiner Sicht jedoch gegen die Strategie, möglichst keine Installationen- und Konfigurationen am Base OS durchzuführen.
Als weiterer Punkt steht das Thema Storage im Raum. Generell nutzt der Docker Container das Storage vom Hostsystem innerhalb der isolierten Container Umgebung. Würde man den Container löschen sind auch die Daten gelöscht. Es kann konzeptionell und aus Betriebssicht notwendig und besser sein diese Daten außerhalb des Containers zu speichern. Damit kann der generische Container problemlos getauscht werden und hat die Daten im Zugriff. Hier muss auch etwas in Richtung Backup & Restore geschaut werden. Backup & Restore lässt sich einfacher auf dem Host für das Storage etablieren, ist also ein OS Basisdienst. Entweder mit einem speziellen Tool oder aber mit OS Boardmitteln wie TAR, RSYNC, … Cronjobs, etc. Würde man hier zu einem Tool greifen, so ist das eines der wenigen Tools, welche additiv zu dem OS auf dem Host installiert werden.
Für jeden Container ist also zu überlegen, ob die Datenhaltung im Container oder auf dem Host Storage außerhalb des Containers erfolgt. Ist die Wahl auf außerhalb gefallen, so wird in der Container Config ein mapping von innen nach außen hergestellt.
Zurück zu der Frage „Docker und Homeautomation – wie passt das zusammen?„
Die klassische Installation von Diensten auf einem Betriebssystem verbindet diese Dienste eng mit dem OS und schafft Abhängigkeiten. Security Updates, Patche und OS Versionswechsel bringen bei einer Vielzahl installierter Dienste erhöhte Komplexität auf das Gesamtsystem. Im einfachsten Fall erschweren diese Abhängigkeiten das Update/ Upgrade auf ein neues OS.
Docker und Dienste in Containern bieten die Möglichkeit mehr als einen Dienst auf einem OS zu betreiben. Da die Container voneinander isoliert sind und immer wie ein neues einzelnes System zu betrachten sind, ist die Komplexität und die Abhängigkeiten von- und zueinander gering, zu vernachlässigen. Die Installation von mehreren gleichen Diensten auf einem OS kann schon einmal zu Problemen bei der Nutzung von Libraries, Netzwerk Ports, etc. führen.
Im Fehlerfall können Container geklont werden. Der Fehler kann damit losgelöst von einer produktiven Umgebung in Ruhe bearbeitet werden. Mehrere gleichartige Systeme können automatisiert installiert- und konfiguriert werden. Sollte die HW Plattform nicht ausreichend sein ist über die Portierbarkeit ein Wechsel auf eine potentere Plattform auf einfache Weise möglich. Beispiel von Raspberry PI auf ein x86 System mit einem vServer bei einem Hosting Provider.
Hallo, diese Idee/Lösung finde ich genial 👍