Benutzer-Werkzeuge

Webseiten-Werkzeuge


howto:docker

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
howto:docker [2021/03/28 20:49] – angelegt itchy2howto:docker [2021/07/27 21:38] (aktuell) – [offene Punkte] itchy2
Zeile 27: Zeile 27:
 sed -i 's/  password: demo/  password: volkszaehler_password/g' config.dist.yaml</code> sed -i 's/  password: demo/  password: volkszaehler_password/g' config.dist.yaml</code>
  
-In der options.js kann (optional!) der Demo-Server deaktiviert werden.+In der options.js **muss** der Eintrag <code> url: 'api' </code> zu <code>url: ''</code> angepasst werden. 
  
-<note> Mir ist es bisher noch nicht gelungen eine lauffähige Version der options.js ohne Demo-Server zu erzeugenDieser Punkt muss hier im Nachgang noch eingepflegt werden </note>+In der options.js kann (optional!) der Demo-Server deaktiviert werden. Dazu müssen die folgenden Zeilen entfernt werden: 
 + 
 +<code> 
 + }, { 
 +  title: 'Volkszaehler Demo', 
 +  url: 'https://demo.volkszaehler.org/middleware.php' 
 +</code> 
 + 
 +<note> Achtet bitte auf die korrekte Klammer und Komma-SetzungDer Block mit dem Title Local muss mit } abgeschlossen werden und darf danach kein Komma enthalten. </note>
  
 Die Dateien config.dist.yaml und ggf. options.js werden nach der Modifikation in einem neuen Order erstellt. In diesem Ordner erstellen wir ebenfalls jetzt das Dockerfile mit folgendem Inhalt: <code>FROM volkszaehler/volkszaehler Die Dateien config.dist.yaml und ggf. options.js werden nach der Modifikation in einem neuen Order erstellt. In diesem Ordner erstellen wir ebenfalls jetzt das Dockerfile mit folgendem Inhalt: <code>FROM volkszaehler/volkszaehler
Zeile 64: Zeile 72:
  
  
 +=====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.
 +
 +====Jobber====
 +
 +Das Dockerfile sieht wie folgt aus:
 +
 +<code>
 +FROM jobber:latest
 +# Download latest listing of available packages:
 +User root
 +
 +RUN apk add --no-cache mysql-client openssh
 +
 +#Copy of SSH Keys
 +User jobberuser
 +RUN mkdir -p /home/jobberuser/.ssh
 +COPY id_rsa /home/jobberuser/.ssh/id_rsa
 +COPY id_rsa.pub /home/jobberuser/.ssh/id_rsa.pub
 +
 +#Adjust SSH Config
 +User root
 +RUN chown -R jobberuser:jobberuser /home/jobberuser/.ssh
 +RUN echo "Host *" >> /etc/ssh/ssh_config
 +RUN echo "   StrictHostKeyChecking no" >> /etc/ssh/ssh_config
 +
 +User jobberuser
 +</code>
 +
 +<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>
 +
 +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
-  * Deaktivierung Volkszaehler Demo Kanäle 
   * Überprüfung des Ansatzes für den Push-Server   * Überprüfung des Ansatzes für den Push-Server
howto/docker.1616957355.txt.gz · Zuletzt geändert: 2021/03/28 20:49 von itchy2