Es ist wirklich einfach

aber eine Menge Text (unvermeidbar, wenn man an alles denken möchte...)
Schritt für Schritt, from the very beginning (nicht zwingend für Dich...):
- Den Pi Imager herunterladen.
- Raspberry Pi OS lite (Pi4 mit 4 oder 8 GByte -> 64-Bit Version, ansonsten eher 32-Bit) auf die Micro-SD-Karte flashen. Alternativ geht natürlich auch eine per USB angeschlossene SSD. Dabei die Einstellungen bearbeiten:
- Hostname z.B. docker
- Benutzername und Passwort nach Belieben
- Wifi nur wenn unbedingt notwendig
- Sprache und Zeitzone passend
- Bei Diensten SSH aktivieren (ideal wäre, wenn Du einen Pubic Key bereitliegen hättest, Passwort geht aber auch)
- Den Pi mit Datenträger und LAN verbinden.
- Sowie wahlweise für die Erstinbetriebnahme mit Monitor und Tastatur. Maus wird keinesfalls gebraucht, lite hat nur eine Shell für die Anmeldung und mehr ist nur unnötiger Ballast (vergeudete Rechenzeit).
- Den Pi mit dem Netzteil verbinden und einschalten.
- Wenn der Pi gestartet ist, mit dem in Punkt 2.2 festgelegten User und Passwort anmelden.
- mit df -h davon überzeugen, dass das Dateisystem den gesamten Datenträger umfasst. Ist das nicht der Fall, kannst Du über sudo raspi-config und dann Advanced Options -> Expand Filesystem die zweite Partition auf den gesamten Datenträger ausweiten, danach wird der Pi neu starten
- sudo apt update && sudo apt -y full-upgrade ausführen, um auf den letzten Stand zu kommen
- mit ip a | grep eth0 die IP-Adresse des Pi ermitteln.
- Am Desktop PC PuTTY starten und per ssh auf den Pi verbinden. Funktioniert das, den Pi runterfahren, Monitor und Tastatur trennen und Pi neu starten und wieder per PuTTY verbinden.
Damit läuft der Pi schon mal und ist über ssh erreichbar, womit alle weiteren Befehle über Copy&Paste verwendet werden können. Du kannst auch direkt mit ssh starten, musst dazu aber die IP-Adresse des Pi z.B. über Deinen Router ermitteln.
Nun folgt die Docker Engine per apt repository:
Für die 64-Bit Version dieser Anleitung folgen:
https://docs.docker.com/engine/install/ ... repository für 32-Bit ist es diese Anleitung:
https://docs.docker.com/engine/install/ ... repository
Ich gehe hier mal von 64 Bit aus:
Code: Alles auswählen
# Add Docker's official GPG key:
# sudo apt update
sudo apt -y install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
Achtung: beim Letzten Schritt (Add the repository...) handelt es sich um zwei (!) Zeilen, nicht um fünf Zeilen. Alle Zeilen ab
echo \ bis
sudo tee ... /dev/null sind eine Zeile, die nur umgebrochen wurde. das \ am Ende bewirkt, dass die Bash die Zeilen wieder zu einer Zeile zusammenfügt.
Diese
eine Zeile muss also als Ganzes kopiert und ausgeführt werden, bevor die "zweite" Zeile dran kommt.
Das erste apt update kann entfallen, das haben wir ja schon vor fünf Minuten gemacht

Nun ist das System vorbereitet, Docker zu installieren.
mit
Code: Alles auswählen
sudo apt -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
landet Docker auf dem System.
Damit der aktuelle User Docker verwenden darf, schiebst Du noch ein paar Befehle nach:
Code: Alles auswählen
sudo groupadd docker
sudo usermod -aG docker $USER
newgrp docker
und schlussendlich packst Du portainer auf den neuen Docker Host. Es bietet sich an, das per Script zu machen, denn Portainer ist der einzige Container, den Portainer nicht aktualisieren kann, das musst Du also immer wieder manuell machen. Also folgendes Script anlegen:
Code: Alles auswählen
#! /bin/bash
docker stop portainer
docker rm portainer
docker pull portainer/portainer-ce:latest
docker run -d -p 8000:8000 -p 9443:9443 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
Das Script speicherst Du z.B. als upgrade-portainer.sh mit Deinem normalen User ab und setzt anschließend mit
das executable Bit.
Zum Abschluss kannst Du nun das Script ausführen:
Der Verweis auf ./ ist notwendig, weil der eigene Ordner nicht Bestandteil des PATH-Exports ist. Wahlweise kannst Du das Script auch in den Ordner /usr/local/bin/ verschieben, das wäre ein möglicher Ablageort für ausführbare Scripte.
Nachdem das Script erfolgreich ausgeführt wurde, solltest Du Portainer über
https://ip.des.docker.host:9443/ erreichen.
Bei der Erstanmeldung fordert Portainer das Erstellen eines Administrationsusers und eines Passworts. Man kann in Portainer auch mehrere User anlegen, meist ist im Heimbereich aber eh nur einer "Chef"

wichtig ist aber, die Zugangsdaten sicher aufzubewahren, sonst muss man später mühsam das Passwort resetten...
In Portainer richtet man zunächst ein Environment ein, da das System standalone läuft, ist dies die richtige Methode. Die Verbindung sollte dann lokal über das Socket hergestellt werden, welches auch im Script oben gesetzt wurde. Anschließend verbindet man sich mit dem Environment.
Und damit Links in der Oberfläche funktionieren, muss noch ein weiterer Eintrag gesetzt werden, und zwar unter Environment -> Name des Environment sollte im Feld
Public IP die IP oder alternativ der fqdn des Docker Host eingetragen werden.
Nun geht es daran, die verschiedenen Container einzurichten. Meine Empfehlung: ein Custom Template definieren. Auf der linken Seite auf App Templates -> Custom Templates -> Add custom Template dann z.B.
Title: openhab4 (es sind nur Kleinbuchstaben und Ziffern erlaubt, keine Leerzeichen, keine Sonderzeichen, keine Umlaute)
Description: openHAB 4 latest stable
Note: Dies ist die aktuelle stable Version
Icon URL:
https://www.openhab.org/openhab-logo-square.png
Platform: Linux
Type: Standalone
Und schließlich im Web Editor:
Code: Alles auswählen
version: '2.2'
services:
openhab:
image: "openhab/openhab:latest"
restart: always
network_mode: bridge
ports:
- 8080:8080
- 8443:8443
volumes:
- "/etc/localtime:/etc/localtime:ro"
- "/etc/timezone:/etc/timezone:ro"
- "/portainer/Files/AppData/Config/openHAB4/openhab_addons:/openhab/addons"
- "/portainer/Files/AppData/Config/openHAB4/openhab_conf:/openhab/conf"
- "/portainer/Files/AppData/Config/openHAB4/openhab_userdata:/openhab/userdata"
environment:
CRYPTO_POLICY: "unlimited"
EXTRA_JAVA_OPTS: "-Duser.timezone=Europe/Berlin"
OPENHAB_HTTP_PORT: "8080"
OPENHAB_HTTPS_PORT: "8443"
USER_ID: "998"
GROUP_ID: "997"
Zum Schluss wird das Ganze noch durch einen Klick auf die entsprechende Schaltfläche unten links gesichert.
Zurück in der Liste der Templates erstellen wird einen Container, indem wir auf das Template klicken (nicht auf eine der Schaltflächen Edit oder Delete).
Anschließend wählen wir Action -> Deploy the Stack
Und nach einer Weile sollten wir einen laufenden Container haben, was wir in der Liste der Container (links
Containers anklicken) auch sehen können. Auf der rechten Seite sollte es passende Links geben, um die UI für openHAB aufzurufen. dabei ist zu beachten, dass der Link für 8443 leider nur http als Protokoll einfügt, das muss man händisch auf https ändern.
Funktioniert der Zugriff so weit, geht es an den Datententransfer der Konfiguration.
Dazu beenden wir den Container. über Portainer (Klick auf den Namen in der Container-Liste, STOP Knopf drücken.)
Nun geht's weiter in PuTTY, allerdings brauchen wir auch das Backup, am einfachsten kopieren wir das mittels scp von einem anderen Rechner, auf dem auch GNU/Linux läuft (und wo wir die Datei vorher ebenfalls per scp abgelegt haben), alternativ geht das aber auch per WinSCP vom Windows Desktop aus, auch ein USB-Stick wäre eine Option, aber dann muss man extra wieder zum Pi hinlaufen...
Gegeben, dass die Datei auf dem Rechner "pi3" liegt, und zwar im home-Verzeichnis des Users admin, und gegeben, dass die Datei openhab-backup-24_02_14-20_00_00.zip heißt, lautet der scp Befehl (auszuführen vom Docker Host aus) dann
Code: Alles auswählen
scp admin@pi3:~/openhab-backup-24_02_14-20_00_00.zip ~/
Danach liegt das Backup auf dem Docker Host im home-Verzeichnis des angemeldeten Users.
Nun müssen wir das zip auspacken, aber leider fehlt uns das Programm unzip, also installieren:
und anschließend
Nun verpflanzen wir die Daten:
Code: Alles auswählen
sudo cp conf/* /portainer/Files/AppData/Config/openHAB4/openhab_conf/ -r
sudo cp userdata/jsondb/* /portainer/Files/AppData/Config/openHAB4/openhab_userdata/jsondb/ -r
sudo chown -R 998:997 /portainer/Files/AppData/Config/openHAB4/*
Bei Bedarf können auch noch weitere Teile aus dem userdata Zweig kopiert werden, jsondb enthält aber alles, was über die UI konfiguriert wurde.
Was auf diese Weise NICHT mit kommt, sind aber meines Wissens die installierten Addons, die muss man halt händisch nachinstallieren.
Ich habe das Ganze gerade eben bei mir durchgespielt - allerdings auf meinem Docker Host, welcher in einem LXC läuft, das sollte aber grundsätzlich keinen Unterschied machen.
Wenn der Container zur Zufriedenheit läuft (vor allem sind die gewünschten Daten drin) gibt es noch ein paar Dinge, die man nachträglich erledigen muss, insbesondere sind in openhab_conf/services/runtime.cfg Links auf Frontail und die openHABian Hilfe vorhanden, die dort nichts (mehr) zu suchen haben. Diese Einträge sollte man also herauslöschen.
Für den Moment kann man das vom Docker Host aus erledigen, es gibt aber wesentlich elegantere Möglichkeiten, wenn man weitere Container einrichtet, welche dann z.B. die entsprechenden Verzeichnisse per Samba zur Verfügung stellen. Eine weitere Option ist evtl. der Code-Server. Code-Server ist ein VS Code Editor, der aber im Browser läuft. Dabei ist die Umsetzung so gut, dass man als Anwender schon mal vergisst, dass man sich in einem Browser Fenster befindet. Ich bin mir nicht zu 100 % sicher, es kann sein, dass man für das openHAB Plugin ein wenig in die Trickkiste greifen muss, weil es nicht in der Liste installierbarer Addons auftaucht, ich meine aber, dass es da eine Möglichkeit gibt, das Plugin manuell zu installieren.
Ein weiterer interessanter Container ist sicherlich Frontail, andere Container kämen dann evtl. noch abhängig von der verwendeten Hardware dazu, z.B. mqtt, zigbee2mqtt, we-connect2mqtt...
Ich bin allerdings kein Experte, was openHAB auf Docker betrifft, da gibt es hier andere Anwender.

openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet