NEWS
IoBroker auf Docker/Unraid neu aufsetzen
-
Ich habe einen Unraid-Server in Betrieb genommen und nun möchte ich gerne meinen iobroker - Master von einem RasPi 4 auf den Unraid Server ziehen, um die stärkere Hardware zu nutzen und den RasPi4 als weiteren Slave einsetzen zu können. Da ich bei einem ähnlichen Projekt vor einem Jahr (Damals war ein QNAP ARM NAS als Host geplant) nicht erfoglreich war meine Installation unter Docker erfolgreich in Betrieb zu nehmen, wollte ich euch hier um euren Rat fragen wie ich das am Besten angehen soll:
Meine ioBroker Installation besteht aktuell aus
1x Master mit dem RasPi4
3x RasPi3 Slaves z.T. mit Zigbee Dongle und USB ModBus-Adaptern
typische Adapter: MQTT, Sonoff, inFlux, fronius, modbus, zigbee, rpi2, telegramm, vis, web,...Alle States und Objects laufen über eine Redis DB und meine VIS verwendet Daten von der InfluxDB und Grafana. Aktuell ist all das (IOB, Redis; Influx, Grafana) direkt am Host am RasPi 4 installiert.
Meine Frage ist nun:
-) Wie und mit welchen Variablen, speziell im Hinblick auf die Netzwerk-Einstellungen muss ich in den jeweiligen Containern wählen, sodass ich das aktuelle System mittels eines Backups auf den Unraid-Server ziehen kann sodass auch alle Anwendungen untereinander entsprechend Zugriff haben.
-) Und unter welchem Verzeichnissen würdet Ihr die Nutzerspezifischen Daten der Container ablegen? Im Chache und dann regelmässig ins Array speichern?
Damals habe ich das mittels MCVLAN auf der QNAP nicht zum Laufen gebracht - Speziell die Grafana Plugins waren in der VIS nicht zu sehen.
Ich glaube die Kombi aus IOB, Grafana, InfluxDB ist eine typische Kombination und ich würde mich freuen, wenn Ihr hier eure Erfahrungen teilt die Ihr in Kombination mit Docker gemacht habt.
vG Etze
-
@etzeste13
Das Problem mit grafana, das es nicht in vis angezeigt wird, hat nichts mit macvlan zu tun vermute ich.
Man muss in grafana eine Einstellung ändern, das der grafana Inhalt in einem Iframe auf einem anderen Rechner angezeigt wird. Dazu gibt es hier im forum bereits diverse Antworten.Buanet hat auf seiner Seite ein Tutorial wie man den Iobroker Container mit eigener ip Adresse konfiguriert.
Zum besseren Umgang mit docker ist portainer auch als Container, zu empfehlenIobroker und Datensicherung.
Mit dem Buanet Container ist die die komplette Iobroker Installation sowieso in einer eigenen volume definiert. Natürlich ist es zu empfehlen diese volume auf ein selbst gewähltes Verzeichnis des Host Systems zu Mappen. Von dort aus kann man dann den Backup selbst organisieren, aber auch den Backup Adapter nutzen. -
@etzeste13
Ich bin auch vor einiger Zeite auf Unraid umgezogen, verwende aber (bisher reicht mir echarts) kein Grafana.Wie und mit welchen Variablen, speziell im Hinblick auf die Netzwerk-Einstellungen muss ich in den jeweiligen Containern wählen, sodass ich das aktuelle System mittels eines Backups auf den Unraid-Server ziehen kann sodass auch alle Anwendungen untereinander entsprechend Zugriff haben.
ioBroker läuft im Host Modus und sonst habe ich alles auf Standard wie vorgeschlagen gelassen.
Und unter welchem Verzeichnissen würdet Ihr die Nutzerspezifischen Daten der Container ablegen? Im Chache und dann regelmässig ins Array speichern?
Unter appdata auch wie Standard. Appdata habe ich als Cache only eingestellt. Gibt aber auch die Meinung auf Prefer Cache zu stellen.
InfluxDB nutze ich auch mit den Standard Einstellungen.
Backup
Ich verwende den Backitup Adapter für ioBroker und zusätzlich noch das Komplett Backup über das CA Backup Plugin.Master/Slave
Wie gesagt läuft der ioBroker Master bei mir im Host Modus mit anderer IP als vorher. Dadurch mussten den Slaves nach Restore über den Backit up Adapter, die geänderte IP des Masters überiob setup custom
auf den Slaves eingestellt werden.Wenn ich mich recht entsinne wars das...
Edit: Gerade noch gelesen, das du Redis nutzt... ich wollte das auch mal, aber nach dem Umzug auf einen potenteren Server für Unraid habe keinen Mehrwert mehr darin gesehen bzw. war mir zu Aufwendig einen weiteren Container mit Redis auf zu setzen...
-
@FredF
@OliverIO
vorerst besten Dank für eure Inputs.Ich hatte auch schon darüber nachgedacht, dass ich alles direkt über host laufen lassen, ich denke ich probiere es einfach mal nach dem Toturial von Buanet mit MACVLAN ausprobieren, wenn es nicht gehen sollte, muss ich eben auf Host umsteigen...
D.h. du hast alle Umgebungsvariablen vom ioBroker -Docker einfach laut Standard gelassen, gestartet und dann das Backup eingespielt?
Wie hast du das mit der InfluxDB gemacht, hast du diese über das IOB-Backup bzw Restore wieder befüllt, oder hast du das im Container direkt einspielen müssen.
Bin mir auch nicht sicher wie hier das vorgehen bzgl des Redis-Servers ist. Kann das Backup hier auch über den ioBroker Contaner eingespielt werden, oder muss ich das auch im Redis-Server machen?
Das mit den IPs bei den Slaves ist mir soweit klar. Optimal wäre es mit Hilfe der Verwendung von MACVLAN das Backup am Docker Master aufzuspielen, die gleiche IP wie jetzt beim Master zu vergeben, den RasPi4 offline nehme und danach den neuen Container online geben... Müsste ich dann auch den gleichen HostNamen beim Master verwenden?
vG
-
@etzeste13 sagte in IoBroker auf Docker/Unraid neu aufsetzen:
D.h. du hast alle Umgebungsvariablen vom ioBroker -Docker einfach laut Standard gelassen, gestartet und dann das Backup eingespielt?
Ja
@etzeste13 sagte in IoBroker auf Docker/Unraid neu aufsetzen:
Wie hast du das mit der InfluxDB gemacht, hast du diese über das IOB-Backup bzw Restore wieder befüllt, oder hast du das im Container direkt einspielen müssen.
Ich hatte nicht so wichtige Daten und habe InfluxDB neu aufgesetzt
-
ich habe in portainer mir unter stacks einen service definiert.
das entspricht exakt dem docker-compose.
influx nutze ich nicht.
für die datenpunkte nutze ich noch redis
die besonderheit, das ich die globalen nodemodules ebenfalls in ein volume gelegt habe musst du nicht berücksichtigen. das ist für die adapterentwicklung
der backuporder liegt auf einem gemounteten verzeichnis zur nasalle verzeichnisse, die bei mir unter /home/iobroker/docker/volume liegen
werden zusätzlich zu dem iobroker backup noch separat gesichert.
das macvlan wurde separat definiert, da dies noch andere container nutzen, daher external=true
der redis container benötigt keine eigene ip-adresse im macvlan. iobroker kommuniziert sozusagen über ein weiteres virtuelles netz (nennt sich auch iobrokerprod4) mit redis.
beim konfigurieren kann als hostname dann einfach der servicename angegeben werden (also hier einfach redis4)version: '3' services: iobrokerprod4: restart: always image: buanet/iobroker:latest container_name: iobrokerprod4 hostname: iobrokerprod4 ports: - "8081:8081" environment: SETGID: 1001 SETUID: 1001 volumes: - /home/iobroker/docker/volume/iobroker_prod4:/opt/iobroker - /home/iobroker/docker/volume/iobroker_prod4_nodemodules:/usr/lib/node_modules - /media/iobroker_backup/:/opt/iobroker/backup networks: dockerMACVLAN: ipv4_address: 192.168.1.85 iobrokerprod4: redis4: image: "redis:alpine" volumes: - /home/iobroker/docker/volume/redis_prod4:/data networks: iobrokerprod4: networks: dockerMACVLAN: external: true iobrokerprod4:
-
@oliverio
Danke nochmals für euren Input, und sorry für die späte reaktion. Hatte einiges um die Ohren.Also ich habe deine Variantem it dem Docker Compose getestet, aber kriege es nicht "kompiliert"
Ich habe einen Fehler beim erstellen des MCVLAN. Das geht bei dir wahrscheinlich, weil du es auch für andere Container verwendest. Kannst du mir bitte noch die definition des "dockerMACVLAN" senden, damit ich das auch in den Stack mit aufnehmen kann?danke und beste Grüße,
-
schaue hier
https://smarthome.buanet.de/2020/09/macvlan-ueber-portainer-einrichten/docker-compose heist bei portainer stacks.
also die angaben können auch in ein docker-compose genauso übernommen werden.
da gibt es im artikel einen abschnitt dazu -
@oliverio
ich habe mir das nochmals angesehen und auch getestet, aber ich kann das MACVLAN nicht anlegen. Ich habe die Anleitungen von Buanet genommen und adaptiert, erhalte aber immer die Fehlermeldung:
Hier noch mein Docker Compose Versuch...
version: '3' services: iobrokerprod4: restart: always image: buanet/iobroker:latest container_name: iobroker hostname: iobroker ports: - "8081:8081" environment: SETGID: 1001 SETUID: 1001 volumes: - /mnt/user/appdata/iobroker/data:/opt/iobroker networks: dockerMACVLAN: ipv4_address: 192.168.1.81 redis: image: "redis:alpine" volumes: - /mnt/user/appdata/redis/data:/data networks: dockerMACVLAN: ipv4_address: 192.168.1.86 networks: dockerMACVLAN: driver: macvlan driver_opts: parent: br0 ipam: config: - subnet: 192.168.1.0/24 gateway: 192.168.1.1 ip_range: 192.168.1.80/29 aux_addresses: net-address: 192.168.1.87
Kannst du dir das erklären?
Kann es sein, dass der Promiscuous Modus nicht frei ist?
Kann es auch sein, dass das MACVLAN mit dem IPVLAN von br0 kollidiert?
bzw kannst du mir den stack senden mit dem du das "dockerMACVLAN" anlegen kannst?
vG
-
@etzeste13 sagte in IoBroker auf Docker/Unraid neu aufsetzen:
Kannst du dir das erklären?
Moin,
erklären nicht, habe mich damit noch nicht auseinandergesetzt.
Aber
failed to allocate gateway address 192.168.1.1 already in use
Deutet darauf hin, dass Du da versucht ein physikalisches Netzwerk ein zweites Mal zu definieren.
Wie gesagt, kenne Deine Installation nicht und habe mit MCVLAN noch nicht gearbeitet.VG
Bernd -
@etzeste13
Hi,
ich würde nicht die Definition des Netzwerkes in eine container definition setzen, da das nur einmal passieren kann. ich denke docker löscht beim neuaufbau des containers, die netzdefinition nichthier sind meine daten aus portainer
ich habe mein macvlan noch vor portainer direkt über die docker komandozeile erzeugt.wenn dann würde ich das macvlan direkt im portainer/netzwerkreiter direkt einmalig erzeugen oder auf der komandozeile mit docker
mein docker network ls sieht so ausNETWORK ID NAME DRIVER SCOPE 21d5e04a26f9 bridge bridge local df67750834f6 dockerMACVLAN macvlan local 1818dd5b2648 host host local 13b66af6905e none null local
ob das ipvlan stört weiß ich nicht, hab ich noch nie probiert. aber generell ist ipvlan was ziemlich ähnlcihes wie macvlan (bei ip wird nur eine mac adresse erzeugt bei maxvlan erhält jede ip eine eigene mac-adresse)
in der docker doku wird ipvlan empfohlen. aber wie gesagt bei mir funktioniert macvlan bestensder verweis auf das netzwerk kannst du ja im früheren post sehen. da steht dann external true, das bedeutet das das netz bereits existiert und docker sich drauf verlässt das er es unter dem namen auch findet.
Nachtrag:
Ich habe zu meinem bestehenden macvlan noch ein ipvlan erzeugen wollen. da kam dann die selbe fehlermeldung wie bei dir.
ein 2.macvlan wäre gegangen (ipbereiche dürfen sich nicht überlappen)
beim 2.macvlan stand dann aber als treiber auch null.
also schein ipvlan und macvlan parallel nicht zu gehen. hab im internet auch nix dazu gefunden.ich glaube die beste methode ist, das netzwerk direkt mit docker auf der shell zu definieren
wenn du schon ein ipvlan eingerichtet hast, kannst du es auch erst mal damit probieren und dafür eine eigene ipadresse angeben
-
@FredF @dp20eic @OliverIO
nochmals besten Dank für eure Hilfe. Eure Inputs haben mich vorerst mal einen Schritt weiter gebracht.Und zwar lag das Problem, dass ich in Undraid in den Docker-Einstellungen den Standard-Vorschlag von IPVLAN übernommen habe UND mir auch hier gleich dieses IPVLAN auf meinem Gateway angegelegt habe und das hat mir den Gateway blockiert.
Nach dem ich das geändert habe und mir standardmässig kein IPVLAN bzw MACVLAN Netzwerk habe anlegen lassen, konnte ich den Stack wie oben durchführen und die beiden Container laufen erst mal, und ich kann beide Container von Extern erreichen als auch untereinander pingen.
Werde weiter testen und berichten sollte es weitere Fortschritte geben oder Niederlagen.
vG
-
@etzeste13
Noch ein kleiner glitch. Vom Host kannst du nicht mit dem Container per ip kommunizieren. Dazu musst du dem Container noch ein separates Bridge Netzwerk zuweisen.
Hat mich letztes jahrein Weile gekostet als ich vom Host aus mit einem MySQL Container sprechen wollte.