Benutzer-Werkzeuge

Webseiten-Werkzeuge


howto:docker

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
howto:docker [2021/07/27 21:11] – [Aggregationen über die Middleware] itchy2howto:docker [2021/07/27 21:38] (aktuell) – [offene Punkte] itchy2
Zeile 74: Zeile 74:
 =====Aggregationen über die Middleware===== =====Aggregationen über die Middleware=====
 Für die Aggregation über die benötigt man einen Job-Scheduler. Genau dieser Scheduler kann eine große Herausforderung sein. Es gibt verschiedene Lösungsansätze hierfür. In dieser Beschreibung wurde eine Lösung über Jobber verwendet. Für die Aggregation über die benötigt man einen Job-Scheduler. Genau dieser Scheduler kann eine große Herausforderung sein. Es gibt verschiedene Lösungsansätze hierfür. In dieser Beschreibung wurde eine Lösung über Jobber verwendet.
 +
 +====Jobber====
  
 Das Dockerfile sieht wie folgt aus: Das Dockerfile sieht wie folgt aus:
Zeile 101: Zeile 103:
 <note>In dem Verzeichnis des Dockerfiles müssen die SSH Keys hinterlegt vorhanden sein.</note> <note>In dem Verzeichnis des Dockerfiles müssen die SSH Keys hinterlegt vorhanden sein.</note>
 <note important>Die Anpassung der SSH_CONFIG kann, je nach Einsatzgebiet und weiterer Konfiguration ein Sicherheitsproblem sein/werden. Bitte Vorsicht bei extern erreichbaren Servern.</note> <note important>Die Anpassung der SSH_CONFIG kann, je nach Einsatzgebiet und weiterer Konfiguration ein Sicherheitsproblem sein/werden. Bitte Vorsicht bei extern erreichbaren Servern.</note>
 +
 +Die Berechtigungen für die Jobber-Verzeichnisse, auf dem Host, müssen wie folgt gesetzt sein:
 +<code>
 +sudo chown 1000:1000 <localpatchtojobber>/jobberuser
 +sudo chmod 0744 <localpatchtojobber>/jobberuser
 +</code>
 +
 +Innerhalb des Docker Jobber Containers muss das .jobber File (im Home Verzeichnis vom jobberuser) wie folgt für die Aggregationen erweitert werden:
 +
 +<code>
 +- name: VZ_AGG_DAY
 +  cmd: /home/jobberuser/vz_agg_day.sh
 +  time: '0 0 1 *'
 +  onError: Backoff
 +  
 +- name: VZ_AGG_HOUR
 +  cmd: /home/jobberuser/vz_agg_hour.sh
 +  time: '0 1 *'
 +  onError: Backoff
 +  
 +- name: VZ_AGG_MINUTE
 +  cmd: /home/jobberuser/vz_agg_minute.sh
 +  time: '0 */10'
 +  onError: Backoff
 +</code>
 +
 +Das .jobber File ist die Konfiguration des Schedulers. Damit werden in diesem Fall Shell-Skripte aufgerufen.
 +
 +Minimal-Inhalt der Shell-Skripte:
 +
 +
 +<code>
 +#/home/jobberuser/vz_agg_day.sh
 +ssh root@volkszaehler << EOF
 +php /vz/bin/aggregate run -m delta -l day >/dev/null
 +exit
 +EOF
 +</code>
 +
 +
 +<code>
 +#/home/jobberuser/vz_agg_hour.sh
 +ssh root@volkszaehler << EOF
 +php /vz/bin/aggregate run -m delta -l hour >/dev/null
 +exit
 +EOF
 +</code>
 +
 +<code>
 +#/home/jobberuser/vz_agg_minute.sh
 +if [ -f /home/jobberuser/block-vz_aggregate.lock ]
 + then
 + echo "skipped" >> /home/jobberuser/vz_log_minute.txt
 + exit 1
 + else
 +  touch /home/jobberuser/block-vz_aggregate.lock
 + fi
 +
 +ssh root@volkszaehler << EOF
 +php /vz/bin/aggregate run -m delta -l minute >/dev/null
 +exit
 +EOF
 +
 +rm /home/jobberuser/block-vz_aggregate.lock
 +</code>
 +<note>Die Lösung ist ohne Flock realisiert sondern mit "IF-ELSE". Siehe hierzu auch: [[datenmengen]]</note>
 +
 +====Volkszaehler Docker anpassen====
 +Das minimalistische Volklszaehler Dockerfile muss für das Zusammenspiel mit Jobber erweitert werden:
 +
 +<code>
 +FROM volkszaehler/volkszaehler
 +
 +#SSH Server
 +RUN apk add --no-cache openssh
 +
 +#RC-Service
 +RUN apk add --no-cache openrc
 +RUN rc-update add sshd
 +
 +#Global Config for SSH and RC-Service
 +RUN ssh-keygen -A
 +RUN rc-status
 +RUN touch /run/openrc/softlevel
 +
 +#Transfer SSH Key
 +RUN mkdir -p /root/.ssh
 +COPY id_rsa.pub /root/.ssh/authorized_keys
 +
 +RUN echo "Host *" >> /etc/ssh/ssh_config
 +RUN echo "   StrictHostKeyChecking no" >> /etc/ssh/ssh_config
 +
 +#define root password to get ssh access to work
 +RUN echo "root:root_pw" | chpasswd
 +
 +#ENTRYPOINT ssh-keygen -A && rc-status && touch /run/openrc/softlevel &&/etc/init.d/sshd start && /vz/vendor/bin/ppm start -c /vz/etc/middleware.json --static-directory /vz/htdocs --cgi-path=/usr/local/bin/php
 +ENTRYPOINT /etc/init.d/sshd start && /vz/vendor/bin/ppm start -c /vz/etc/middleware.json --static-directory /vz/htdocs --cgi-path=/usr/local/bin/php
 +
 +
 +COPY config.dist.yaml /vz/etc/config.yaml
 +COPY options.js /vz/htdocs/js/options.js
 +</code>
 +
 +<note>
 +In dem Verzeichnis des Dockerfiles muss der PUBLIC SSH KEY vorhanden sein.
 +</note>
 +
 +<note important>Über <code>RUN echo "root:root_pw" | chpasswd</code> muss dem root User ein Passwort zugeteilt werden, ansonsten funktioniert der SSH-Zugriff nicht!</note>
 +
 +====Docker Compose File====
 +Ein fertiges Docker Compose File könnte wie folgt aussehen:
 +
 +<code>
 +version: '3'
 +
 +  mysqldb:
 +    image: mysql
 +    container_name: mysqldb
 +    command: --default-authentication-plugin=mysql_native_password
 +    restart: always
 +    ports:
 +      - 3306:3306
 +      - 33060:33060
 +    volumes:
 +      - <replace_with_localpath>/mysql/etc/mysql/conf.d:/etc/mysql/conf.d
 +      - <replace_with_localpath>/mysql/var/lib/mysql:/var/lib/mysql
 +
 +    volkszaehler:
 +    image: volkszaehler_ssh:2021-04-11_22-34
 +    container_name: volkszaehler
 +    ports:
 +      - 8080:8080
 +      - 8082:8082
 +      - 5582:5582
 +    depends_on:
 +      - mysqldb
 +    links:
 +      - mysqldb
 +    restart: always
 +
 +  jobber_mysql_ssh:
 +    image: jobber_mysql_ssh:2021-04-11_15-59
 +    container_name: jobber
 +    restart: always
 +    volumes:
 +      - <replace_with_localpath>/jobber/jobberuser:/home/jobberuser
 +</code>
 =====offene Punkte===== =====offene Punkte=====
-  * Aggregationen in der Middleware  
   * Mapping der Config-Files ohne erneutes Docker Build   * Mapping der Config-Files ohne erneutes Docker Build
   * Überprüfung des Ansatzes für den Push-Server   * Überprüfung des Ansatzes für den Push-Server
howto/docker.1627413065.txt.gz · Zuletzt geändert: von itchy2