IoBroker installieren mit docker

Jetzt kommen wir aber endlich zum eigentlichen Ziel dieser Anleitung. Wir wollen iobroker installieren.

Und damit das nicht nur iobroker in seiner einfachen Form ist, soll es in einer virtuellen Umgebung auf dem Raspberry Pi laufen. So ist es später einfacher möglich, Updates zu installieren und Backups zu erstellen.

Die Virtualisierung heißt "docker" und ist der "letzte heiße Scheiß" in der Software Branche. Alles wird heutzutage in docker gepackt.

Zuerst installieren wir also docker. Das funktioniert etwas anders als oben, dafür geht es aber auch vollautomatisch.

curl -fsSL get.docker.com -o get-docker.sh && sh get-docker.sh

curl ist ein Befehl um Daten von einem Server zu empfangen, oder zu senden. Dieser ruft den Inhalt der Seite get.docker.com ab und speichert ihn in einer Datei namens get-docker.sh.

Mit && werden in einer Zeile mehrere Befehle nacheinander ausgeführt. Man könnte den Befehl nach && auch später in einer neuen Zeile ausführen.

In diesem Fall ist das aber nicht notwendig.

Im Script ist empfohlen, den Nutzer "pi" zur docker-Nutzergruppe hinzuzufügen. Nur so ist es später möglich, docker container mit Admin-Rechten auszuführen.

sudo usermod -aG docker pi

04.0 docker hello-world.png

Jetzt können wir die Docker-Installation testen:

sudo docker run hello-world

Im Hintergrund passiert dabei folgendes:

  1. der Docker Client kommuniziert mit dem Docker Daemon
  2. lädt das Docker Image hello-world vom Docker-Hub
  3. der Docker Daemon erstellt ein neuen Container vom Image, welcher den Code für die Ausgabe ausführt
  4. Docker Daemon leitet die Ausgabe zum Docker Client weiter und dieser sendet die Ausgabe wiederum an deinen Terminal/CLI

Portainer installieren

Bevor es weitergeht machen wir einen Neustart des Raspberrys und verbinden uns neu per ssh.

sudo reboot

Man könnte jetzt wunderbar mit Hilfe der Kommandozeile Docker Images runterladen, installieren und ausführen. Aber das ist wenig komfortable. Einfach geht das mit "Portainer".

Und damit auch die Installation von Portainer einfach ist, laden wir dafür einfach ein Docker-Image herunter und führen es aus.

04.1 portainer install+start.png
04.1 portainer start+check.png

docker pull portainer/portainer

Docker hat die Eigenschaft, dass es keine Daten speichert. Alle Daten in einem sogenannten Docker-Container laufen nur so lange wie der Container. Sobald der Container beendet wird, sind alle Daten weg. Damit man Dienste wie iobroker trotzdem verwenden kann, muss man das Speichern der Daten auslagern.

Damit auch die Daten von Portainer gespeichert werden, legen wir zuerst ein Daten-Verzeichnis für portainer an:

docker volume create portainer_data

04.1 portainer environment.png

Und dann starten wir den container schon:

docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

Portainer läuft jetzt im Hintergrund. Um das zu prüfen, können wir folgenden Befehl verwenden:

04.1 portainer 1 webinterface.png

docker ps

Im Webbrowser kann man nun auf die Weboberfläche von portainer zugreifen. Einfach im Browser eingeben: http://IP-Adresse des Raspis:9000/

Beim ersten Start verlangt Portainer die Definition des Admin-Kennworts. Ich wähle das gleiche, was auch der Raspberry verwendet:

Passwort: christoph

Dann will portainer wissen, ob man es local verwenden will oder eine größere portainer-Farm in der Cloud hat. Wir wählen "local".

Und schon sind wir das erste mal auf der portainer Web-Oberfläche. Wenn du auf "local" > "Container" klickst, siehst du alle momentan laufenden Container auf dem Raspberry. Das ist momentan nur der portainer-Container.

Damit der portainer-Container immer mit dem Start des Raspberrys startet, werden wir ihn jetzt noch umkonfigurieren. Dazu klicken wir auf den Namen des Containers.

Falls der portainer einen kryptischen Namen hat, kann das auf der nächsten Seite geändert werden. Gleich oben in der Kategorie "Container Status" hinter "Name" auf den kleinen Stift klicken, um den Namen beliebig zu ändern.

Anschließend ein Stück runter scrollen zu den "Container details"

Und bei "Restart policies" den Wert "Unless stopped" auswählen und auf "Update" klicken.

Jetzt sollte portainer auch nach einem Neustart des Raspberrys noch erreichbar sein. Das testen wir:

sudo reboot

Sobald der Raspberry wieder gestartet hat, kann man prüfen, ob die portainer Seite im Browser lädt und nach dem Login fragt.



docker Netzwerk erstellen

Wesentliche Teiler der Anleitung beruhen auf dieser Anleitung: https://buanet.de/2019/05/iobroker-unter-docker-auf-der-synology-diskstation-v3/2/

04.2 iobroker data.png

Zuerst richten wir ein lokales Verzeichnis ein, indem später alle iobroker-Daten abgelegt werden. Dazu unter Portainer links im Menü auf "Volumes" und "Add volume" klicken.

Als Name "iobroker_data" und dann "Create the volume" klicken.

Dann müssen wir ein virtuelles Netzwerk einrichten. Da Docker-Container normalerweise in einem eigenen Bereich des Betriebssystems laufen und nicht ohne Weiteres außerhalb funktionieren, muss man ein virutelles Netzwerk anlegen. Es gibt 3 Möglichkeiten, dieses Netzwerk einzurichten. Die coolste Version ist MACVLAN, ebenfalls funktionieren würde die Netzwerkbrücke. Die Unterschiede sind hier zu lesen: https://buanet.de/knowledge-base/networking/

In Portainer gehen wir auf "Networks" und "Add network". Zuerst muss eine Configuration angelegt werden, deswegen nennen wir das Netzwerk "iobroker_public_config" und wählen unter Driver "macvlan" an.

Für die Konfiguration muss zuerst das "parent network" definiert werden. Das ist in Linux die Software-Schnittstelle, an der das Netzwerk anliegt. Über MobaXterm loggen wir uns auf den Raspberrypi ein und geben "ifconfig ein". Unser Netzwerk-Interface heißt "eth0", zu erkennen ist das an der IP-Adresse.

In Portainer geben wir also "eth0" als "Parent netowrk card" ein.

Für mein Netzwerk das die Fritzbox erstellt, verwende ich den IP-Adressbereich 192.168.171.0, deswegen ist das auch die Subnet-Adresse.

Das Gateway ist die Adresse der Fritzbox bzw. des Routers: 192.168.171.1

Und die IP-Adresse für den iobroker wird 192.168.171.220/32

Ich nehme die 220, weil die Fritzbox alle möglichen Adressen von ..171.11 bis ..171.200 verwaltet. Alle Adressen die danach kommen, werden also nicht von der Fritzbox verwendet.

Anschließend auf "Create the network" klicken.

Jetzt wiederholen wir den Schritt von oben und gehen auf "Create network". In diesem Fall nennen wir das Netzwerk "iobroker_public", wählen als Driver wieder "macvlan" und nehmen nun aber "Creation" anstatt "Configuration". Als Configuration wählen wir die eben erstellte "iobroker_publick_config".

Abschließend nochmal auf "Create the network". Endlich fertig...