Mit dem Wechsel auf openHAB 4.x , habe ich meine Installation auf Docker umgestellt. Die Herausvorderung war nicht nur openHAB auf Docker zu bringen, sondern auch alle anderen Komponenten die ich mittlerweile benutze. Bei der Hardware bin ich dann auch von einer Raspberry PI 4 (4GB RAM/500 GB SSD) auf einen MacMini 2012 (16GB RAM/500 SG SSD) gewechselt.
Natürlich stellt sich die Frage: "Ist eine Umstellung auf Docker nötig?".
Über die Jahre die ich openHAB nutze, bin ich von V1.8.x, 2.4.x, 3.x auf 4.0.x gewechselt. Das war immer mit Testen und "Herausforderungen" verbunden. Man möchte ja nach einem Upgrade weiterhin die gleichen Funktionen haben. Dazu muss man testen. Ich habe mir immer wieder auf Raspberry PI`s oder unter MAC Fusion Installationen zum testen erstellt. Mit Docker ist der Aufwand diese Umgebung mal eben bereit zu stellen um ein vielfaches geringer. Die vollständige Installation / Konfiguration incl. restore im Betriebssystem dauerte gefühlt einen Tag (8-10h). Mit Docker ist dies mit weit weniger als 1h nötig. Dabei nutze ich schon immer ausschließlich Textdateien zur Konfiguration der openHAB Umgebung.
Vor Docker hatte ich einmal Abhängigkeiten von Bibliotheken im Linux Betriebssystem, die ich kurzfristig nicht lösen konnte. Auch ein Vorteil von Docker.
Ich hoffe Ihr bekommt mit den unten aufgeführten Dateien eine gute Vorlage für die eigene Installation ;-) Mit dem folgenden Befehl sollte dann ein solcher Docker Container gestartet werden.
docker-compose -f docker-compose.yml up -d
Hier nun die verschiedenen "docker-compose.yaml" Dateien.
grafana
Hier der vollständige Pfad /docker/grafana/docker-compose.yaml
version: "3.3"
networks:
default:
driver: bridge
services:
grafana:
image: grafana/grafana:latest
container_name: grafana
security_opt:
- no-new-privileges:true
restart: unless-stopped
networks:
- default
ports:
- "3000:3000"
user: $PUID
volumes:
- $DOCKERDIR/appdata:/var/lib/grafana
- $DOCKERDIR/appetc:/etc/grafana
- $DOCKERDIR/applog:/var/log/grafana
# environment:
# GF_INSTALL_PLUGINS: "grafana-clock-panel,grafana-simple-json-datasource,grafana-worldmap-panel,grafana-piechart-panel"
mosquitto
Hier der vollständige Pfad /docker/mosquitto/docker-compose.yaml
version: '3.8'
services:
mosquitto:
image: eclipse-mosquitto:2
ports:
- 1883:1883
- 8883:8883
# - 9001:9001
volumes:
- /docker/mosquitto/config:/mosquitto/config
- /docker/mosquitto/data:/mosquitto/data
networks:
- mosquitto
networks:
mosquitto:
name: mosquitto
driver: bridge
openhab4
Hier der vollständige Pfad /docker/openhab4/docker-compose.yaml
services:
openhab-mariadb:
image: mariadb
container_name: openhab-mariadb
command: --transaction-isolation=READ-COMMITTED --log-bin=ROW
healthcheck:
disable: true
ports:
- 3306:3306
restart: always
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- ./data_mariadb:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=openhab # Datenbank Passwort wählen
- MYSQL_DATABASE=openhab4
- MYSQL_USER=openhab
- MYSQL_INITDB_SKIP_TZINFO=1 # Behebt die bekannten Startprobleme der Datenbank
networks:
app-nw:
backend-nw:
aliases:
- db
phpmyadmin:
image: phpmyadmin/phpmyadmin
container_name: openhab-phpmyadmin
restart: always
links:
- openhab-mariadb
ports:
- 8081:80
environment:
- PMA_PORT=3306
- PMA_HOST=openhab-mariadb
# - PMA_ARBITRARY=1
# - PMA_USER=openhab
# - PMA_PASSWORD=openhab
networks:
app-nw:
backend-nw:
aliases:
- db
openhab-frontail:
image: welteki/frontail-openhab:latest
container_name: openhab-frontail
restart: always
ports:
- "9001:9001"
volumes:
- /docker/openhab4/data/userdata:/openhab/userdata:ro
openhab-mosquitto:
container_name: openhab-mqtt
restart: always
image: eclipse-mosquitto
environment:
TZ: ${TZ}
USER_ID: 9001
GROUP_ID: 9001
ports:
- "1883:1883"
- "9002:9002"
volumes:
- /docker/openhab4/data_mqtt/config/mosquitto.conf:/mosquitto/config/mosquitto.conf
- /docker/openhab4/data_mqtt/data:/mosquitto/data
- /docker/openhab4/data_mqtt/log:/mosquitto/log
networks:
- default
openhab-openhab:
image: "openhab/openhab:4.0.3"
# image: openhab/openhab:latest
# image: openhab/openhab:4.1.0-snapshot
# image: openhab/openhab:snapshot
# image: openhab/openhab:3.4.4
container_name: openhab-openhab
restart: always
privileged: true
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- ./data/conf/:/openhab/conf
- ./data/addons:/openhab/addons
- ./data/userdata:/openhab/userdata
environment:
TZ: ${TZ}
OPENHAB_HTTP_PORT: ${OPENHAB_HTTP_PORT}
OPENHAB_HTTPS_PORT: ${OPENHAB_HTTPS_PORT}
CRYPTO_POLICY: "unlimited"
EXTRA_JAVA_OPTS: "-Duser.timezone=${TZ}"
USER_ID: 9001
GROUP_ID: 9001
# Test to run openHAB with German number format
# Can be tested by entering "locale" after "docker exec -t -i openhab /bin/bash"
LANG: de_DE.UTF-8
LANGUAGE: de_DE.UTF-8
LC_ALL: de_DE.UTF-8
devices:
- /dev/ttyUSB0:/dev/ttyUSB0
- /dev/ttyUSB1:/dev/ttyUSB1
- /dev/comfoair:/dev/comfoair
network_mode: host
volumes:
data_openhab_conf:
data_openhab_addons:
data_openhab_userdata:
data_mariadb:
data_mqtt:
networks:
app-nw:
internal: false
driver: bridge
driver_opts:
com.docker.network.bridge.name: app-${PROJECT_NAME}
backend-nw:
internal: true
driver: bridge
driver_opts:
com.docker.network.bridge.name: be-${PROJECT_NAME}
Für das Starten des openHAB container müssen noch einige Umgebungvariablen gesetzt werden. Diese habe ich im OS vorher gesetzt. Man kann das über die Datei stack.env machen und beim initialen Starten mit angeben, das hatte ich aber anders gelöst.
PROJECT_NAME=openhab3
OPENHAB_HTTP_PORT=8080
OPENHAB_HTTPS_PORT=8443
INFLUXDB_DB_PORT=8086
GRAFANA_HTTP_PORT=3000
CHRONOGRAF_HTTP_PORT=8888
MOSQUITTO_MQTT_PORT=1883
MOSQUITTO_MQTTS_PORT=8883
TZ=Europe/Berlin
rctmon
Hier der vollständige Pfad /docker/rctmon/docker-compose.yaml
version: '2.2'
services:
rctmon:
container_name: rctmon
restart: always
image: sfudeus/rctmon:preview-preview
ports:
- "9831:9831"
volumes:
- /docker/rctmon/config.yaml:/config.yaml
- /docker/rctmon/logconfig.log:/logconfig.log
networks:
- default
volumes:
data_rctmon:
vzlogger
Hier der vollständige Pfad /docker/vzlogger/docker-compose.yaml
version: '3.2'
services:
vzlogger:
image: torstend/vzlogger:latest
container_name: vzlogger
read_only: true
command: [ "--httpd", "--httpd-port", "8081" ]
tty: true
devices:
- /dev/ttyUSB0:/dev/ttyUSB0
volumes:
- /docker/vzlogger/config/vzlogger.conf:/etc/vzlogger.conf:ro
- /docker/vzlogger/logs/vzlogger.log:/var/log/vzlogger.log
healthcheck:
interval: 10s
timeout: 10s
retries: 2