IoBroker installieren mit docker: Unterschied zwischen den Versionen

Zeile 48: Zeile 48:
 
[[Datei:04.1 portainer install+start.png|mini]]
 
[[Datei:04.1 portainer install+start.png|mini]]
 
[[Datei:04.1 portainer start+check.png|mini]]
 
[[Datei:04.1 portainer start+check.png|mini]]
<code>docker pull portainer/portainer</code>
+
<code>docker pull portainer/portainer:latest</code>
  
 
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.
 
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.

Version vom 24. März 2020, 16:49 Uhr

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:latest

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/

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...



ioBroker Container anlegen

Jetzt aber wirklich. Alle Voraussetzungen sind nun erfüllt.

Im Menü auf "Containers" klicken. Und dann auf "+ Add container". Zuerst geben wir dem Container einen Namen: "iobroker"

Als Basis-Image verwenden wir das Image des Nutzers "mcdhrts". Es ist auf der offiziellen Plattform "DockerHub" zu finden. Ursprünglich basiert es auf dem Dockerimage von buanet, für den Raspberrypi brauchen wir aber ein spezielles. Somit geben wir bei "Image" ein: mcdhrts/iobroker_pi3 "Registry" bleibt auf "DockerHub".

Beim Installieren lädt Portainer das Image automatisch herunter.

Der Bereich "Access control" kann so bleiben, ebenso wie "Actions".

Einige Änderungen müssen noch bei "Advanced container settings" gemacht werden. Bei Volumes muss das oben erstellte Volume mit "+ map additional volume" eingebunden werden. Da iobroker seine Daten im Verzeichnis /opt/iobroker ablegt, wählen wir:

  • container: "/opt/iobroker" und wählen "Volume"
  • Und volume: "iobroker_data - local" und "Writable".

Im Reiter "Network" müssen wir das oben erstellt macvlan zuweisen:

  • Network: "iobroker_public".
  • Hostname: "iobroker", das ist der Name, über den iobroker später im Netzwerk erreichbar ist, ohne die IP-Adresse einzugeben.

Im Reiter "Env" fügen wir noch ein paar Parameter hinzu. Dazu 2x auf "+ add environment variable" klicken. Der Hintergrund der Variablen ist hier erklärt: https://github.com/buanet/docker-iobroker Die Funktionen von "AVAHI" brauchen wir momentan nicht, deswegen "false" und als zusätzliches Installationspaket wollen wir den "nano"-Editor verwenden können.

Diese Parameter können wir auch später noch ergänzen oder ändern.

Abschließend soll noch die "Restart policy" festgelegt werden. Wir schon portainer, soll auch iobroker immer verfügbar sein, deswegen "Unless stopped".

Jetzt klicken wir endlich "Deploy the container". Das kann einen Moment dauern, da docker das Image erst aus dem Internet runterladen und einige Abhängigkeiten installieren muss.



ioBroker öffnen

Wenn man in Portainer jetzt wieder auf "Containers" geht, sieht man den laufenden iobroker-Container. Mit klick auf den Namen des Containers (bei mir jetzt iobroker_pi) erhält man zusätzliche Informationsmöglichkeiten. Unter "Stats" sieht man z.B. wieviel Rechenleistung der Container benötigt. Unter "Logs" sieht man, welche Aufgaben der Container gerade durchführt. Beim ersten Start steht hier z.B., dass das Paket "nano" installiert wird.

Über die in den Network-Settings definierte IP-Adresse können wir jetzt erstmalig die Web-Oberfläche von iobroker öffnen:

Bei mir: http://192.168.171.220:8081/ 8081 ist der Port für die administrative Weboberfläche von iobroker.

Zuerst muss der Lizenzvertrag abgenickt werden. Dann werden einige Basis-Einstellungen des iobrokers durchgeführt. Unten rechts auf "Speichern" und "weiter" klicken.

Die Adapter-Konfiguration der folgenden Seite hab ich so belassen und dann auf "schließen".



nützliche Links

Für weiteres empfiehlt sich eine Einführung über verschiedene Websites und Videos:

https://www.youtube.com/watch?v=dPohpl1e2I0

https://www.iobroker.net/#de/documentation