
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.

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
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
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
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
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
Code: Alles auswählen
sudo mc
Code: Alles auswählen
cd home/pi/ei23-docker/volumes/
Code: Alles auswählen
bash ei23.sh dc
Raspi neu starten
Code: Alles auswählen
sudo reboot
Wieder die Docker-compose datei öffnen
Code: Alles auswählen
sudo nano /home/pi/ei23-docker/docker-compose.yml
services:
und
# startpage for ei23-SmartHomeServervor einfügen.
Sollte so aussehen:

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
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
Bei mir ist das fad5fe925e40_Solaranzeige
Code: Alles auswählen
docker exec -ti fad5fe925e40_Solaranzeige /solaranzeige/setup
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:

Das gleiche mit der Datenbank „Steuerung“ machen.

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
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
Auf die Ports achten das die nicht doppelt belegt sind und nach einem
Code: Alles auswählen
bash ei23.sh dc
Ändere
Code: Alles auswählen
sudo nano /home/pi/ei23-docker/volumes/ei23/web/programs.json
Browsercache leeren nicht vergessen.
Code: Alles auswählen
strg+shift+del