Docker Umgebung mit dem Script von ei23 installieren und Solaranzeige dort installieren

Solaranzeige und Docker
Alles was mit der Docker Version zu tun hat.

Moderatoren: Ulrich, DeBaschdi

Antworten
carmen
Beiträge: 13
Registriert: Mi 20. Apr 2022, 12:52
Danksagung erhalten: 1 Mal

Docker Umgebung mit dem Script von ei23 installieren und Solaranzeige dort installieren

Beitrag von carmen »

Solaranzeige.de auf einem RPI4GB mit dem ei23 Script als Docker installieren.
Bild
Vorweg sei erwähnt das ich kein Linux Nerd bin. Der von mir gewählte Weg hat es mir ermöglicht ein Basis System mit ein paar Tools zu installieren ohne das ich einen echten Plan von Docker habe. Es ist sehr wahrscheinlich das es einen eleganteren Weg gibt, ich hab es aber nicht drauf :-)

Mein System ist NICHT dafür gedacht vom Internt aus erreichbar zu sein.
Das ist sicherlich rasch getan, aber ich habe da keinen Bedarf.

Ich nutze seit geraumer Zeit zur Installation diverser Tools das ei23 Script.
Das Script installiert Docker mit diversen Tools die man vorher auswählen kann in einem Rutsch und fragt dabei die benötigten Usernamen und Passwörter ab.
Hier ist die Liste der Programme zu finden.
https://ei23.de/diy-smarthome/


So hab ich mir geholfen:


Ich setze jetzt einfach mal voraus das man in der Lage ist ein Rpi 64Bit Image mit Desktop auf einen Raspberry 400/4B 4GB zu installieren. Ja das läuft auch alles auf einem 3er PI aber echt zäh.
Meiner Erfahrung nach läuft das ganze auf einem 4er mit 4GB (auch 400er) am besten mit einer externen SSD und deaktivierten WIFI. USB3 und WIFI kann bei einem 4er seltsame Fehler produzieren. USB stört so heftig im WIFI das es zu Verbindungsabbrüchen führen kann. Das ist bekannt und übrigens auch der Grund warum AVM erst sehr spät USB3 für die Router eingeführt hat.
Overclocking auf 1500Mhz geht problemlos und lässt den Raspberry recht flüssig laufen, es geht auch mehr aber das muss jeder selber wissen.

Desweiteren sollte der Rpi genug Spannung bekommen und einen guten aktiven Hub.
Du solltest wissen was SSH ist und wie man per console auf den Raspberry zugreift und kannst einen einfachen Editor (nano) in der Shell benutzen.

Ich habe den Benutzer „pi“ gewählt, das muss jeder für sich ändern und an die Pfade in den Templates anpassen.


Los geht es.

Script besorgen

Bei ei23.de das Newsletter abonnieren und das installations- Script senden lassen.
Das Newsletter mit dem Installations- Script wird jede volle Stunde versendet. Danach kommt keine Mail mehr, es gibt keinen Spam seitens ei23.de.

Per ssh das Script installieren. Wie das geht steht in der Mail.

Die Programme wählen die man meint zu wollen. Grafana bitte gleich abwählen, das wird später mit dem Solaranzeige Conteiner zusammen installiert.
Node-Red wird nicht als Docker ausgeführt. Home Assistant ist ohne supervisor.

Bild

Es lassen sich später alle Programme einfach über Docker Templates installieren und entfernen. Reines Paste and Copy und ein paar Klicks.

Viele Templates sind schon dabei, siehe Liste https://ei23.de/diy-smarthome/


Jetzt das Script mal seine Arbeit machen lassen. Nach 2 Neustarts und nachdem X mal der Username und das Passwort vergeben wurde seit ihr mit dem gröbsten durch.


Nun bitte den Raspberry mit seiner IP im Browser besuchen.

Das sollte ähnlich wie auf dem oben Bild aussehen.

SSH öffnen
In den Ordner home/pi/ei23-docker wechseln

Die Datei docker-compose.yml öffnen

Code: Alles auswählen

sudo nano /home/pi/ei23-docker/docker-compose.yml
Das ist meine docker-compose.yml da steht jetzt nur noch drinnen was oben auf dem Bild zu sehen ist.

Code: Alles auswählen

version: '3'

networks:
  nextcloud: # comment this out if not needed
    driver: bridge
    internal: true
  fireflyiii: # comment this out if not needed
    driver: bridge
    internal: true

services:

  # MQTT-Broker
  mosquitto:
    container_name: mosquitto
    image: eclipse-mosquitto
    restart: unless-stopped
    user: "1883"
    ports:
      - "1883:1883"
      - "9001:9001"
    volumes:
      - ./volumes/mosquitto/data:/mosquitto/data
      - ./volumes/mosquitto/log:/mosquitto/log
      - ./volumes/mosquitto/config:/mosquitto/config
    logging:
      options:
        max-size: "5m"
        max-file: "3"

  # startpage for ei23-SmartHomeServer
  ei23:
    image: nginx:alpine
    container_name: ei23
    volumes:
      - ./volumes/ei23/conf:/etc/nginx/conf.d
      - ./volumes/ei23/web:/www
      - ./volumes/ei23/docs/site:/www/docs
    ports:
      - "80:80"
    # labels:
    #   - traefik.enable=true
    #   - traefik.http.routers.ei23-lan.rule=(Host(`192.168.178.2`) || Host(`raspberrypi`))
    #   - traefik.http.routers.ei23-lan.priority=1
    #   - traefik.http.routers.ei23-lan.entrypoints=lan
    restart: unless-stopped

  # Database
  influxdb:
    container_name: influxdb
    image: influxdb:1.8
   restart: unless-stopped
    ports:
    - "8086:8086"
    - "8083:8083"
    - "2003:2003"
    environment:
    - "INFLUXDB_DB=MAIN"
    # - "INFLUXDB_DATA_ENGINE=tsm1"
    - "INFLUXDB_REPORTING_DISABLED=false"
    - "INFLUXDB_STORE_ENABLED=false"
    - "INFLUXDB_QUERY_LOG_ENABLED=false"
    - "INFLUXDB_ADMIN_ENABLED=true"
      # -  "INFLUXDB_HTTP_AUTH_ENABLED=true"
      # -  "INFLUXDB_ADMIN_USER=admin"
      # -  "INFLUXDB_ADMIN_PASSWORD=SaAsMMEJ118wypn"
    - "INFLUXDB_USER=admin"
    - "INFLUXDB_USER_PASSWORD=raspberry"
      # -  "INFLUXDB_READ_USER=readuser"
      # -  "INFLUXDB_READ_USER_PASSWORD=LxTidQ8uymq4CWW"
      # -  "INFLUXDB_WRITE_USER=writeuser"
      # -  "INFLUXDB_WRITE_USER_PASSWORD=5GKpCgSBo77vuV2"
    # # Enable Traefik Log
    # - "INFLUXDB_UDP_ENABLED=true"
    # - "INFLUXDB_UDP_BIND_ADDRESS=0.0.0.0:8089"
    # - "INFLUXDB_UDP_DATABASE=traefik"
    volumes:
    - ./volumes/influxdb/data:/var/lib/influxdb
    - ./backups/influxdb/db:/var/lib/influxdb/backup
    logging:
      options:
        max-size: "5m"
        max-file: "3"

  homeassistant:
    container_name: homeassistant
    image: homeassistant/home-assistant:stable
    restart: unless-stopped
    network_mode: host
    ports:
      - "8123:8123"
    volumes:
      - ./volumes/homeassistant/config:/config
      # - /home/pi/media:/media
    # devices:
    #  - /dev/video0:/dev/video0
    environment:
      - "TZ=Europe/Berlin"

  motioneye:
    container_name: motioneye
    hostname: HomePi
    image: ccrisan/motioneye:master-armhf
    restart: unless-stopped
    ports:
      - "8765:8765"
      # - "18081:8081" # additional camera ports
      # - "18082:8082"
    # devices:
    #  - /dev/video0:/dev/video0
    volumes:
      - ./volumes/motioneye/data:/etc/motioneye
      - ./volumes/motioneye/lib:/var/lib/motioneye
      - /etc/localtime:/etc/localtime:ro


  # Dieses Netzwerk wird benoetigt- Add this Network if not existing

# networks:
#   nextcloud:
#     driver: bridge
#     internal: true

  # Aendere die Passwoerter - change the passwords (P4ssw0rt1 & P4ssw0rt2)
  nextcloud:
    image: nextcloud
    container_name: nextcloud
    ports:
      - "8080:80"
    # labels:
    #   - traefik.enable=true
    #   - traefik.http.routers.nextcloud.middlewares=nextcloud,nextcloud_redirect
    #   - traefik.http.routers.nextcloud.tls.certresolver=letsEncrypt
    #   - traefik.http.routers.nextcloud.rule=Host(`example.com`)
    #   - traefik.http.routers.nextcloud.entrypoints=web, web-secured
    #   - traefik.http.routers.nextcloud.tls=true
    #   - traefik.http.middlewares.nextcloud.headers.stsSeconds=15552000
    #   - traefik.http.middlewares.nextcloud.headers.stsPreload=true
    #   - traefik.http.middlewares.nextcloud_redirect.redirectregex.permanent=true
    #   - traefik.http.middlewares.nextcloud_redirect.redirectregex.regex=^https://(.*)/.well-known/(card|cal)dav
    #   - traefik.http.middlewares.nextcloud_redirect.redirectregex.replacement=https://$${1}/remote.php/dav/
    volumes:
      - ./volumes/nextcloud/html:/var/www/html
    restart: unless-stopped
    depends_on:
      - nextcloud_db
    links:
      - nextcloud_db
    networks:
      - default
      - nextcloud
    environment:
      - MYSQL_HOST=nextcloud_db
      - MYSQL_PASSWORD=kFFlPYVvBqtomc8
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - TRUSTED_PROXIES=172.18.0.0/16
      # - OVERWRITEPROTOCOL=https
      # - OVERWRITEHOST=example.com
    logging:
      options:
        max-size: "5m"
        max-file: "3"

  nextcloud_db:
    image: yobasystems/alpine-mariadb:10.4.17
    container_name: nextcloud_db
    volumes:
      - ./volumes/nextcloud/db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=N6hhfsr0jCCERyO
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_PASSWORD=kFFlPYVvBqtomc8
    restart: unless-stopped
    networks:
      - nextcloud
    logging:
      options:
        max-size: "5m"
        max-file: "3"

  pihole:
    container_name: pihole
    image: pihole/pihole:latest
    hostname: HomePi
    restart: unless-stopped
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "67:67/udp"
      - "8008:80/tcp"
      # - "443:443/tcp"
    environment:
      TZ: 'Europe/Berlin'
      WEBPASSWORD: 'vtCUw3uFcL7RDDJ'
      # ServerIP: REPLACEME
      # ServerIPv6: REPLACEME
      # IPv6: 'true'
    volumes:
      - ./volumes/pihole/etc-pihole/:/etc/pihole/
      - ./volumes/pihole/etc-dnsmasq.d/:/etc/dnsmasq.d/
      - ./volumes/pihole/hosts:/etc/hosts
    dns:
      - 127.0.0.1
      - 1.1.1.1
    # Recommended but not required (DHCP needs NET_ADMIN)
    #   https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
    cap_add:
      - NET_ADMIN
    logging:
      options:
        max-size: "5m"
        max-file: "3"

  portainer:
    container_name: portainer
    image: portainer/portainer-ce
    restart: unless-stopped
    ports:
      - "8000:8000"
      - "9000:9000"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./volumes/portainer/data:/data

  tasmoadmin:
    container_name: tasmoadmin
    image: raymondmm/tasmoadmin
    restart: unless-stopped
    ports:
      - "8089:80"
    volumes:
      - ./volumes/tasmoadmin/data:/data
Grafana, Influxdb und mosquitto muss deinstalliert werden. Diese Tools werden gleich mit dem Solaranzeige Container zusammen installiert.
Um z.B. influx und mosquitto zu deinstallieren müssen deren Templates gelöscht werden und fireflyIII wird auskommentiert außer es soll verwendet werden.

Will man NEXTCLOUD nutzen will muss man in dem zugehörigen Template Abschnitt den Port von 8080 auf 8090 ändern und auch in der Datei programs.json muss der Port geändert werden ändern. Für andere Container kann es ähnlich sein.
Wie das gemacht wird steht weiter unten.


Beispiel:

Code: Alles auswählen

version: '3'

networks:
  nextcloud: # comment this out if not needed
    driver: bridge
    internal: true
#  fireflyiii: # comment this out if not needed
#    driver: bridge
#    internal: true

services:

  # startpage for ei23-SmartHomeServer
  ei23:
    image: nginx:alpine
    container_name: ei23
    volumes:
      - ./volumes/ei23/conf:/etc/nginx/conf.d
      - ./volumes/ei23/web:/www
      - ./volumes/ei23/docs/site:/www/docs
    ports:
      - "80:80"
    # labels:
    #   - traefik.enable=true
    #   - traefik.http.routers.ei23-lan.rule=(Host(`192.168.178.2`) || Host(`raspberrypi`))
    #   - traefik.http.routers.ei23-lan.priority=1
    #   - traefik.http.routers.ei23-lan.entrypoints=lan
    restart: unless-stopped

  
  homeassistant:
    container_name: homeassistant
    image: homeassistant/home-assistant:stable
    restart: unless-stopped
    network_mode: host
    ports:
      - "8123:8123"
    volumes:
      - ./volumes/homeassistant/config:/config
      # - /home/pi/media:/media
    # devices:
    #  - /dev/video0:/dev/video0
    environment:
      - "TZ=Europe/Berlin"

  motioneye:
    container_name: motioneye
    hostname: HomePi
    image: ccrisan/motioneye:master-armhf
    restart: unless-stopped
    ports:
      - "8765:8765"
      # - "18081:8081" # additional camera ports
      # - "18082:8082"
    # devices:
    #  - /dev/video0:/dev/video0
    volumes:
      - ./volumes/motioneye/data:/etc/motioneye
      - ./volumes/motioneye/lib:/var/lib/motioneye
      - /etc/localtime:/etc/localtime:ro


  # Dieses Netzwerk wird benoetigt- Add this Network if not existing

# networks:
#   nextcloud:
#     driver: bridge
#     internal: true

  # Aendere die Passwoerter - change the passwords (P4ssw0rt1 & P4ssw0rt2)
  nextcloud:
    image: nextcloud
    container_name: nextcloud
    ports:
      - "8090:80"
    # labels:
    #   - traefik.enable=true
    #   - traefik.http.routers.nextcloud.middlewares=nextcloud,nextcloud_redirect
    #   - traefik.http.routers.nextcloud.tls.certresolver=letsEncrypt
    #   - traefik.http.routers.nextcloud.rule=Host(`example.com`)
    #   - traefik.http.routers.nextcloud.entrypoints=web, web-secured
    #   - traefik.http.routers.nextcloud.tls=true
    #   - traefik.http.middlewares.nextcloud.headers.stsSeconds=15552000
    #   - traefik.http.middlewares.nextcloud.headers.stsPreload=true
    #   - traefik.http.middlewares.nextcloud_redirect.redirectregex.permanent=true
    #   - traefik.http.middlewares.nextcloud_redirect.redirectregex.regex=^https://(.*)/.well-known/(card|cal)dav
    #   - traefik.http.middlewares.nextcloud_redirect.redirectregex.replacement=https://$${1}/remote.php/dav/
    volumes:
      - ./volumes/nextcloud/html:/var/www/html
    restart: unless-stopped
    depends_on:
      - nextcloud_db
    links:
      - nextcloud_db
    networks:
      - default
      - nextcloud
    environment:
      - MYSQL_HOST=nextcloud_db
      - MYSQL_PASSWORD=kFFlPYVvBqtomc8
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - TRUSTED_PROXIES=172.18.0.0/16
      # - OVERWRITEPROTOCOL=https
      # - OVERWRITEHOST=example.com
    logging:
      options:
        max-size: "5m"
        max-file: "3"

  nextcloud_db:
    image: yobasystems/alpine-mariadb:10.4.17
    container_name: nextcloud_db
    volumes:
      - ./volumes/nextcloud/db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=N6hhfsr0jCCERyO
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_PASSWORD=kFFlPYVvBqtomc8
    restart: unless-stopped
    networks:
      - nextcloud
    logging:
      options:
        max-size: "5m"
        max-file: "3"

  pihole:
    container_name: pihole
    image: pihole/pihole:latest
    hostname: HomePi
    restart: unless-stopped
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "67:67/udp"
      - "8008:80/tcp"
      # - "443:443/tcp"
    environment:
      TZ: 'Europe/Berlin'
      WEBPASSWORD: 'vtCUw3uFcL7RDDJ'
      # ServerIP: REPLACEME
      # ServerIPv6: REPLACEME
      # IPv6: 'true'
    volumes:
      - ./volumes/pihole/etc-pihole/:/etc/pihole/
      - ./volumes/pihole/etc-dnsmasq.d/:/etc/dnsmasq.d/
      - ./volumes/pihole/hosts:/etc/hosts
    dns:
      - 127.0.0.1
      - 1.1.1.1
    # Recommended but not required (DHCP needs NET_ADMIN)
    #   https://github.com/pi-hole/docker-pi-hole#note-on-capabilities
    cap_add:
      - NET_ADMIN
    logging:
      options:
        max-size: "5m"
        max-file: "3"

  portainer:
    container_name: portainer
    image: portainer/portainer-ce
    restart: unless-stopped
    ports:
      - "8000:8000"
      - "9000:9000"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./volumes/portainer/data:/data

  tasmoadmin:
    container_name: tasmoadmin
    image: raymondmm/tasmoadmin
    restart: unless-stopped
    ports:
      - "8089:80"
    volumes:
      - ./volumes/tasmoadmin/data:/data
      

Die docker-compose.yml sieht jetzt wahrscheinlich ähnlich aus wie meine.

Jetzt die Startseite kurz bearbeiten.

Code: Alles auswählen

sudo nano /home/pi/ei23-docker/volumes/ei23/web/programs.json
PORT KONTROLLIEREN NICHT VERGESSEN!!

Wie man sieht ist das simpel aufgebaut. Was angezeigt werden soll bekommt ein „true“ was nicht angezeigt werden soll wird geändert nach „false“

Die Anzeige für Grafana wird gleich wieder eingeschaltet, man will ja „Solaranzeige“ sehen.

Nun einmal den Haufen neu starten.

Code: Alles auswählen

sudo reboot
Nach dem Neustart im Browser die IP_DES_RPI:9000 eingeben und Username und Passwort festlegen. Das muss bei Portainer leider recht lang sein.
In Portainer die Container anzeigen lassen. Wahrscheinlich werden Influxdb und mosquitto noch angezeigt. Hacken machen und löschen.

Code: Alles auswählen

bash ei23.sh dc
ausführen. Wenn fertig dann

Code: Alles auswählen

sudo mc
ausführen und in das Verzeichniss der Docker Volumen wechseln und schauen ob alles gelöscht ist. Ist das nicht der Fall einfach löschen. Der Pfad zu den Volumen ist:

Code: Alles auswählen

cd home/pi/ei23-docker/volumes/
Zur Sicherheit nochmal

Code: Alles auswählen

bash ei23.sh dc
ausführen.

Raspi neu starten

Code: Alles auswählen

sudo reboot
Nach kurzer Zeit sollte es wieder möglich sein per SSH den Raspi zu connenten.

Wieder die Docker-compose datei öffnen

Code: Alles auswählen

sudo nano /home/pi/ei23-docker/docker-compose.yml
und das Template für Solaranzeige direkt zwischen

services:
und
# startpage for ei23-SmartHomeServervor einfügen.

Sollte so aussehen:
Bild

Hier das Template für Solaranzeige

Code: Alles auswählen

solaranzeige:
    image: takealug/solaranzeige:arm64v8
    container_name: Solaranzeige
    environment:
      - PUID=99
      - PGID=100
      - TIMEZONE=Europe/Berlin
      - UPDATE=no
      - MOSQUITTO=yes
      - INFLUXDB=yes
    volumes:
      - ./volumes/solaranzeige/data/solaranzeige:/solaranzeige
      - ./volumes/solaranzeige/data/pvforecast:/pvforecast
      - ./volumes/solaranzeige/data/influx:/var/lib/influxdb
      - ./volumes/solaranzeige/data/grafana:/var/lib/grafana
      - ./volumes/solaranzeige/data/www:/var/www
    tmpfs:
      - /var/log
      - /tmp
    ports:
      - "3000:3000"
      - "1883:1883"
      - "8080:80"
      - "8086:8086"
    restart: unless-stopped
    
## 8086 ist hier geöffnet damit mein BMS in die Datenbank schreiben kann ##

Abspeichern neu starten und Docker compoese ausführen
bash ei23.sh dc

Wenn das fertig ist mit Portainer kurz schauen wie der Name vom Container von Solaranzeige ist oder mit

Code: Alles auswählen

docker ps
in der shell ermitteln.
Bei mir ist das fad5fe925e40_Solaranzeige

Code: Alles auswählen

docker exec -ti fad5fe925e40_Solaranzeige /solaranzeige/setup
Nach einem Neustart sollte unter der Webadresse http://ip_des_raspi die Übersichtsseite mit Grafana und den Tools sehen die installiert wurden.

Auf Grafana klicken und mit Username: admin und Passwort: solaranzeige anmelden.

Das Zahnrad klicken und „Data Sources“ auswählen.
Die Datenbank „Solaranzeige“ anklicken und die richtige Datenbank einstellen:
Bild

Das gleiche mit der Datenbank „Steuerung“ machen.
Bild

Jetzt sollte Solaranzeige in dieser Dockerumgebung laufen. Der MQTT Broker und der Influxdb server sollten sich innerhalb deines heimischen Netzwerks nutzen lassen.

################################################################
Um weitere Tools zu installieren per ssh in den Ordner schauen

Code: Alles auswählen

home/pi/ei23-docker/compose-templates
Den inhalt eines Templates wie z.B. iobrocker

Code: Alles auswählen

iobroker:
    restart: unless-stopped
    image: buanet/iobroker:latest
    container_name: iobroker
    hostname: iobroker
    ports:
      - "8081:8081"
    volumes:
      - ./volumes/iobroker:/opt/iobroker
An den Anfang der docker-compose.yml, genau wir vorher mit dem Template für Solaranzeige. Einfügen unterhalb von „services:“

Auf die Ports achten das die nicht doppelt belegt sind und nach einem

Code: Alles auswählen

bash ei23.sh dc
wird der Container automatisch installiert.
Ändere

Code: Alles auswählen

sudo nano /home/pi/ei23-docker/volumes/ei23/web/programs.json
um das jeweilige Tool auch anzeigen zu lassen und vergiss nicht gegebenenfalls einen Port zu ändern.

Browsercache leeren nicht vergessen.

Code: Alles auswählen

strg+shift+del
"Inselanlage" PV: 12KW, Speicher: 30KW, DIYBMSv4
Telegram

Antworten

Zurück zu „Docker Container“