IoBroker unter Docker auf der Synology DiskStation (v3)

Vorbereitungen

Inhaltsverzeichnis

Im Gegensatz zum alten Tutorial starten wir dieses Mal nicht sofort durch. Bevor wir den eigentlichen ioBroker-Container mit wenigen Klicks erstellen können, sind ein paar Vorbereitungen zu treffen.

Systemvoraussetzungen

Wie der Titel es schon vermuten lässt, habe ich dieses Tutorial für die Installation von ioBroker unter Docker auf einer Synology Disk Station geschrieben. Es wäre also nicht verkehrt wenn ihr eine konfigurierte Disk Station mit installiertem Docker-Paket euer eigen nennen würdet. Allerdings ist das diesmal kein Muss! Ich teste zum Beispiel meine Builds zusätzlich zur DS auch immer auf einem ganz normalen Debian PC mit installiertem Docker CE. Trotzdem beziehe ich mich in diesem Tutorial grundsätzlich immer auf die Installation auf der DS, werde aber an einigen Stellen entsprechende Anmerkungen machen wenn Schritte auf anderen Systemen deutlich abweichen. 🙂

Eine weitere Voraussetzung für das Gelingen des Tutorials ist die Installation von Portainer als alternative Weboberfläche zur Administration von Docker. Dazu habe ich im Vorfeld bereits ein Tutorial veröffentlicht, welches beschreibt wie man Portainer auf die DS bringt. Keine Angst, bei Portainer handelt es sich lediglich um einen weiteren Docker-Container. Es ist also kein komplizierter Eingriff auf der DS nötig. Benutzer die keine DS verwenden, müssen an dieser Stelle höchstwahrscheinlich die Kommandozeile bemühen. Anleitungen zum Aufsetzen von Portainer auf einem „normalen“ Docker-PC gibt es zu genüge im Netz.

Verzeichnisstruktur

Docker-Container sind per Definition zu 100% austauschbare Hüllen für die darin laufende Software. Dies bedeutet, wir müssen uns Gedanken darüber machen welche (Konfigurations-)Daten wir außerhalb des Containers speichern sollten um nicht bei jedem Update des Containers neu anfangen zu müssen.
Im Fall von ioBroker ist das relativ einfach. Das Verzeichnis /opt/iobroker beinhaltet sämtliche Konfigurationsdateien von ioBroker und seinen Adaptern. Dieses Verzeichnis sollten wir also auf jeden Fall außerhalb des Docker-Containers lagern. Wie euch aus meinem Portainer Tutorial bereits bekannt sein sollte, habe ich für die Container-Daten auf der DS eine einfache Ordnerstruktur angelegt. Diese befindet sich bei mir auf „volume1“ im Ordner „docker“. Hier lege ich über die FileStation für jeden Container einen Order nach folgendem Schema an „/volume1/docker/[containername]_[bezeichnung]. Bei Portainer war es „portainer_data“. Auch für ioBroker ist das nicht anders. Mein Verzeichnis heißt hier „iobroker_data“. (Im alten Tutorial hieß das Verzeichnis übrigens noch „iobroker_mount“.)

Netzwerk

Prinzipiell sind zu diesem Thema drei Varianten relevant. Eine kurze Erläuterung zu den drei Modi habe ich mal in meine neue Knowledgebase ausgelagert.
Jeder darf natürlich selbst entscheiden wie der ioBroker-Container ins Netz zu hängen ist. Für DiskStation-Benutzer werden die Möglichkeiten allerdings durch einen Bug aktuell etwas eingeschränkt (Details im Readme auf Github), sodass nur noch die Varianten „Bridged Mode“ und „MACVLAN“ übrig bleiben.
Den MACVLAN-Betrieb würde ich eher nur den fortgeschrittenen Benutzern empfehlen. Hier sind gute Kenntnisse des eigenen Heimnetzwerks sowie der Netzwerkkonfiguration der DiskStation notwendig (Stichwort: Network-Device-Name).
Mit dem Bridged Mode hingegen kann man als Einsteiger nicht viel falsch machen. Allerdings muss hierbei jeder benötigte (Kommunikations-)Port separat als Weiterleitung im Container eingetragen sein. Eine entsprechende Liste der Ports habe ich in der Knowledgebase abgelegt. Außerdem gilt für den Bridged Mode der Hinweis, dass Adapter, die mit Multicast arbeiten hier nicht Funktionieren werden.
Einen kurzen „Best Practice“ Hinweis zum Thema Netzwerk habe ich ebenfalls in der Knowledgebase abgelegt. Zu finden ist das Ganze hier.

Vorbereitungen für MACVLAN

Wer sich als „fortgeschrittenen Benutzer“ bezeichnet und jetzt bereits für die MACVLAN Variante entschieden hat, der kann das Netzwerk an diesem Punkt bereits über Portainer vorbereiten. Allerdings hier gleich nochmal der Hinweis: Ihr solltet dazu euer Netzwerk und eure DS kennen! Außerdem benötigt ihr für einen Schritt einen SSH-Zugang auf eure DS.
Im folgenden Beispiel habe ich als Testnetz ein 192.168.0.0/24-Netz. Das Gateway liegt auf der 1 und es gibt keinen DHCP-Bereich. Mein „iobrokertest“ soll die IP-Adresse 192.168.0.100 bekommen.

Und schon geht es los. Wir öffnen die Portainer-Weboberfläche und melden uns an. Nach der Auswahl des Endpoints (Host) klicken wir auf der linken Seite unter „Networks“ den Button „Add network“

Im folgenden Dialog sind einige Felder zu füllen. Beginnen wir mit dem Namen. Ich werde dem MACVLAN nur eine einzelne IP-Adresse zuweisen. Daher bekommt mein MACVLAN auch einen eindeutigen Namen: „iob_public“. Als Driver wählen wir natürlich „MACVLAN“. Die Maske verändert sich und unter „MACVLAN Configuration“ erscheint ein Hinweis. Fragt mich bitte nicht warum das so ist, aber dieser Hinweis gilt nicht für DiskStation Benutzer. Auf der DiskStation erstellen wir nur die „Configuration“ und es läuft.

Hinweis: Nicht-DiskStation-Benutzer müssen nach der Erstellung der „Configuration“ noch einmal über „Add network“ gehen und „Creation“ auswählen. Nennt in diesem Fall eure „Configuration“ am besten „iob_public_conf“ und im zweiten Schritt eure „Creation“ dann „iob_public“.

Weiter geht es zum nächsten Feld: Parent network card. Hier müssen wir angeben auf welche physikalische Netzwerkkarte wir unser MACVLAN binden wollen. An dieser Stelle liegt dann auch die Beurteilung „für fortgeschrittenen Benutzer“ begründet. Denn mir ist bisher kein Weg bekannt diese Information der Weboberfläche der DS zu entlocken. Da hilft nur Kommandozeile raus und „ifconfig“ rein.

Auf meiner virtuellen Test-DS liegt die lokale IP-Adresse (192.168.0.32) auf dem Interface eth0. Ich verwende also dieses.

Weiter geht es mit dem Abschnitt „Network configuration“ Hier fülle ich die Informationen meinem Netzwerk entsprechend aus. Für „IP range“ verwende ich die gewünschte IP-Adresse mit einer Präfixlänge von „/32“. Dieses Netz enthält dann schließlich genau eine IP-Adresse.
Über den Button „Create the network“ schließe ich die Erstellung ab.

Das erstellte Netzwerk sollte nun in der Liste auftauchen und kann beim Erstellen des Containers verwendet werden.

Übernahme von ioBroker Daten aus anderem System

Immer wieder ein spannendes Thema ist auch die Übernahme von ioBroker-Daten aus einer bestehenden Installation. Im aktuellen ioBroker-Docker-Image sollte dies allerdings kein Problem mehr darstellen. Hier gibt es die Möglichkeit zum ersten Start des Containers bereits ein mit Daten aus einem anderen System gefülltes „/opt/iobroker“-Verzeichnis einzubinden. Scripte innerhalb des Containers kümmern sich dann im besten Fall um den Rest 😉

Hinweis: Eine Datenübernahme kann nur glücken wenn die Major-Node-Version übereinstimmt! Arbeitet auf dem Quellsystem noch eine Node-Version 6, muss diese zuerst hochgerüstet werden damit der Umzug klappt!

Ansonsten reicht es zur Übernahme der alten ioBroker-Installation die Daten im Ordner /opt/iobroker auf dem (Linux-)Quellsystem per tar-Befehl in ein Archiv zu packen und auf die DiskStation bzw. den Docker Host zu transferieren. Über die FileStation auf der DS lassen sich die Daten dann komfortabel extrahieren und im späteren Mount-Verzeichnis (z.B. /volume1/docker/iobroker_data) ablegen. Das Verzeichnis wird dann beim Erstellen des Containers in selbigen gemountet und die alte Installation wird automatisch übernommen.

Damit sollten alle Voraussetzungen erfüllt sein. Wir können nun also den ioBroker Container erstellen.

About the author: André

André
Familienvater und bekennender Technik-Nerd. Beruflich unterwegs als Fachinformatiker für Systemintegration bei einem deutschen IT-Dienstleister. In der Freizeit begeisterter "Home-Automatisierer" bzw. "Smarthome-Bastler" und (zumindest bei schönem Wetter) gerne mit der Familie in verschiedenen Outdooraktivitäten unterwegs.

66
Hinterlasse einen Kommentar

avatar
10000
23 Kommentare
43 Antworten
3 Abonnenten
 
Meiste Antworten
Beliebtester Kommentar
24 Kommentatoren
FrankAndréHenrikDirkWolfgang Letzte Kommentatoren
  Abonnieren  
Benachrichtige mich zu:
Henrik
Gast
Henrik

Man könnte auch beim Erzeugen des macvlan Netzwerkes einen IP-Range von 192.168.0.240/28 (statt 192.168.0.100/32) eintragen, dann hat man 14 IPs „frei“ für Container. Aufpassen, dass der DHCP-Range im Router nur bis *.239 eingestellt wird. Nun vergibt man bei der Containererzeugung einfach eine feste IPv4 IP „192.168.241“, für den nächsten Container *242 etc.

Dirk
Gast
Dirk

Erstmal vielen Dank für die super Anleitungen. Ich folge diesen schon eine ganze Weile und sie funktionieren super. ich bin bereits auf ioBroker v3 und habe nun ein Update gemacht, da der js.controller eine neue Version brauchte. Also genau nach Anleitung vorgegangen, wobei ich zunächst über portainer ein Recreate des Containers durchgeführt habe. Dann über portainer auf die Konsole im ioBroker und Deine Befehlskette pkill io iobroker update iobroker upgrade self node node_modules/iobroker.js-controller/controller.js >/opt/scripts/docker_iobroker_log.txt 2>&1 & ausgeführt. Danach habe ich den Container nochmal über DSM Docker neu gestartet. Wenn ich jetzt die Weboberfläche des Admin aufrufe, sehe ich zwar den… Mehr lesen »

Frank
Gast
Frank

Hallo Andre, ich benutze deine Io-Broker Images auch schon lange und möchte mich für deine tolle Arbeit bedanken. Bisher hat immer alles prima funktioniert aber nun hab ich seit einigen Tagen ein Problem an dem ich ncht weiterkomme. Es gelingt mir partout nicht meinen iobroker container per bridge-network mit einem zweiten container (in meinem Fall mysql) zu verbinden. Der Iobroker Container bekommt die 172.17.0.3 und der sql-container die 172.17.0.4 aber es ist keine Verbindung möglich. ich kann noch nicht mal das gateway also die 172.17.0.1 pingen. Ich hab schon die verschiedensten konstellationen versucht, aber ich krieg es nicht hin. Ist… Mehr lesen »

Thorsten
Gast
Thorsten

Ich habe alles so eingerichtet, wie beschrieben und es läuft auch soweit. Allerdings bekomme ich jedes Mal, wenn ich in der ioBroker-Konsole des Portainers den Befehl „iobroker update“ oder „iobroker backup“ oder dergleichen eingebe, eine Fehlermeldung

/usr/bin/env: „node\r“: Datei oder Verzeichnis nicht gefunden

Das lässt wohl auf eine DOS-Konvertierung schließen. Ich kann die Konsole nur als root aufrufen. Wenn ich das selbe ioBroker-Verzeichnis mit der alten Version 2 des buanet-Images verwende, klappt es. Hat jemand eine Idee, wie ich das Problem gelöst bekomme. Wie gesagt, alles andere funktioniert. Die ioBroker-Adapter lassen sich auch über die ioBroker-Admin-Oberfläche problemlos updaten.

Marc
Gast
Marc

Hallo Andre, jetzt muss ich mich doch gleich noch mal melden :/ Du schreibst: „Trotzdem gibt es einen Wermutstropfen: Eine direkte Kommunikation zwischen der IP-Adresse des ioBrokers und der des Docker-Hosts ist leider nicht möglich. Praktisches Beispiel ist hier z. B. die Anbindung einer auf dem Host laufenden SQL-Datenbank an den ioBroker-Container. In so einem Fall müssen andere Lösungen gefunden werden.“ AAAAHHHHH…. Ich hab es gerade probiert – ich kann wirklich auf alles zugreifen, aber nicht auf den eigentlichen DockerHost. Warum ist das so? Ich hab natürlich eine SQL-DB und auch noch weitere Sachen auf dem Server am laufen. Letztendlich… Mehr lesen »

Marc
Gast
Marc

Hallo Andre,
super HowTo, ganz großes Dankeschön dafür!!!

Eher eine kleine Ergänzung an alle, die wie ich mit der MACVLAN-Konfiguration kämpfen.
Wenn man diese löscht, den DockerContainer aber schon erstellt hat, muss man diese nachträglich wieder manuell dem Container (im DockerContainer) zuweisen – diese eigentliche „Kleinigkeit“ hat mich gerade etwas Nerven gekostet :}

In dem Container selbst, steht dann auch, welche IP-Adresse zugewiesen wurde 🙂

Vielleicht hilft es dem einen oder anderen.

Gruß
Marc

Chris
Gast
Chris

Hi André vielen Dank für die tolle Anleitung, leider hänge ich bei iobroker und bekommen keine Verbindung zu Port 8081 -Netzwerk Zeitüberschreitung. Der Ordner auf der ds iobroker_data ist auch leer.

Homematic läuft über die ds IP aber keine Verbindung zum LGW auch die Link LED leuchtet nicht.

Jemand eine Idee wo ich ansetzen könnte?

Wlad
Gast
Wlad

Hallo André, Ich hoffe du kannst mir helfen. Ich bekomme ioBroker einfach nicht auf meiner Synology (DSM 6.1-15047) zum laufen. Momentan läuft ioBroker als Container im Bridge Netzwerk. Hier habe ich jedoch das Problem, dass ich jeden Port einzeln mappen muss. Das führt dazu, dass der BroadLink2.0 Adapter nicht funktioniert, da er bei jedem Start unterschiedliche UDP Ports verwendet, was das mappen im Vorfeld unmöglich macht. Also habe ich versucht ioBroker im MACVLAN Modus via Portainer laufen zu lassen. Leider bekomme ich jedoch Portainer nicht zum laufen, da Portainer keinen Zugriff auf die Docker.Sock bekommt. Auch der Trick mit dem… Mehr lesen »

Surfer2010
Gast
Surfer2010

Hi, i solved my „issue“ before (i posted on your github) … the reason is as simple as hard to find … i tracked it down to permission issues as you also said, but …
my folder / the drive it was on, was mounted as „noexec“ in the fstab …
that was the reason the container couldn’t write all the files ….

just wanted to let you know maybe for you tutorial

Carsten
Gast
Carsten

Hi,
Vielen Dank für die super Anleitung. Bei mir läuft auch alles super und habe das Netzwerk über MacVlan eingerichtet. Jetzt habe ich den Hue Adapter in ioBroker installiert, aber die Instanz kann keine Verbindung zur ipAdresse herstellen. Hat das was mit dem Portainer zu tun? Kann ich nicht mehr auf die ipAdressen im eigenen Netzwerk des Routers zugreifen?

Ronald
Gast
Ronald

Ich kann das ganze aber auch nach wie vor mit dem Network „host“ einrichten oder? Dann hat die iobroker nach wie vor die IP-Adresse der DS?!

Sven
Gast
Sven

Hallo Andrè, wenn Kennwort und https aktiviere, kann ich vom iPhone und iPad nicht mehr auf den iobroker zugreifen.
https ist in der Adresse natürlich geändert. Es kommt auch der erste Startbildschirm (blaue Balken und Laufleiste ), aber dann bricht der Zugriff ab. Kennst du das Problem?

Vielen Dank

ha-dida
Gast
ha-dida

Hi André, danke für die super Anleitung. Hat mir sehr geholfen.
Ich vermisse in meinem Portainer GUI den ‚RECREATE‘ Tab.
Hast du da eine Idee?

Michael
Gast
Michael

Guten Abend. Erstmal Danke für deine Arbeit und dass du diese mit uns teilst! Tolle Anleitung! Ich habe deine Anleitung soweit befolgt und der Container läuft auch soweit. Zur Info, ich bin von der V2 auf die V3 umgestiegen. Ich habe da bloß ein kleines Problem welches ich nicht gelöst bekomme. Ich komme einfach nicht in den Admin Bereich. Sobald ich die IP:8081 eingebe, sagt mir mein Browser dass die Seite nicht erreichbar ist. Über IP:8082 bekomme ich eine Seite angezeigt. Habe auf meiner DS bereits die Firewall überprüft bzw. mal deaktiviert….ohne Ergebnis. Mein „alter“ V2 Container zeigt das gleiche… Mehr lesen »

Surfer2010
Gast
Surfer2010

Wie kann ich dieses Image über ein LetsEncrypt Image (https://github.com/linuxserver/docker-letsencrypt) erreichen über proxy conf.
Ich habe es geschafft per iobroker.mydomain.com die Admin Oberfläche zu erreichen, aber VIS funktioniert nicht.
vis.mydomain.com wäre genauso ok wie alles andere, mir egal, solange es geht.
Außerdem würde ich gerne von extern auf MQTT zugreifen können?!
DANKE 🙂 ansonsten tolles Image!

Robert
Gast
Robert

Hi André, danke erst mal für die wiedermals tolle Anleitung, habe mir als die erste raus kam extra eine Synology DS gekauft um das ganze nutzen zu können einfach klasse !!!!! Ich würde gerne umsteigen auf die Version 3, leider bleibe ich bei einem Punkt bis jetzt stecken. Ich habe mir einen SSH Zugang eingerichtet und das klappt auch, aber bei mir steht das bei eth0 :-/ die DS ist eine RS818+ eth0 Link encap:Ethernet HWaddr 00:11:32:97:35:05 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:874949 errors:0 dropped:0 overruns:0 frame:0 TX packets:533916 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:458624634 (437.3… Mehr lesen »

Andreas
Gast
Andreas

Vielen Dank für die Anleitung, habe diese befolgt und mir ein Netzwerk per Portainer mit /29, damit ich 6 IPs habe. Habe auch plex, unifi und iobroker als eigene IP für deren Container eingerichtet. Habe so wieder etwas dzu gelernt. Jetzt hätte ich aber auch noch gerne Port 80 für die IP meines ioBroker eingerichtet, da ich diesen Port gerne verwenden würde für Node Red mit dem Flo Amazon echo Hub. Damit könnte ich Alexa local ablösen und meinen echo dot 2 abbauen, da Amazon echo hub auf port 80 lauscht für Generation 3 der Echos. Ist dies möglich Port… Mehr lesen »

Sven
Gast
Sven

Hallo André, ich habe deine V2 am laufen und möchte nun auf die V3 wechseln. Soweit ist mir glaube alles in deiner super Anleitung klar. Unsicher bin ich mir ein wenig beim Einrichten des Netzwerks für MacVlan. Als SUB-Netz ist bei mir 192.168.0.1/24 und nicht 192.168.0.0/24 vergeben. Mein Heimnetzwerk hat die iP von 192.168.0.1 – 192.168.0.255, wobei als DHCP Bereich 192.168.0.6 – 192.168.0.117 eingestellt ist. In den restlichen Bereichen vergebe ich statische IP. Die DS hat z.B. 192.168.0.125. Das Gateway Unifi (USG) hat die 192.168.0.1
Kann ich da die Anleitung übernehmen?

Vielen Dank

Jörg F.
Gast
Jörg F.

Danke für die Anleitung. Habe noch die Installation nach der alten Anleitung laufen, aber mit node 6
Zur Vorbereitung würde ich gern auf Node 8 hochrüsten und versuche es mit:

pkill io
apt-get –purge remove node
apt-get –purge remove nodejs
apt-get autoremove
-sL https://deb.nodesource.com/setup_8.x | sudo -E bash –
apt-get install -y nodejs
node -v
npm install -g npm@4
npm -v

chmod +x reinstall.sh
./reinstall.sh

Komm schon ab der 2. Zeile nicht weiter:
root@iobroker05DEZ:/opt/iobroker# node -v
v6.17.1
root@iobroker05DEZ:/opt/iobroker# pkill io
root@iobroker05DEZ:/opt/iobroker# sudo apt-get –purge remove node
Paketlisten werden gelesen… Fertig
Abhängigkeitsbaum wird aufgebaut.
Statusinformationen werden eingelesen…. Fertig
Paket »node« ist nicht installiert, wird also auch nicht entfernt.
0 aktualisiert, 0 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.
root@iobroker05DEZ:

Eine Idee?

Martin
Gast
Martin

Hallo André, herzlichen Dank für deine Arbeit und die sehr guten Tutorials! Ich habe ioBroker schon seit einiger Zeit in der „alten“ Version auf der Synology laufen und bin Dank deiner Anleitungen jetzt auf die V3 umgestiegen. Da ich nicht so Linux bewandert bin, habe ich allerdings ein Problem mit dem Z-Wave Stick, der an der Synology steckt. Scheinbar weiß der Container vom Stick, aber ich bekomme ihn im Adapter nicht angezeigt. Alle beschriebenen Vorgangsweisen (die vorher funktioniert haben) wollen jetzt nicht mehr. dmesg | grep tty (im Container) [ 0.000000] console [ttyS0] enabled [ 6.011676] serial8250: ttyS0 at I/O… Mehr lesen »

Marcus
Gast
Marcus

Hallo André, ersteinmal vielen Dank für deine super Arbeit. Ich habe schon deine erste „Anleitung“ zur Installation auf der Synology genutzt und lief auch bis heute. Nun habe ich aber ein Problem hier mit der neuen „Version“ hier über Portainer. Portainer usw. läuft alles. Also bei mir funktioiert die „iobroker“ Installation irgendwie nich, oder?? Ich hatte die „V3“ Version schon einmal erfolgreich testweise installiert und lief auch. Nun wollte ich das ganze noch einmal einrichten aber ohne Erfolg. Schon etliche mal den Container neu eingerichtet usw. alles ohne Erfolg. Vielleicht kannst Du sehen wo es klemmt 🙂 Vielen vielen Dank… Mehr lesen »

Steven
Gast
Steven

Hallo André,
danke danke für das neue sehr gut erklärte Tutorial, hat alles sehr gut funktioniert und mit dem Portainer lassen sich wirklich viele weitere Möglichkeiten Einstellen.
Wie z.B. eine extra ip des Container, läuft stabiler (beim Einrichten/Programmieren) da ich nur eine DS418play habe und es eigentlich kein Docker offiziell gibt aber da hab ich nicht die Erfahrung ob es daran lag oder es allgemein an die Weboberfläche der DS zu diskonnekt gekommen ist.
Aber im Betrieb ist es wie vorher sehr stabil 😀

Aber eine kleine Frage hätte ich noch, hast du ein USB-Stick (z.B. Zigbee) in betrieb?

mfg steven

Thomas
Gast
Thomas

Danke für dieses gute Tutorial wieder mal. Hatte schon die alte Version von Dir benutzt und nun auf meinem DS auf die 3er hochgerüstet. Im Grunde alles ohne große Probleme, habe allerdings als Slave-Host noch ein RPi laufen, der wollte sich aus dem Multihost nicht rausnehmen lassen mehr, kamen nur Fehlermeldungen. Hintergrund war der, dass ich bisher beim Docker das Netzwerk „host“ benutzt hatte, aber nun ja ein MACVLAN eingerichtet hatte mit einer anderen IP-Adresse. Lösung: Auf dem RPi eingeloggt im Ordner /opt/iobroker/iobroker-data die Datei iobroker.json zum editieren geöffnet und darin dann die alte IP vom ioBroker-Dockersystem geändert auf die… Mehr lesen »