docker

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.

infrastruktur

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

Please publish modules in offcanvas position.