[Archiv] ioBroker unter Docker auf der Synology DiskStation (bis v2)

Achtung

Mit dem Stable Release v3.0.0 des Docker Images kann diese Anleitung nicht mehr 1:1 umgesetzt werden! Die Anleitung funktioniert nur bis zur Image-Version 2.0.0 vom 7. Dezember 2018. Aufgrund der Vielzahl der Änderungen am Image gibt es für die aktuelle Image-Version ein komplett neues Tutorial.

Kurze Einleitung

Nachdem meine ioBroker-Installation mit der Zeit immer weiter gewachsen ist und damit auch immer ressourcenhungriger wurde, reichten mir RaspberryPi und Cubietruck bald nicht mehr aus. Ich brauchte eine neue, leistungsfähigere Lösung.

Zum Glück hatte ich mir kurze Zeit vorher bereits eine DiskStation 1515+ von Synology zugelegt um meinen alten Linux-Server (mit all seinen Datei- und Medien-Diensten, sowie dem TV-Server) abzulösen. Also kurzerhand den Arbeitsspeicher der DS auf 6 GB aufgerüstet und… ja, Problem. In der neuen Version 6 des DSM war die Installation von VirtualBox (welches ich auf meinem Server genutzt hatte) nicht mehr möglich. Man konnte also keinen virtuellen ioBroker Server auf der DS laufen lassen. Das Aus für meinen Virtualisierungsplan? Nein.

Eine kurze Recherche mit den Stichworten “Virtualisierung” und “Synology” später stieß ich auf das Projekt Docker. Docker ist eine Virtualisierungsplattform, welche einen etwas anderen Ansatz verfolgt als vmWare, VirtualBox oder MS Hyper-V. Unter Docker werden nicht mehr ganze virtuelle Server erstellt, sondern lediglich sogenannte Container, die alle notwendigen Daten enthalten um eine einzelne Anwendung oder einen einzigen Dienst zum Laufen zu bekommen und zur Nutzung bereitzustellen. Diese Container werden, teilweise bereits fertig konfiguriert, als Images zum Download bereitgestellt.

Hinweis

Weitere Infos zu Docker hier (docker.com) oder hier (Wikipedia)

Also habe ich mich ein wenig in das Thema eingelesen und ein paar Tests gemacht. Ein ioBroker-Docker-Image gab es zwar schon, allerdings hatte ich hier einige Probleme benötigte Pakete für einzelne Container nach zu installieren. Ich wollte etwas was sich leichter administrieren lässt, also näher an einer virtuellen Maschine ist. Beim Durchwühlen verschiedenster Docker-Tutorials stolperte ich irgendwann über das Debian-Image. Einige Tests später stand fest: Es verhält sich in etwa so, wie eine Debian-Installation (z.B. Raspbian) auf dem RaspberryPi. Nachdem ich dann noch verstanden hatte, wie das mit dem Dockerfile funktioniert, dachte ich mir: So ein Image erstellen kannst du auch.
Gesagt, getan. Hier probiert und da getestet und letztendlich das Resultat auf Github und im Docker Hub veröffentlicht.

Wer sich also für den Quellcode interessiert, der wird auf Github fündig. Wen nur das fertige Image interessiert, der ist im Docker Hub gut aufgehoben.

Nun Gut, da ich meine Bastelei nicht für mich behalten wollte, habe ich ein entsprechendes Thema im ioBroker-Forum erstellt. Leider ist so ein Thread nicht unbedingt zur Dokumentation einer solchen Lösung geeignet. Daher jetzt hier einmal die offizielle Anleitung zu meinem ioBroker-Docker-Image. Falls du Probleme hast, oder Unterstützung benötigst, nutze gerne die Kommentare oder den Thread im ioBroker-Forum. Ich lese beides. 🙂

Standardinstallation von ioBroker

Beginnen wir mit der einfachen Standardinstallation von ioBroker unter Docker. Warum Standardinstallation? Ganz einfach. Nach den folgenden Schritten hast du innerhalb kürzester Zeit eine funktionierende ioBroker Installation unter Docker auf deiner DiskStation (DS) laufen. Allerdings liegen in dieser Konstellation sämtliche Daten (auch Konfigurationsdaten) in dem erstellten Container. Wenn es also mal Probleme mit Docker auf der DS oder einfach mit dem Container gibt, kann es passieren, dass die komplette ioBroker Installation verloren ist. Außerdem lässt sich so ein Container nur umständlich aktualisieren/ ersetzen. Ich empfehle daher unbedingt noch einen Blick auf die nächste Seite zu werfen auf der es um die „Erweiterte Konfiguration“ geht. Nun aber erstmal zur Standardinstallation.

Voraussetzungen

Damit die folgenden Schritte erfolgreich absolviert werden können, benötigst du eine eingerichtete Synology DiskStation mit installiertem und gestartetem Docker-Paket und Internetzugang. Sollte im Paketzentrum deiner DS kein Docker-Paket zu finden sein, so kann es sein dass dein Modell die Ausführung von Docker nicht unterstützt. Näheres Dazu findest du in den Paketinformationen auf der Synology-Webseite.

Schritt 1: Image herunterladen

Öffne zuerst die Docker-Oberfläche innerhalb des Webinterface deiner DS und wechsle in den Bereich „Registrierung“. Gib in das Suchfeld „iobroker“ ein und markiere das Image „buanet/iobroker“. Klicke anschließend auf den Download-Button. Im erscheinenden Auswahlfenster für die Version (Tag) wähle „latest“. Dies ist die letzte stabile Version. Das Image wird nun auf deine DS herunter geladen.

Hinweis

Seit 10.12.2017 ist es möglich verschiedene Versionen des Docker Images herunter zu laden. Ich empfehle die Version „latest“ zu verwenden (Das gesamte Tutorial basiert darauf!). Hierbei handelt es sich automatisch um die letzte stabile Version. Das Verwenden einer anderen Version empfehle ich nur erfahrenen Benutzern.

Schritt 2: Container aus Image erstellen

Wechsle in den Bereich „Abbild“ in der Docker-Oberfläche. Hier sollte nun das Image „buanet/iobroker:latest“ zur Verfügung stehen. Wähle das Image aus und klicke auf den Starten-Button.

Es öffnet sich ein Wizard zum Erstellen eines Containers. Vergebe einen Containernamen, z.B. „ioBroker“, und klicke auf den Button „Erweiterte Einstellungen“.

In den Erweiterten Einstellungen wähle das Kontrollkästchen „Automatischen Neustart aktivieren“ aus um sicherzustellen, dass der Container sich im Fehlerfall selbstständig neu startet.

Unter Netzwerk wähle „Dasselbe Netzwerk wie Docker Host verwenden“. Diese Einstellung sorgt dafür, dass siche ioBroker später „anfühlt“ als würde es direkt auf der DiskStation laufen und vermeidet Probleme mit dem Hostnamen.

Schließe die Erweiterten Einstellungen mit OK, und klicke den Weiter-Button. In der Zusammenfassung sind nochmals alle Einstellungen aufgeführt. Klicke auf „Übernehmen“.

Schritt 3: Container überprüfen

Öffne den Bereich „Container“ in der Docker-Oberfläche. Hier sollte nun der erstellte Container erscheinen. Prüfe ob der Container eingeschaltet ist und sich im Status „Läuft“ befindet.

Wähle den Container aus und klicke auf „Details“.

Unter „Prozess“ siehst du ob ioBroker erfolgreich gestartet ist. Falls dem so ist, sieht es ungefähr so aus:

Unter „Terminal“ hast du direkten Zugriff auf die Kommandozeile des Containers (Terminal). Sollte die Kommandozeile leer sein, klicke in das große graue Feld und drücke Enter. Nun sollte es wie folgt
aussehen:

Über die Kommandozeile kannst du nun z.B. optionale Softwarepakete nachinstallieren (manche Adapter/ Funktionen benötigen das) oder auch deine ioBroker-Installation steuern und ggf. Updates des js-controllers erledigen.

Hinweis

Seit Version 1.1.0 wird ioBroker im Docker Container nicht mehr als Dienst ausgeführt. Damit sind auch die bekannten Befehle „iobroker start“ und „iobroker stop“ nur noch begrenzt verwendbar. Mehr Infos zur Steuerung des ioBroker über die Kommandozeile gibt es in der Knowledge Base.

Schritt 4: ioBroker Weboberfläche öffnen

Wenn der Container ordnungsgemäß eingerichtet und gestartet ist, sollte deine neue ioBroker-Installation nun über das Webinterface erreichbar sein. Öffne dazu einfach den entsprechenden Pfad in einem Webbrowser:

http://[name_oder_ip_der_diskstation]:8081

Der Container ist damit eingerichtet. Wie oben aber bereits erläutert empfehle ich auf jeden Fall die „Erweiterte Konfiguration“.

Erweiterte Konfiguration

So, wer sich vorab schon einmal mit Docker befasst hat wird bemerkt haben, dass die beschriebene „Standardinstallation“ nicht unbedingt dem entspricht wofür das „Docker-Prinzip“ steht. So ist es im aktuellen Zustand zum Beispiel nicht möglich den Container über ein neueres Image zu aktualisieren ohne die in ioBroker getätigten Konfigurationen und installierten Adapter zu verlieren. Außerdem gestaltet sich eine Datensicherung (welche ja unbedingt ausserhalb des Containers liegen sollte) sehr umständlich. Kurzum, unsere ioBroker-Konfigurationsdaten sind im Container „gefangen“.
Deshalb machen wir es jetzt besser. Ziel ist es, die Daten aus dem Container auf die DiskStation zu verschieben und so den Weg für eine einfache Datensicherung frei zu machen sowie eine Aktualisierungsmöglichkeit des Containers (ohne Datenverlust) zu schaffen.

ioBroker-Verzeichnis auf die DiskStation auslagern

Zum Verschieben des ioBroker-Verzeichnisses nutzen wir die Möglichkeit Verzeichnisse von der DiskStation in den Container durchzureichen, neudeutsch zu mounten. Wir benötigen dazu einerseits einen, nach Möglichkeit leeren, Ordner auf der DS, andererseits einen „Transfer-Ordner“ im Container in den wir den DS-Ordner mounten können. Los geht’s.

Das Anlegen eines Verzeichnisses auf der DiskStation sollte keine so große Hürde darstellen. Öffne dazu einfach die „Systemsteuerung“ deiner DS und lege einen neuen „Gemeinsamen Ordner“ mit dem Namen „docker“ an (in meinem Fall auf volume1). Anschließend lege über die „File Station“ innerhalb des Ordners einen weiteren Ordner mit dem Namen iobroker_mount an. Natürlich kannst du die Namen der Verzeichnisse frei wählen.

Das Anlegen des „Transfer-Verzeichnisses“ im Container ist sogar noch einfacher. Hierzu reicht ein einziger Befehl im Terminal des Containers. Öffne also deine Docker-Oberfläche, wechsle in den Bereich Container, wähle den ioBroker Container und klicke auf Details. Wechsle ins Terminalfenster und gebe folgenden Befehl ein:

mkdir /opt/transfer

Nun kannst du das Verzeichnis auf der DS im Container einhängen (mounten). Dazu muss der Container ausgeschaltet sein. Schließe also die Container-Details und beende den Container über den Ausschalter.

Sobald der Container Angehalten ist, markiere ihn und klicke auf den „Bearbeiten“-Button. Unter „Volume“ gilt es nun das Ordnerpaar zu hinterlegen. Klicke dazu auf „Ordner hinzufügen“ und wähle deinen Ordnerpfad auf der DS. In meinem Beispiel: „/docker/iobroker_mount“. Unter Mount-Pfad gib das Transfer-Verzeichnis innerhalb des Containers an. In meinem Beispiel: „/opt/transfer“. Bestätige die Änderungen mit „OK“ und starte den Container wieder.

Es wird nun Zeit die Daten zu kopieren. Öffne Dazu die Details deines Containers und wechsle ins Terminalfenster. Mit den folgenden Befehlen stoppst du ioBroker und kopierst das ioBroker-Verzeichnis in das gemountete Verzeichnis auf der DS:

cd /opt/iobroker
pkill io
cp -a /opt/iobroker/. /opt/transfer

Wenn alle Dateien Kopiert sind, schließe die Details des Containers und stoppe ihn wie oben beschrieben. Über die „File Station“ kannst du schauen ob nun Dateien im Verzeichnis „/docker/iobroker_mount“ liegen. Ist dies der Fall, so müssen wir nun nur noch den Mount-Pfad im Container anpassen. Öffne dazu den Bereich „Volume“ im Bearbeiten-Dialog deines Containers und ändere den Mount-Pfad auf „/opt/iobroker“. Wenn du nun deinen Container startest arbeitet er mit den Daten aus dem „iobroker_mount“-Verzeichnis auf deiner DS.

Aber wozu ist das nun gut? Ganz klar. Mit dem Verschieben des ioBroker-Verzeichnis liegen nun alle Konfigurationen, installierten Adapter und Nutzdaten auf deiner DS. Der Container ist nur noch die austauschbare Umgebung in der ioBroker gestartet wird. Dies bedeutet, der Container ist austauschbar. Zum Beispiel mit einer neueren Version.

Aktualisieren des Containers

Achtung

Mit dem Stichtag 05.12.2018 wurde die Node-Version im Docker-image von Node6 auf Node8 angehoben. Damit ioBroker nach dem Update des Containers wieder ordnungsgemäß läuft bitte unbedingt die Anmerkungen zum Wechsel der Node-Version aus der offiziellen ioBroker Dokumentation berücksichtigen!!!

Software wird immer schneller weiter entwickelt, es gibt Updates oder gar komplett neue Versionen. Dies trifft natürlich auch auf die Software und Bibliotheken innerhalb des Docker Containers zu, welche mit dem Image geladen worden sind. Es empfiehlt sich von Zeit zu Zeit diese Updates auch in den erstellten Container einfließen zu lassen. Mit den bis hier her getätigten Konfigurationen und dem Wissen, dass mein ioBroker-Image in der Regel jede Nacht automatisch aus den aktuellsten Paketquellen aktualieiert wird, wird diese Aufgabe zum Kinderspiel. Und so geht es:

Öffne die Dockeroberfläche auf der DS. Damit du deine Containereinstellungen nicht neu tätigen musst, wechsle in den Bereich „Container“ und wähle unter Einstellungen den Punkt „Exprotieren“. Wähle „Containereinstellungen Exportieren“ und gebe ein Ziel für die Einstellungen an. Ich empfehle die Einstellungen in den Docker-Ordner auf der DS zu exportieren, dort können Sie anschließend auch liegen bleiben und ggf. wiederverwendet werden.

Sind die Einstellungen gesichert, stoppe den ioBroker-Container und lösche ihn. Wechsle in den Bereich „Abbild“ und lösche auch das alte Image „buanet/iobroker:latest“. Lade das Image anschließend unter Registrierung neu herunter, wie es auch in der Standardinstallation beschrieben ist. Unter Abbild sollte nun wieder ein Image mit dem Namen „buanet/iobroker:latest“ zu finden sein.

Wechsle in den Bereich „Container“ und klicke auf „Einstellungen > Importieren“. Wähle die zuvor erstellte Exportdatei aus, überprüfe den Namen und klicke „OK“. Der Container wird nun aus den zuvor gesicherten Einstellungen auf Basis des neu heruntergeladenen Images erstellt und befindet sich anschließend auf dem neusten Stand. Den neu erstellten Container noch starten und fertig.

Achtung

Wie es ausschaut hat sich innerhalb des Docker Pakets von Synology etwas in Bezug auf den Hostnamen geändert. Wurde bisher der Hostname der DS verwendet, so wird ab sofort im Container der Name des Containers verwendet. Da ioBroker auf den Hostnamen „geschlüsselt“ ist, kann es sein dass nach dem Update des Containers die ioBroker Adapter nicht mehr starten. Um dies zu korrigieren reicht es folgende Schritte aus zu führen:

cd /opt/iobroker
pkill io
iobroker host this (bei multihostsystemen: iobroker host [hostname der ds])

Soweit, so gut. Nachdem wir die Daten nun nicht mehr im Container liegen haben, kann ein defekter Container uns nichts mehr anhaben, aber wie sieht es mit Problemen aus, die innerhalb des ioBroker-Verzeichnisses auftreten könnten? Wie sichert man sich gegen fehlgeschlagene Updates des ioBroker-Kerns oder der diversen Adapter ab? Was passiert wenn man aus Versehen seine Visualisierung löscht? Ganz klar, ein (regelmäßiges) Backup des ioBroker-Verzeichnisses muss her. Wie ich das gelöst habe, darüber auf der übernächsten Seite mehr. Auf der nächsten Seite widme ich mich erst einmal dem Umzug einer bestehenden ioBroker-Installation auf die DiskStation mit Docker. Wen dies nicht betrifft, der kann also gerne gleich eins weiter springen…

Installation von anderem System umziehen

Alles was wir bis hierher getan haben, bezog sich ausschließlich auf das Aufsetzen eines neuen frischen ioBrokers. Doch was ist mit bestehenden Installationen z.B. auf einem Raspberry oder einem Cubietruck? Kein Problem, sofern ioBroker vorher bereits auf einem Linuxsystem lief.

Vorüberlegungen

Zuerst einmal sei gesagt: Es gibt mehrere Wege einen ioBroker auf ein neues System umzuziehen. Doch für mich hat sich eigentlich nur ein Weg bewährt, und der führt über den Transfer des kompletten ioBroker-Ordners. (Gilt bei mir übrigens auch für das Backup, siehe nächste Seite)

Was habe ich also vor? Eigentlich ganz simpel. Ich sichere auf meinem Quellsystem (von wo ich umziehen möchte) den kompletten ioBroker-Ordner und bringe ihn auf meine DiskStation. Dort überschreibe ich dann alle Dateien in meinem (neuen) ioBroker-Verzeichnis mit den Daten aus dem Quellsystem. Anschließend, aufgrund der Änderung des Hostnamens, noch ein ioBroker-Kommando drüber laufen lassen und fertig. Klingt einfach, ist es auch. Wenn man den ein oder anderen Fallstrick kennt.

Hinweis

Ich baue an dieser Stelle auf dem auf, was auf den vorherigen Seiten beschrieben ist. Das bedeutet: Ich gehe von einer laufenden ioBroker-Installation aus, bei der das ioBroker-Verzeichnis auf der DS liegt und lediglich in den Container gemountet ist. Weiterhin setze ich voraus, dass ioBroker auf dem Quellsystem bereits unter Linux und, bei Verwendung des Docker-Images mit Download nach dem 05.12.2018, unter Node8 lief.

Schritt 1: Daten vom Quellsystem (alt) holen

In welcher Form man Daten vom Altsystem holt und in den ioBroker-Ordner kopiert ist letztendlich jedem selbst überlassen. Ich habe grundsätzlich gute Erfahrungen damit gemacht das Verzeichnis über den Linux-Befehl „tar“ in ein Archiv zu packen, und am Ziel entsprechend wieder zu entpacken. Aus dem Forum weiß ich, dass es auch viele viele andere Wege gibt, die mehr oder weniger gut funktionieren. Vermeiden solltet ihr aber auf jeden Fall eine Zwischenstation auf einem Windows-Rechner. (Also etwa ioBroker-Verzeichnis des Quellsystems als Netzlaufwerk einbinden und Inhalt auf den eigenen PC kopieren) Hat was mit Dateisystemspezifikationen und Zugriffsrechten zu tun.

Gehen wir also mal davon aus wir haben einen Raspberry Pi als Quellsystem mit dem Verzeichnis /opt/iobroker als ioBroker-Verzeichnis. IoBroker selbst ist natürlich gestoppt.
Zum (ver-)packen deines ioBroker-Verzeichnisses braucht es nur einen Befehl:

tar -cf /opt/iobroker_verzeichnis.tar /opt/iobroker

Achtung

Für den Befehl „tar“ gibt es viele mögliche Parameter. Die hier aufgeführten Befehle funktionieren mitunter nur in der von mir beschriebenen Umgebung. Das heißt: ioBroker liegt sowohl auf dem Quell- als auch auf dem Zielsystem im Pfad /opt/iobroker. Es kann also sein dass ihr ggf. andere Parameter verwenden müsst/ könnt. Bitte informiert euch bei Bedarf daher selbstständig über den Befehl „tar“. Danke.

Wenn alles geklappt hat, liegt jetzt auf dem Quellsystem im Verzeichnis „/opt“ eine Datei mit dem Namen „iobroker_verzeichnis.tar“. Diese Datei können wir jetzt problemlos (auch über Betriebssysteme bzw. Dateisysteme hinweg) kopieren.

Schritt 2: Sicherungsdatei in den Container kopieren und entpacken

Nachdem wir jetzt das tar-Archiv vom Quellsystem geholt haben, muss es nur noch in den Container um es dort über die Kommandozeile wieder zu entpacken. Das geht, wie bereits früher in diesem Tutorial erläutert, am besten über ein Transfer-Verzeichnis. Dazu empfiehlt es sich auf der DS neben dem ioBroker-Verzeichnis (/volume1/docker/iobroker_mount) noch ein weiteres Verzeichnis z.B. „iobroker_transfer“ zu erstellen und parallel in den Container zu mounten (vgl. dazu die ersten Schritte unter „ioBroker-Verzeichnis auf die DiskStation auslagern“ auf Seite 3 des Tutorials).

Anschließend das tar-Archiv in das Transfer-Verzeichnis kopieren und das Terminal des Containers über die Docker-Oberfläche öffnen. Die folgenden Befehle stoppen ioBroker im Container und entpacken das Archiv.

cd /opt/iobroker
pkill io
cd /opt/transfer
tar -xf iobroker_verzeichnis.tar -C /

Schritt 3: ioBroker für den Start auf neuem System vorbereiten und starten

An dieser Stelle ist ioBroker noch nicht lauffähig, da sich mit dem Umzug auf die DS in der Regel auch der Hostname geändert hat. Um ioBroker den neuen Hostname mit zu teilen reicht ein einfacher Befehl, ausgeführt im ioBroker-Verzeichnis über das Terminal des Docker-Containers:

cd /opt/iobroker
iobroker host this

Anschließend einfach den Container neu starten.

Hat alles geklappt? Schön, dann fehlt nur noch ein Thema: Datensicherung. Mehr dazu auf der nächsten Seite.
Falls dein Umzug nicht geklappt haben sollte, dann nutze gerne die Kommentare auf der ersten Seite dieses Tutorials oder den angesprochenen Thread im ioBroker-Forum um Unterstützung aus der Community zu erhalten.

Datensicherung und Wiederherstellung

Im Grunde haben wir im letzten Teil ja bereits ein Backup (auf dem Quellsystem) erstellt und anschließend daraus im Docker unsere Installation wieder hergestellt. Trotzdem gibt es in diesem Kapitel das Ganze noch einmal ein bisschen ausführlicher und am Ende vor allem automatisiert.

Auch zu diesem Thema gilt natürlich, dass es wieder viele Möglichkeiten gibt sein Ziel zu erreichen. Aber so habe ich es nun mal gemacht.

Überlegungen zu Backups

Zum Thema Backups gibt es viele Meinungen und ebenso viele Möglichkeiten. Ich persönlich habe stets die Anforderung, dass ein Backup sowohl vollständig automatisiert, als auch bei Bedarf durchführbar sein sollte. Des Weiteren bin ich, dank immer weiter wachsenden Speicherkapazitäten kein Fan von inkrementellen Backups. Für das Backup von ioBroker bedeutet dies: Ich lege Wert auf eine bestimmte Anzahl kompletter Backuparchive, welche bei Bedarf auch das Extrahieren von einzelnen Dateien erlauben.

Meine Backup-Strategie für den ioBroker-Container sieht daher wie folgt aus. Da der Container seit dem Auslagern des ioBroker-Verzeichnisses auf die DS nur noch eine leere Hülle ist, braucht hier normalerweise nichts gesichert werden. Ausnahme bildet dabei die Container-Konfiguration, welche sich aber leicht über die Docker-Oberfläche exportieren lässt. Da sich die Konfiguration des Containers in der Regel nicht ändert, braucht hier natürlich kein regelmäßiges Backup erfolgen. Außerdem wäre es ja jederzeit möglich anhand dieses Tutorials den Container neu zu erstellen.

Bleibt für ein Backup lediglich der ioBroker-Ordner auf der DS. Dieser lässt sich natürlich mit einer Reihe von Backup-Tools der DS jederzeit sichern, da aber ioBroker in der Regel immer läuft (und damit ja auch Dateien geöffnet bzw. gerade im Zugriff sind) habe ich da so meine Bedenken.

Also habe ich kurzerhand ein Script geschrieben welches diese Aufgabe ganz nach meinen Vorstellungen erledigen soll und werde hier kurz beschreiben wie man es korrekt einsetzt.

Vorbereitungen

Als erstes benötigen wir einen Speicherplatz für das Backup sowie einen sicheren Ort für das bereits erwähnte Backup Script. Wie wäre es mit einem „iobroker_backup“-Verzeichnis im Docker-Ordner auf der DS? Analog zu den bereits auf den vorherigen Seiten erstellten Verzeichnissen „mount“ und „transfer“. Damit wir eine Trennung zwischen Backuparchiven und dem Script haben, fügen wir noch einen Ordner „archiv“ hinzu. Etwa so:

Wie im Screenshot zu sehen ist, liegen in meinem Ordner bereits zwei Dateien. Die Datei „iobroker.json“ ist der Export der Containereinstellungen, den ich etwas weiter oben bereits angesprochen habe. Die Datei „backupscript.sh“ ist das eigentliche Script. Wie es dorthin kommt, dafür gibt es wieder viele Wege. Einer wäre, dass du das Script mit dem folgenden Inhalt lokal erstellst und dann über die FileStation in den ordner lädst. Aber Achtung: Der Texteditor deiner Wahl sollte in der Lage sein, dein Script auch UNIX-kompatibel zu speichern. Mehr dazu verrät dir wie immer Google.

Das Script selbst findest du auf Github unter folgendem Link:

https://github.com/buanet/tutorials/blob/master/iobroker-unter-docker-auf-der-synology-diskstation/backupscript.sh

Hinweis

Die aktuelle Version des Scripts findest du immer hier auf Github. Bitte Beachte auch die Hinweise im Script. Solltest du andere Verzeichnisse nutzen oder deinen ioBroker-Container nicht „iobroker“ genannt haben, passe die entsprechenden Werte bitte an bevor du die Datei auf die DS lädst.

Backup planen

Damit das Backup-Script regelmäßig automatisch ausgeführt wird, bedienen wir uns eines weiteren Bordmittels der DiskStation: Dem Aufgabenplaner. Über Ihn ist es möglich, neben vielen DiskStation-Aufgaben auch eigene Scripts automatisiert ausführen zu lassen. Den Aufgabenplaner findest du auf der DS unter „Systemsteuerung > System“.

Dort angekommen erstellen wir eine neue geplante Aufgabe über „Erstellen > Geplante Aufgabe > Benutzerdefiniertes Script“. Wir vergeben unter „Vorgang“ einen aussagekräftigen Namen (z.B. ioBroker Backup) und erstellen einen Zeitplan. Ich persönlich lasse das Backup einmal wöchentlich laufen. Sollte ich zwischenzeitlich größere Änderungen machen wollen, stoße ich das Backup auch mal manuell an.

Im Register „Aufgabeneinstellungen“ ist dann noch der Befehl anzugeben, der das Script ausführt. Hier reicht es den Pfad zum Script einzutragen. Etwa so:

/volume1/docker/iobroker_backup/backupscript.sh

Wenn du möchtest, hast du bei den „Aufgabeneinstellungen“ auch noch die Möglichkeit dir die Scriptausgabe per E-Mail zusenden zu lassen. Das ist vielleicht ganz hilfreich wenn man das Script gerade neu implementiert hat und die Funktionalität überprüfen möchte.

Das war es dann eigentlich auch schon zum Backup. Wenn alles geklappt hat, dann liegt ab sofort nach jedem erfolgreichen Durchlauf des Backupscripts eine komplette, gepackte Version des ioBroker-Ordners unter dem im Script angegebenen Pfad.

Hinweis

Bitte berücksichtige, dass Backup-Archive die älter als 90 Tage sind standardmäßig beim Aufruf des Scripts automatisch ermittelt und gelöscht werden.

Wiederherstellung eines Backups

Nunja, eigentlich habe ich in diesem Tutorial schon alles zur Wiederherstellungsprozedur gesagt. Schau doch einfach nochmal auf Seite 3 an die Stelle, an der wir den ioBroker von unserem Rasperry Pi auf die DS umgezogen haben. Im Prinzip haben wir dort bereits (manuell) ein Backup angelegt und anschließend auf der DS wieder hergestellt.

Dennoch haben wir im Fall des über das Backup-Script erstellten Archivs eine etwas andere Ausgangslage. Während wir beim Umzug unseres ioBroker-Ordners sowohl das Erstellen, als auch das Entpacken des Archivs vom ioBroker-Host aus erledigt haben, so hat unser Backuparchiv jetzt jedoch der Aufgabenplaner und damit die Kommandozeile der DiskStation erstellt.

Für jemanden, der bereis Zugriff auf die Kommandozeile seiner DS hat, kein Problem. Einfach den Container stoppen, das Archiv wieder in den ioBroker-Ordner („/volume1/docker/iobroker_mount“) entpacken und Container wieder starten. Doch was wenn man sich, z.B. aus Sicherheitsgründen, nicht auf die Kommandozeile der DS verbinden möchte? Ganz einfach. Man nutzt die Kommandozeile des ioBroker-Containers.

Backuparchiv für den Container verfügbar machen

Unser Backuparchiv liegt ja nun in einem Ordner, auf den unser ioBroker-Container keinen Zugriff hat. In meinem Beispiel ist das folgender Pfad auf der DS:

/volume1/docker/iobroker_backup/archiv

Um das Archiv für den Container greifbar zu machen, müssen wir es entweder umkopieren oder den Pfad in den Container mounten. Ich entscheide mich für das Umkopieren. Warum haben wir wohl sonst einen Ordner „iobroker_transfer“?

Gesagt getan. Über die File Station navigiere ich in den Ordner in dem das Backup liegt (im Beispiel: docker > iobroker_backup > archiv) und klicke auf das gewünschte Archiv mit der rechten Maustaste. Im erscheinenden Menü wähle ich „Kopieren nach…“ aus und kopiere mein Archiv in den ioBroker-Transfer-Ordner (im Beispiel: docker > iobroker_transfer). Weil ich meinen Transfer-Ordner noch im Container gemountet habe, habe ich jetzt über die Kommandozeile des Containers Zugriff auf mein Backuparchiv.

Backuparchiv über die Kommandozeile des Containers entpacken

Jetzt muss nur noch entpackt werden. Falls noch nicht geschehen empfiehlt es sich vorher ioBroker über die Kommandozeile des Containers zu beenden. Da wir das jetzt ja schon ein paar mal gemacht haben, gehe ich darauf mal nicht weiter ein.

Anschließend reichen die folgenden Kommandos um das Backup in den ioBroker Ordner zu entpacken:

cd /opt/iobroker
tar -xzf /opt/transfer/archivname.tar.gz

Anschließend einfach den Container neu starten.

Soooo, das sollte es dann auch erstmal gewesen sein. Mit Hilfe meines, dann doch recht ausführlich gewordenen, Tutorials sollte es nun jedem möglich sein, eine ioBroker Instanz unter Docker auf einer unterstützten Synology Disk Station in Betrieb zu nehmen und zu warten.

Bei Fragen und Anregungen zum Tutorial freue ich mich auf eure Kommentare. Bitte berücksichtigt, dass ich keinen individuellen Support per E-Mail leisten kann. Nutzt also bitte die öffentlichen Kanäle wie Kommentare, Foren oder Social Media. Gerne könnt ihr mich bei Bedarf auch per E-Mail oder Direktnachricht auf einen Post/ Thread/ Kommentar aufmerksam machen. Danke.

MfG,
André

Änderungshistorie

2017-12-10

Aufgrund kleinerer Probleme mit dem Docker Image musste ich einige Änderungen vornehmen. Hierdurch hat sich auch das Tutorial geringfügig geändert. So sind zum Beispiel die Befehle „iobroker stop“ und „iobroker start“ nur noch begrenzt nutzbar. Weiterhin ist es ab sofort möglich verschiedene Versionen des Docker Images herunter zu laden. Entsprechende Hinweise zu den Veränderungen finden sich an der jeweiligen Stelle im Tutorial.

2018-08-21

Aus den bisherigen Diskussionen und Kommentaren habe ich einen kleinen Troubleshooting-Guide erstellt der neben häufig auftretenden Fehlerbildern auch wichtiges Basiswissen zu ioBroker, Docker & Co beinhaltet. Das Troubleshooting habe ich als zusätzliche Seite an den Artikel angehängt und werde es bei Bedarf entsprechend erweitern.

2018-12-05

Mit dem heutigen Update des Docker-Container-Images auf Version 2 wurde die verwendete Node-Version auf node8 angehoben. Auf Neuinstallationen hat dies keine Auswirkungen, wohl aber auf Updates bestehender Installationen von vor dem 05.12.2018. Nach dem Wechsel der Node-Version muss nämlich innerhalb des ioBrokers das Script „reinstall.sh“ ausgeführt werden, um die Installierten Adapter mit Node8 verwenden zu können. Mehr Informationen dazu gibt es in der offiziellen ioBroker Dokumentation.

2018-12-12

Nachdem es in der Vergangenheit häufiger Verwirrung um den „tar“-Befehl gab, habe ich heute den entsprechenden Abschnitt einmal überarbeitet und den bösen Parameter „-P“ aus dem Spiel genommen. 🙂 Leider hat es mir dabei ein bisschen mein Beitragslayout zerschossen. Wer also seltsame Sonderzeichen an Stellen findet, wo diese nicht hin gehören, darf sich gerne mal bei mir melden. Danke!

2020-02-08

Anpassung des Beitrags an neues Tutorial Layout

2020-09-15

Umzug auf smarthome.buanet.de sowie Archivierung und Deaktivierung der Kommentarfunktion