openHAB: Installation mit Docker Container auf Synology VM – Teil 3
Im dritten Teil der Reihe beschäftigen wir uns mit der Installation unseres openHAB Docker Containers und der Ersteinrichtung eben diesem. Als Virtualisierungsumgebung verwenden wir eine Synology Diskstation, auf welcher eine Linux VM mit Ubuntu läuft. Wer die Installation der VM, sowie von Linux verpasst hat, sollte sich vorab noch die beiden ersten Teile näher anschauen:
- openHAB: Installation mit Docker Container auf Synology VM – Teil 1
- openHAB: Installation mit Docker Container auf Synology VM – Teil 2
Wenn du direkt beim dritten Teil einsteigst und dich nicht durch die ersten beiden Artikel wühlen möchtest, folgende Vorkehrungen sind bislang getroffen worden:
- Auf der Synology DS wurde der Virtual Machine Manager (VMM) als Applikation installiert.
- Eine Linux VM mit 1vCPU sowie 2GB RAM wurde angelegt.
- Als Linux Distribution haben wir auf „Ubuntu 20.04“ gesetzt.
- Docker wurde als Package installiert.
- Für besseren Schutz wurde der non-root User mit einem SSH Key ausgestattet. Login direkt via Root oder mittels Passwort wurden untersagt (optional).
NFS Share als Docker Volume
Jedes Mal, wenn man einen Container durch einen neuen ersetzt, werden alle sich darin befindlichen Daten verworfen. Und das kommt gar nicht so selten vor. So wird beispielsweise bei jedem openHAB Update der alte Container gelöscht und durch die aktualisierte Version ersetzt. Nun muss man allerdings gewährleisten, dass die Konfigurationsdaten erhalten bleiben und eben nicht gelöscht werden. Dazu kommen bei Docker die „Volumes“ zum Einsatz. Ein Volume ist dabei die Schnittstelle zwischen dem virtualisierten Container und der Host-Maschine und bietet dem Container persistenten Speicher. Jetzt wird es ein wenig komplexer, daher bitte besonders aufpassen:
Die von uns installierte virtuelle Maschine besitzt bereits ein Dateisystem. Theoretisch ist es also möglich, dem Docker Container einfach den Speicherplatz auf der VM selbst als Volume zur Verfügung zu stellen. Da wir als physischen Server eine Synology DS verwenden, welche ebenfalls ihr eigenes Dateisystem mitbringt, erstellen wir stattdessen auf der DiskStation ein NFS Share und binden dieses auf der Linux VM ein. Innerhalb dieses NFS Shares stellen wir dann die für die Docker Container benötigten Volumes bereit. Das hat den großen Vorteil, dass wir alle Daten gesammelt auf der Synology DS lagern und somit auch ganz einfach mittels HyperBackup sichern können. Wenn ihr es bevorzugt, die Volumes direkt auf der Linux VM bereitzustellen, könnt ihr die nachfolgenden Schritte überspringen.
NFS Share auf Synology DS erstellen
Falls ihr das Network File System (NFS) auf eurer Synology DS noch nicht aktiviert habt, müsst ihr es vorab in der Systemsteuerung erlauben.
Anschließend können wir bereits den Ordner erstellen. Dazu wechseln wir am Synology DSM in die Systemsteuerung, öffnen die „Freigebenden Ordner“ und klicken auf „Erstellen“.
Im neuen Fenster erstellen wir einen neuen Ordner mit dem Namen „docker_volumes“, deaktivieren den Papierkorb und lassen die restlichen Einstellungen auf den Standardeinstellungen.
Sobald der Ordner erfolgreich angelegt wurde, müssen wir nun abschließend noch die NFS Berechtigungen vergeben. Dafür bearbeiten wir den zuvor erstellten Ordner, wechseln in den Reiter „NFS-Berechtigungen“ und legen einen neuen Eintrag mit der IP Adresse unserer Linux-VM an.
Share in Linux VM mounten
Somit hätten wir das NFS Share auf der Synology DS erfolgreich erstellt. Damit wir es nun auch noch auf der Linux-VM verwenden können, müssen wir es mounten. Vorab müssen wir allerdings auf der VM noch ein zusätzliches Package installieren:
root@sw-linux01:/home/schweiger# sudo apt install -y nfs-common
Anschließend erstellen wir auf der VM einen Ordner, welcher als Mountpoint dient:
root@sw-linux01:/home/schweiger# mkdir /mnt/docker_volumes
Nun editieren wir mittels „nano /etc/fstab“ und fügen dort das NFS Share von der DiskStation hinzu:
Abschließend mounten wir das Share:
root@sw-linux01:/mnt# mount /mnt/docker_volumes/
Um auf Nummer sicher zu gehen, kann man beispielsweise jetzt auch noch einen Ordner in „docker_volumes“ erstellen und prüfen, ob dieser auch auf der Synology vorhanden ist. Wenn das der Fall ist, wurde das Share erfolgreich auf der VM eingebunden und wir können zum nächsten Schritt übergehen.
openHAB Container erstellen
Immer wenn es möglich ist, sollte man auch bei Docker Containern darauf achten, dass man sie mit einem Benutzer ausführt, der keine Root Rechte besitzt. Daher legen wir auch hier einen neuen openHAB User an und fügen ihn als Member zur Gruppe openHAB hinzu.
root@sw-linux01:/# sudo useradd -r -s /sbin/nologin openhab root@sw-linux01:/# usermod -a -G openhab openhab
Mit dem Befehl „id openhab“ bekommen wir die jeweilige User und Group ID angezeigt, diese wird später noch benötigt.
root@sw-linux01:/mnt/docker_volumes# id openhab uid=997(openhab) gid=997(openhab) groups=997(openhab)
Als nächstes werden die Verzeichnisse angelegt, in denen alle relevanten Files vom openHAB Container gespeichert werden. Dazu verwenden wir das zuvor gemountete NFS Share:
root@sw-linux01:/# cd /mnt/docker_volumes/ root@sw-linux01:/mnt/docker_volumes# mkdir openhab root@sw-linux01:/mnt/docker_volumes# mkdir openhab/conf root@sw-linux01:/mnt/docker_volumes# mkdir openhab/userdata root@sw-linux01:/mnt/docker_volumes# mkdir openhab/addons root@sw-linux01:/mnt/docker_volumes# chown -R openhab:openhab openhab/
Somit haben wir bereits alle nötigen Vorkehrungen getroffen, um das openHAB Image mit dem nächsten Befehl herunterzuladen und als Container auszuführen.
docker run \
--name openhab \
--net=host \
-v /etc/localtime:/etc/localtime:ro \
-v /etc/timezone:/etc/timezone:ro \
-v /mnt/docker_volumes/openhab/conf:/openhab/conf \
-v /mnt/docker_volumes/openhab/userdata:/openhab/userdata \
-v /mnt/docker_volumes/openhab/addons:/openhab/addons \
-d \
-e USER_ID=997 \
-e GROUP_ID=997 \
-e CRYPTO_POLICY=unlimited \
--restart=always \
openhab/openhab:latest-debian
Achtet darauf, die Volume Mountpoints mit euren jeweiligen Pfaden zu ersetzen. Außerdem müssen die User, als auch die Group IDs entsprechend angepasst werden. Solltet ihr nicht den „latest“ Build verwenden wollen, könnt ihr euch den jeweiligen Tag direkt von Docker Hub holen. Alle Befehle welche hier ausgeführt wurden, können auch in der openHAB Dokumentation nachgelesen werden.
Nachdem das Image heruntergeladen und der Container gestartet wurde, könnt ihr euch bereits im Webinterface umsehen. Öffnet dazu einfach in einem Browser eurer Wahl die URL http://<Linux-VM-IP>:8080
Um auf der Shell nachvollziehen zu können, welche Container zum jetzigen Zeitpunkt ausgeführt werden, verwendet folgenden Befehl.
Somit sind wir bereits am Ende des dritten Teils angelangt und wir können uns in den nächsten Artikeln auf die Konfiguration von openHAB selbst konzentrieren.
Hi,
danke für deinen Beitrag. Hat mir bei meinem System, dass ähnlich aufgebaut ist sehr geholfen. Ich nutze allerdings docker-compose und portainer in der vmm.
Ich habe festgestellt, dass durch das intensive logging von openhab und anderen Komponenten ein ständiger schreibzugriff auf die HDDs erfolgt. Ist dir das auch aufgefallen?
Gruß
Hey Chris,
ich setze mittlerweile auch auf Portainer, da es die Administration stark vereinfacht.
Ja natürlich, durch die zusätzliche VM und den einzelnen Docker Container wird je nach Last durchgehend auf die HDDs zugegriffen. Den Standby-Modus von Synology kann man bei einem solchen Deployment natürlich vergessen 🙂