ioBroker Docker Container – Backup & Restore
Das Thema Backup & Restore des ioBroker im Docker Container ist eigentlich gar nichts Besonderes. Denn grundsätzlich gilt nämlich, dass die ioBroker-Daten im Container genauso gesichert werden können wie in jeder anderen ioBroker-Installation auch.
Im Folgenden ein paar Informationen und Links zu den beiden wichtigsten Varianten des ioBroker-Backups und was ich euch diesbezüglich empfehle.
Variante 1: Backup auf Dateiebene
Beim Backup auf Dateiebene wird schlichtweg der gesamte Ordner in dem sich die ioBroker Installation befindet in einem Backup gesichert. Wie euch bekannt sein sollte, ist dies der Ordner /opt/iobroker
oder unter Docker eben jener Ordner bzw. jenes Volume auf dem Host, der/ das bei der Erstellung in den Container eingebunden wurde.
In der Regel erfolgt das Backup auf Dateieben über ein Script auf dem Docker Host. Hier sollte aber unbedingt berücksichtigt werden, dass der ioBroker Container vor dem Kopieren/ Sichern des ioBroker-Ordners beendet sein sollte.
Diese Methode eignet sich in Bezug auf das ioBroker Docker Image vor allem für Updates des ioBroker Containers innerhalb der Major-Versionen (z.B. innerhalb der Version 5.x.x). Durch simples Anlegen einer Kopie des Ordners oder Volumes auf dem Docker Host kann man so schnell und unkompliziert eine neue Version des Docker Images testen und im Zweifel auch schnell auf die alte Version zurück schwenken.
Achtung
Beim Wechsel der Major-Version, also z.B. von einem ioBroker Docker Image v4.x.x auf v5.x.x ändert sich innerhalb des ioBroker Images zumeist auch die Node-Version. In diesem Fall wären weitere Schritte über die Kommandozeile erforderlich. Details zum Wechsel der Node Version gibt es auch hier in der offiziellen ioBroker-Doku.
Da diese Methode eher etwas für fortgeschrittenen User ist, habe ich mich dazu entschlossen diesen Weg hier nicht weiter zu erörtern. Wer doch einen Blick wagen möchte, dem empfehle ich einen kurzen Blick in die Rubrik „Sichern & Wiederherstellen“ des folgenden, eigentlich bereits eingemotteten Tutorials:
Variante 2: Backup der Konfiguration (Best Practice)
Mittlerweile bringt der ioBroker aber eine wirklich gute eingebaute Möglichkeit mit ein Backup der Konfiguration direkt aus ioBroker heraus zu erstellen. Dies geschieht entweder über den Befehl iobroker backup
in der Kommandozeile oder mittels des Adapters „ioBroker.backitup“.
In beiden Fällen steht am Ende ein Archiv, dass die komplette Konfiguration des ioBroker enthält und sich ebenfalls per Kommandozeile oder Adapter einfach wiederherstellen lässt. Über den Adapter lassen sich außerdem zeitgesteuert Backups erstellen. Mit einem kleinen Copy Script auf dem Docker Host lässt sich das Backup dann problemlos regelmäßig auch an einen „sicheren“ Ort kopieren.
Der Große Vorteil dieser Variante besteht aber darin, dass das Backup in der Regel relativ klein ist und sich problemlos auf einem neuen oder beliebig anderem System mit ioBroker wiederherstellen lässt.
Für den Fall des ioBroker Docker Containers bedeutet dies, dass ihr getrost den alten Container und das zugehörige Image löschen könnt und nur allein aus dem Backupfile eure Installation wiederherstellen könnt.
Allerdings gibt es auch einen Nachteil. Währen ihr bei Variante 1 im besten Fall den Container einfach startet und alles wieder läuft, muss bei Variante 2 der ioBroker nach dem Restore erst die verwendeten Adapter (neu) installieren. Dies kann bei einer größeren Anzahl Adapter mitunter recht lange dauern…
Beispiel: Wiederherstellung eines ioBroker-Containers aus dem Backupfile
Wie immer gibt es also Vor- und Nachteile. Trotzdem ist Variante 2 aus meiner Sicht grundsätzlich die sauberere und zuverlässige Methode. Grund genug sie einmal in einem Beispiel durchzuspielen.
Wir stellen uns also vor, wir hatten einen Systemcrash. Das Backupfile vom gestiegen Backup ist vorhanden. Unser Docker Host (welcher Art auch immer) ist wiederhergestellt und unser Portainer läuft auch wieder.
Alles was wir nun zur Wiederherstellung tun müssen ist einen neuen ioBroker Container anlegen. Wie das geht haben wir ja bereits in diesem Tutorial besprochen:
Der Clou an der Sache: Seit Version 4.1.0 des ioBroker Container Images ist es möglich vor dem ersten Start ein Backupfile in das noch leere Verzeichnis, welches in den Container als /opt/iobroker
eingebunden wird, zu kopieren. Das Backup wird dann vom Startup-Script des Container erkannt und für die Wiederherstellung verwendet. Vollautomatisch.
Weiteren Informationen dazu findet ihr auch in der Readme auf Github. Bitte behaltet bei der Prozedur nach dem Start des Containers die Logausgabe im Auge. Hier könnt ihr sehen ob der Restore erfolgreich durchgeführt werden konnte oder es ggf. Probleme gab.
Nachdem der ioBroker Container dann gestartet ist und ihr Zugriff auf den ioBroker Admin bekommen habt, könnt ihr im dortigen Log beobachten wie der ioBroker nun die Adapter nach und nach neu installiert. Jetzt braucht ihr eigentlich nur noch etwas Geduld, und der Restore ist abgeschlossen.
Hinweis
Sollte es mal nicht mit der automatischen Wiederherstellung klappen, könnt ihr natürlich auch einfach einen neuen, leeren ioBroker Container starten, das Backupfile in das ioBroker-Verzeichis kopieren und den Restore über die Kommandozeile (mehr Infos) oder den Backitup-Adapter (mehr Infos) durchführen.
Ihr seht, so richtig kompliziert ist das Ganze nicht. Wie macht ihr es? Welche Erfahrungen habt Ihr zum Thema Backup & Restore vielleicht schon gemacht? Schreibt es gerne in die Kommentare. Ich freue mich auf euer Feedback.
MfG,
André
hallo, gute Anleitung :-), wenn ich jetzt noch wüsste, wie ich mein backupfile von der Fritz.NAS (ext. USB-Platte) in das Verzeichnis im ioB-Container /opt/iobroker bekomme, wäre es pefekt. WinSCP geht da wohl nicht, oder?
Hallo Markus,
ich glaube das Thema konnten wir mittlerweile lösen. 🙂 Und da du ja bereits den Weg zur ioBroker Discord Community gefunden hast noch mal ein Herzliches Willkommen von mir.
MfG,
André
Hallo Andre
schon wieder ich. hab mir leider letztens meinen iobroker-container selbst zerschossen. also neuer container, backupdatei aus dem alten container rüberkopiert und adapter backitup gestartet. der adapter startet mit dem update und weiter nichts mehr. hatte sich aufgehangen. mehrmals versucht, kein erfolg. leider hat eine iobroker installation ohne docker auch keinen erfolg gebracht. ich zeig hier einfach mal für alle meinen weg.
Mein System: selbst gebautes nas mit openmediavault (debian) und portainer, buanet-container über macvlan, compose datei in portainer
also in der compose den namen des containers und den pfad des neuen volumens geändert
container neu gestartet
die backupdatei iobroker…..backupiobroker.tar.gz per ssh aus dem alten volumen ins neue verschoben (/backups)
in portainer die konsole des neuen containers aufgerufen, connect
iobroker stoppen mit: pkill -u iobroker
backup zurückspielen: iobroker restore 0
adapter starten: iobroker start all
konsole wieder schließen disconnect
über portainer containers -> iobroker-> restart ausführen
über portainer die konsole des containers aufrufen, connect: iobroker update all
ob der letzte schriff nötig war bin ich mir nicht sicher, alle adapter waren bei mir aktuell aber danach lief das ganze wieder
Hallo Uwe,
danke für dein Feedback. Was den Backitup Adapter angeht, so unterstützt dieser aktuell noch keinen Restore unter Docker. Vielleicht war das das Problem.
MfG,
André
Hallo,
erstmal ein großes Lob, ich habe seit einer Woche Iobroker auf einer QNAP TS-251 im Docker laufen und bin begeistert… Ich habe nur ein Problem mit BackitUp. Das Backup wird erstellt, allerdings schafft er es nicht, den CIFS Mount hinzbekommen, um die Datei umzukopieren.
Fehlermeldung im Log:
Error: Command failed: sudo mount -t cifs -o username=iobroker,password=****,rw,file_mode=0777,dir_mode=0777 //192.168.1.3/Iobroker/Backup /opt/iobroker/backups
mount: /opt/iobroker/backups: permission denied.
Was kann man hier machen?
Danke & Gruß
Benny
Hallo Benny,
das mit dem Mount im Container ist so eine Sache. Ich selbst nutze das nicht sondern sichere die Backup Datei über den Host direkt aus dem gemounteten ioBroker Verzeichnis.
Im Forum (und auch im Discord) gibt es aber User die auch cifs mount im Container nutzen. Vielleicht stellst du die Frage am besten mal dort. Sorry.
MfG,
André
Hallo Andre, ich habe erfolgreich den Container installiert und ein altes iobroker-Backup (mit BackItUp erstellt) eingespielt.
Wenn ich jetzt jedoch ein BackItUp-Backup erstellen möchte bekomme ich folgende Fehlermeldung:
[ERROR] [iobroker] – (node:9452) UnhandledPromiseRejectionWarning: Error: ENOTDIR: not a directory, mkdir ‚/opt/iobroker/node_modules/iobroker.js-controller/tmp/backup‘
at Object.mkdirSync (fs.js:921:3)
at /opt/iobroker/node_modules/iobroker.js-controller/lib/setup/setupBackup.js:296:32
at processTicksAndRejections (internal/process/task_queues.js:97:5)
An was könnte das liegen?
Muss das Verzeichnis manuell angelegt werden?
Grüße
Jochen
Hallo Jochen,
anhand der Meldung würde ich instinktiv erstmal in das entsprechende Verzeichnis schauen. Sowohl in meiner Testumgebung als auch in meine Liveumgebung ist das angesprochene tmp-Verzeichnis allerdings leer (nutze auch backitup).
Wenn der ioBroker aber nach dem Verzeichnis verlangt würde ich es mal mit Anlegen versuchen. Würde sogar nach dem Anlegen den container einmal neu starten, damit die Berechtigungen passen (kann man natürlich alternativ auch gezielt setzen). Und dann auf ein Neues.
MfG,
André
Das Problem konnte gelöst werden. Aus mir unerklärlichen Gründen lag im Verzeichnis /opt/iobroker/node_modules/iobroker.js-controller/ eine binäre Datei mit dem Namen „tmp“. Nach Umbenennung/Löschung dieser Datei lieft der Adapter wieder (kalr: konnte Verzeichnis anlegen).
Interessanter Weise kam das Datum der tmp-Datei dem Wiederherstellungsdatum sehr nahe…
Hallo Andre,
im vergangenen Jahr (November 2019) habe ich dank deiner Anleitung v3 (Bridge-Mode) auf meiner DiskStation installiert und deine Backupvariante (Skript etc.) von V2 umgesetzt. Da ich Probleme mit dem UPnP-Adapter habe (er nutzt wolh Port 1900, welcher von der Audiostation belegt ist, wollte ich demnächst auf die Konfiguration mit MacVLAN umstellen.
1. Frage: Sollte ich aus deiner Sicht nun den Backup-Prozess auf den BackitUp-Adapter umstellen? Ist dieser die bessere Wahl?
2. Frage: Bei der Umstellung auf MacVLAN: Einfach Container runterfahren, Netzwerkeinstellungen ändern und Container mit dem normalen ioBroker-Verzeichnis mounten? Klappt dies?
Vielen Dank für deine Mühen hier!
Hallo Daniel,
zu 1. Warum nicht beides kombinieren? Bei mir läuft am Montag Morgen immer das Backup Script und sichert die Datenverzeichnisse aller meine Container. Zusätzlich läuft im ioBroker der backitup Adapter und erstellt jeden morgen eine Sicherung der Konfiguration. Dabei hält er stets 7 Tage vor. So habe ich in jedem Backuparchiv auch das Backup vom backitup Adapter und bin flexibel was die Wiederherstellum im Crashfall angeht. 🙂
zu 2. Ja, das sollte so funktionieren. Stelle aber vorher sicher, dass dein Admin Adapter nicht auf eine feste IP-Adresse gebunden ist. Sonst kommst du nach der Umstellung nicht drauf. Aber keine Angst, wenn du es vergisst kannst du das Binding auch über die Kommandozeile des Containers ändern.
MfG,
André