Docker Container für Balkonkraftwerk Überwachung

Dieser Beitrag wurde 793 mal angezeigt.

Hallo Leute,

heute möchte ich Ihnen zeigen, wie Sie Docker-Container vorbereiten können, um Ihre PV-Anlage, Ihr Balkon- oder Volkskraftwerk zu überwachen.

Zunächst benötigen Sie eine Umgebung, in der Docker ausgeführt werden kann. Ich empfehle einen Raspberry Pi 4 mit mindestens 4 GB RAM und einer großen SD-Karte. Der Speicherplatz wird später wichtig sein und hängt davon ab, wie lange Ihre Logs zurückreichen sollen. Für etwa 4 bis 6 Monate können gut und gerne mal 32 GB anfallen. Derzeit sind SD-Karten günstig zu haben, also zögern Sie nicht, sich eine 128- oder 512-GB-Karte zu besorgen.

Alternativ könnt ihr natürlich auch eine andere Umgebung nehmen auf der Ihr Docker laufen habt.
In diesem Tutorium gehe ich davon aus, das Ihr bereits Docker auf einem Pi installiert habt.

Falls ihr das noch nicht habt, findet ihr im Netz entsprechende Anleitungen.

Es gibt 2 Möglichkeiten die Containerumgebung einzurichten.

  1. Komplette Einrichtung über Konsole
  2. Einrichtung über Portainer

Portainer bietet euch eine Weboberfläche über der ihr eure Docker Container verwalten könnt.
Ich möchte euch an der Stelle die Installation über Portainer beschreiben.

Installation von Docker und Portainer

Install Docker

sudo apt update && sudo apt upgrade -y
curl -sSL https://get.docker.com | sh

Dieser Command installiert docker direkt. Dies kann einige Zeit dauern.

Danach benötigen wir noch die entsprechenden Nutzungsrechte:

sudo usermod -aG docker $USER

Wenn wir dies nicht machen, können wir docker als normaler User „pi“ in dem Fall nicht nutzen.

Install Portainer

sudo apt update && sudo apt upgrade -y
sudo docker pull portainer/portainer-ce:latest

Es wird nun Portainer runtergeladen und das Image bereitgestellt.
Nun können wir Portainer einrichten und starten.

Ich habe dafür ein Verzeichnis erstellt um meine Config dort zu speichern und später auch automatisch Updates machen zu lassen.

cd ~
mkdir portainer && cd portainer
mkdir data

danach benötigen wir eine docker-composer file. Diese erstellt ihr im portainer Verzeichnis. z.b. mit nano. Falls ihr Nano noch nicht installiert habt:

sudo apt install nano

Nun erstellen wir die Datei und kopieren diesen Inhalt in die Datei und speichern:

nano docker-compose.yaml
version: '3'
services:
  portainer:
    image: portainer/portainer-ce:latest
    container_name: portainer
    restart: always
    security_opt:
      - no-new-privileges:true
    network_mode: host
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./data:/data

Speichert das ganze ab.
Damit wir, wenn ein Update bereit steht, dies auch direkt installieren können, erstellen wir eine SH Datei, die diesen Job für uns übernimmt.

nano update-portainer.sh

Mit dem Inhalt:

#!/bin/bash
docker stop portainer && \
docker rm portainer && \
docker pull portainer/portainer-ce:latest && \
docker-compose up -d

Speichert dies ab.

Ihr könnt nun Portainer starten und mit der Webeinrichtung weiter machen:

docker-compose up -d

Ihr könnt Portainer nun auf dem Port 9000 erreichen.

http://[PIIPADDRESS]:9000

Erstellt nun einen User eurer Wahl, zb. „piadmin“ „1234“ 😉

Wählt im nächsten Schritt wie ihr Portainer Lokal nutzen wollt. Ihr wollt es natürlich für Docker nutzen 😉 Klickt dann auf Connect um den lokalen Portainer Agent zu starten.

Danach solltet ihr in der Übersicht landen, in der ihr zum lokalen Agent und die Verwaltung wechseln könnt.

Installation der Docker Container für Überwachung

Damit wir die Daten der Container persistieren können bzw. das ganze Update fähig machen können, müssen wir die Daten der Container speichern. Dafür legen wir entsprechende Verzeichnisse an:

mkdir /home/pi/influxdb_data
mkdir /home/pi/mosquitto/
mkdir /home/pi/mosquitto/config
mkdir /home/pi/mosquitto/data
mkdir /home/pi/mosquitto/log
mkdir /home/pi/grafana_data
mkdir /home/pi/grafana_data/provisioning
mkdir /home/pi/.node-red


Nun klickt in der Übersicht dann auf „Stacks“ und fügt einen neuen Stack hinzu.
Fügt dann diese Composer Daten ein:

 

 

 

 

version: '3.8'

networks:
  monitoring:
    driver: bridge
    
volumes:
  prometheus_data: {}

services:
  influxdb:
    image: influxdb:latest
    container_name: influxdb
    restart: always
    environment:
      - INFLUXDB_DB=influx
      - INFLUXDB_ADMIN_USER=${GRAFANAUSER}
      - INFLUXDB_ADMIN_PASSWORD=${GRAFANAPASS}
    ports:
      - '8086:8086'
    volumes:
      - /home/pi/influxdb_data:/var/lib/influxdb
  mosquitto:
    image: eclipse-mosquitto
    container_name: mqtt
    volumes:
      - /home/pi/mosquitto/config:/mosquitto/config
      - /home/pi/mosquitto/data:/mosquitto/data
      - /home/pi/mosquitto/log:/mosquitto/log
    ports:
      - "1883:1883"
      - "9001:9001"
  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    volumes:
      - /home/pi/grafana_data:/var/lib/grafana
      - /home/pi/grafana_data/provisioning:/etc/grafana/provisioning
    environment:
      - GF_SECURITY_ADMIN_USER=${GRAFANAUSER}
      - GF_SECURITY_ADMIN_PASSWORD=${GRAFANAPASS}
      - GF_USERS_ALLOW_SIGN_UP=false
    restart: unless-stopped
    expose:
      - 3000
    ports:
      - 3000:3000
    networks:
      - monitoring
    labels:
      org.label-schema.group: "monitoring"    
  node-exporter:
    image: prom/node-exporter:latest
    container_name: node-exporter
    restart: unless-stopped
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
    command:
      - '--path.procfs=/host/proc'
      - '--path.rootfs=/rootfs'
      - '--path.sysfs=/host/sys'
      - '--collector.filesystem.mount-points-exclude=^/(sys|proc|dev|host|etc)($$|/)'
    expose:
      - 9100
    networks:
      - monitoring
  nodered:
    image: nodered/node-red:latest
    restart: always
    container_name: rednode
    network_mode: host
    volumes:
     - /home/pi/.node-red:/data
    logging:
    driver: json-file
    options:
     max-size: "10mb"
     max-file: "1"

Damit wir uns entsprechend anmelden können bei den einzelnen Containern, hinterlegen wir noch zwei Environment variables.

GRAFANAUSER
GRAFANAPASS

Nachdem das ganze runtergeladen und gestartet wurde finden wir die entsprechenden Instanzen:

Portainer: http://[PIIPADDRESS]:9000
Portainer: https://[PIIPADDRESS]:9443
Node-Red: http://[PIIPADDRESS]:1880
Grafana: http://[PIIPADDRESS]:3000
Influxdb: http://[PIIPADDRESS]:8086

In nächsten Beitrag beschreibe ich dann wie ihr Node-Red einrichtet um später Grafana einzurichten.

 

DANKE

Ich möchte meine Anlage gerne noch weiter ausbauen und euch auch an deren Änderungen teilhaben lassen.
Daher würde ich mich freuen wenn ihr meine Ref. Links nutzt, wenn ihr euch die Teile besorgt.
Ihr könnt mir auch einen Kaffee ausgeben über Paypal: Klick hier
Oder ihr könnt euch ein NFT (TRX) aus meiner exklusiven Kollektion sichern: Klick hier

 

Add a Comment

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.