Zum Inhalt springen
JelinaJelina DocumentationTechnische Dokumentation
Zur Website

Beispiel zur Anwendungsbereitstellung auf Geräten

Dieser Artikel erläutert, wie Sie Anwendungen mit JelinaCloud auf Geräten bereitstellen.

Die folgenden Screenshots stammen aus vorhandenen Originalunterlagen zum Produkt und zeigen Konfiguration und Bedienungszugänge. Geräte-, Versions- und Dienstnamen sind Beispieldaten und müssen an Ihr Projekt angepasst werden.

Vor der Anwendungsbereitstellung müssen Sie JelinaOS auf dem Gerät installieren und es einer JelinaCloud-Flotte hinzufügen. Die Schritte finden Sie unter Geräte hinzufügen.

Gerät JelinaOS-Version Jelinvisor-Version Kernelversion
I.MX8MP EBC-RS08-A2 imx8mmebcrs08a2 Debian-10 1.0.4 1.0.9 5.4.70-g62c07ec2f origin

Ablauf der Anwendungsbereitstellung (1)

Öffnen Sie die zum Gerät gehörende Flotte innerhalb der Organisation. Wählen Sie „Releases“ → „Neues Release“, legen Sie den Bearbeitungsmodus fest und klicken Sie auf „Weiter“, um den Editor für compose.yml zu öffnen.

Zugang zum Erstellen eines Releases in einer Flotte

Bearbeitungsmodus auswählen:

Im Entwicklermodus bearbeiten Sie die Compose-Konfiguration. Im Modus ohne Entwicklerfunktionen erfassen Sie Dienste über ein Formular. Beispiele für beide Oberflächen folgen unten.

Beispiel im Entwicklermodus

Erstellen Sie im Editor für compose.yml die Konfiguration der Anwendungsdienste. Ein neues Release kann sowohl Containerdienste als auch native Dienste in derselben compose.yml enthalten. Zur besseren Erläuterung werden beide Bereitstellungsarten hier getrennt beschrieben.

Suchen Sie im Image-Katalog von Docker Hub (https://hub.docker.com/search?q=) nach dem gewünschten Dienst. Hinweise zur konkreten Bereitstellung finden Sie in der Dokumentation auf der jeweiligen Seite.

Beispiel: Bereitstellung eines MySQL-Containerdienstes.

  1. Konfigurationsdatei erstellen.

Beispiel des Konfigurationseditors im Entwicklermodus

version: 2
services:
# Dienstname
db:
# mysql: Imagename; latest: neueste Imageversion. Ohne Tag wird standardmäßig latest von Docker Hub abgerufen. Eine bestimmte Version kann etwa mit mysql:5.7 angegeben werden.
image: mysql:latest
# Umgebungsvariablen
environment:
# Anmeldepasswort des MySQL-Superadministrators
MYSQL_ROOT_PASSWORD: '123456'
# Portzuordnung zwischen Host und Container
ports:
- '3306:3306'
  1. Klicken Sie auf „Weiter“ → „Speichern“, um das bearbeitete Release zu speichern.

  2. Klicken Sie in der Dienstliste auf das Dateisymbol und laden Sie die paketierte Programmdatei hoch. Öffentliche Images können von Docker über ihren Namen bezogen werden; in diesem Fall ist kein Dateiupload erforderlich.

Release-Dienstliste und Uploadzugang für Anwendungspakete

  1. Nach erfolgreichem Upload kann das Release veröffentlicht werden. Klicken Sie oben rechts auf „operation“ → „Veröffentlichen“.
  1. Erstellen Sie zum Testen ein einfaches Skript helloworld.sh.

Funktion: Das Skript durchläuft die Zahlen 1 bis 100. Ist eine Zahl ohne Rest durch 10 teilbar, gibt es hello world auf der Konsole aus und wartet 10 Sekunden. Nach Abschluss der Schleife liest es die Gerätevariable name aus und gibt ihren Wert auf der Konsole aus.

#!/bin/bash
# Von 1 bis 100 iterieren; bei durch 10 teilbaren Zahlen einmal hello world ausgeben und 10 Sekunden warten
for((i=1;i<=100;i++));
do
if [ $(expr $i % 10) == 0 ]
then
echo "hello world $i"
sleep 10
done
# Gerätevariable name abrufen (hier auf jack gesetzt) und ausgeben. name wird als gemeinsame Flottenvariable oder private Gerätevariable konfiguriert. Siehe den folgenden Abschnitt zu Gerätekonfiguration und Dienstvariablen.
echo "name:$name"

Packen Sie das fertige Skript helloworld.sh in das Archiv helloworld.tar.gz.

  1. Erstellen und speichern Sie die Konfigurationsdatei.
version: 2
programs:
# Dienstname
helloworld:
program: helloworld
# Neustartrichtlinie: bei einem Fehler neu starten
restart: on-failure
# Startbefehl des Dienstes
command: /usr/bin/bash helloworld.sh
  1. Klicken Sie in der Dienstliste auf das Dateisymbol und laden Sie die paketierte Programmdatei hoch.

Uploadzugang für das Paket einer nativen Anwendung

  1. Veröffentlichen Sie das Release nach erfolgreichem Upload über „operation“ → „Veröffentlichen“ oben rechts.

Bearbeitungsmodus ohne Entwicklerfunktionen

Dieser Modus richtet sich an Benutzer ohne Entwicklungserfahrung. Für die Dienstkonfiguration genügen grundlegende Angaben wie Dienstname und Startbefehl. Die Bearbeitung erfolgt wie folgt:

Klicken Sie auf „Daten hinzufügen“ und doppelklicken Sie auf „–“, um die Bearbeitung zu starten. Geben Sie die Dienstkonfiguration ein.

Klicken Sie nach der Bearbeitung auf „Weiter“, um zu speichern. Der anschließende Upload der Programmdateien und die Veröffentlichung entsprechen dem Vorgehen im Entwicklermodus.

Beispiel der formularbasierten Dienstkonfiguration ohne Entwicklermodus

Standardmäßig folgt die Flotte automatisch der neuesten Version; bis das Gerät auf diese Version wechselt, können voraussichtlich 15 Minuten vergehen. Für einen schnelleren Wechsel können Sie die Version manuell festlegen.

Klicken Sie auf der Geräteübersicht oben rechts auf „operation“ → „Version festlegen“. Wählen Sie im Dialog das gerade veröffentlichte Release und bestätigen Sie mit „Version festlegen“.

Hinweis: Das Gerät muss mit dem Netzwerk verbunden sein und ordnungsgemäß kommunizieren.

Nach dem erfolgreichen Start eines Dienstes können Sie seinen aktuellen Status in der Dienstliste des Gerätedashboards prüfen.

Aktuelles und Ziel-Release des Geräts, Dienststatus und Betriebsprotokolle

Häufig sind folgende vier Statuswerte:

  • Running: Der Dienst läuft;
  • Failed: Die Dienstausführung ist fehlgeschlagen;
  • Restarting: Der Dienst wird neu gestartet;
  • Exited: Der Dienst wurde beendet.
  1. Öffnen Sie über den Fernzugriff auf der Gerätedetailseite in JelinaCloud ein SSH-Terminal oder verbinden Sie sich mit einem vorhandenen SSH-Client.

Fernzugriff auf ein Gerät in JelinaCloud

Führen Sie nach dem Verbindungsaufbau in der Konsole docker ps aus, um die aktuell laufenden Containerdienste anzuzeigen:

Prüfen Sie, ob der Zielcontainer in der Liste erscheint und STATUS den Wert Up zeigt. Falls nicht, untersuchen Sie Ziel-Release, Image-Downloadstatus und Containerprotokolle.

Hinweis: Der Containername folgt dem Muster Dienstname _ Image-ID _ Release-ID _ Release-Commit.

Prüfen Sie in der Containerliste, ob der Dienst db dieses Beispiels läuft.

Mit journalctl -u jelina-jelinvisor -f können Sie außerdem Geräteprotokolle anzeigen und den aktuellen Anwendungszustand prüfen:

Prüfen Sie die Start- und Beendigungsereignisse der Dienste in den Agentenprotokollen und vergleichen Sie diese mit dem Dienststatus im Cloud-Dashboard.

Das Gerät meldet seinen Status regelmäßig. Berücksichtigen Sie das tatsächliche Meldeintervall und den aktuellen Dienstzustand, um den ordnungsgemäßen Betrieb des Zieldienstes zu bestätigen.

Tatsächlichen Betrieb des MySQL-Containers prüfen
Abschnitt betitelt „Tatsächlichen Betrieb des MySQL-Containers prüfen“

Öffnen Sie Navicat und versuchen Sie, eine Fernverbindung zur auf dem Gerät bereitgestellten MySQL-Anwendung aufzubauen. Geben Sie Adresse, Administratorkonto, das in compose.yml konfigurierte MySQL-Administratorpasswort und den Port an:

Verbindungseinstellung Wert in diesem Beispiel
Adresse Erreichbare IP-Adresse des Geräts
Port In Compose zugeordneter Hostport; hier 3306
Benutzername root oder ein bereits angelegter Anwendungsbenutzer
Passwort Datenbankpasswort aus der aktuellen Anwendungskonfiguration

Klicken Sie auf „Verbindung testen“. Eine Erfolgsmeldung bestätigt, dass die Anwendung auf dem Gerät bereitgestellt wurde und eine nutzbare Verbindung möglich ist.

Weitere MySQL-Umgebungseinstellungen, etwa Datenbankbenutzer, können über private Gerätevariablen oder gemeinsame Flottenvariablen in JelinaCloud konfiguriert werden.

Tatsächlichen Betrieb des nativen helloworld-Skripts prüfen
Abschnitt betitelt „Tatsächlichen Betrieb des nativen helloworld-Skripts prüfen“

Nach dem Start des nativen Dienstes erscheinen die Ausgaben von helloworld sowohl in den Protokollen des JelinaCloud-Gerätedashboards als auch in der Geräteausgabe der Fernzugriffskonsole:

JelinaCloud-Gerätedashboard:

Bereiche für Dienststatus und Protokolle im Gerätedashboard

Fernzugriffskonsole:

Die folgende Beispielausgabe stammt aus dem Skript dieses Beispiels. Die konkreten Zahlen hängen vom Ausführungsfortschritt ab:

hello world 10
hello world 20
...
name:jack

Am Ende gibt das Skript name:jack aus. Dies zeigt, dass es die für den Dienst gesetzte Variable name gelesen hat. Falls der erwartete Wert fehlt, prüfen Sie Geltungsbereich und tatsächlichen Wert der Variablen.

Priorität: Gerätekonfiguration > Flottenkonfiguration

  • Flottenkonfiguration: Standardmäßig verwenden alle Geräte der Flotte diese Konfiguration.

Gemeinsame Gerätekonfiguration der Flotte

Abgedeckte Geräte: Gibt an, welche Geräte der aktuellen Flotte nach dieser Konfiguration arbeiten.

  • Gerätekonfiguration: Einzelne Geräte können eigene Konfigurationswerte verwenden.

Konfiguration eines einzelnen Geräts und Überschreibungsstatus

  • Gemeinsame Dienstvariablen der Flotte: Standardmäßig richten sich die Umgebungsvariablen der Dienste auf allen Flottengeräten nach dieser Konfiguration.

    Werden beispielsweise die drei Variablen a, b und name auf Flottenebene für alle Dienste festgelegt, sind diese Variablen auf allen Geräten der Flotte vorhanden.

Liste gemeinsamer Dienstvariablen der Flotte

Umgebungsvariablen können auch gezielt für einen bestimmten Image-Dienst konfiguriert werden:

Variable für einen bestimmten Dienst hinzufügen

  • Private Dienstvariablen des Geräts: Einzelne Geräte können eigene Umgebungsvariablen für ihre Dienste festlegen. Über „override“ lässt sich ein Flottenwert überschreiben und damit ein gerätespezifischer Wert verwenden.

    Beispielsweise können Sie über „override“ neue Werte für die Flottenvariablen name, a und b festlegen. Diese gelten ausschließlich für das betreffende Gerät und beeinflussen andere Geräte der Flotte nicht.

Gemeinsame Dienstvariablen auf Geräteebene überschreiben

  1. Das Gerät führt nur Dienste aus, die im aktuellen Release enthalten sind;

  2. Änderungen an gemeinsamen Flottenvariablen oder privaten Gerätevariablen führen zum Neustart der aktuell laufenden Dienste auf dem Gerät;

  3. Nach Abschluss eines nativen Dienstes wechselt sein Status zu Exited;

  4. Die Standard-Neustartrichtlinie nativer Dienste lautet restart: always. Bei always versucht das System nach einer unerwarteten Unterbrechung, den Dienst neu zu starten. Erfolgen innerhalb eines Zeitfensters fortlaufend Neustarts, wird der Status als Failed eingestuft. Es stehen mehrere Neustartrichtlinien zur Verfügung, die Sie passend zu Ihren Anforderungen wählen können;

restart: Optionen: no,on-success,on-failure,on-abnormal,on-watchdog,on-abort,always; Standard: always
  1. Für Containerdienste mit nicht öffentlichen Images und für native Dienste müssen Anwendungspakete hochgeladen werden. Andernfalls kann das zugehörige Release nicht veröffentlicht werden;

  2. Daten eines nativen Dienstes aus dem vorherigen Release bleiben nur erhalten, wenn sein Name im neuen Release unverändert ist;

  3. Für dauerhafte Daten von Containerdiensten konfigurieren Sie beim Erstellen des Releases in compose.yml ein Daten-Volume. Das Einhängen über einen ausdrücklich angegebenen Pfad wird nicht unterstützt;

  4. Der Containername ist als Dienstname _ Image-ID _ Release-ID _ Release-Commit vorgegeben. Benutzer können ihn daher nicht mit container_name in compose.yml neu festlegen;

  5. Der Entwicklermodus bietet umfangreichere Konfigurationsmöglichkeiten als der Modus ohne Entwicklerfunktionen;

  6. Ein leerer Volumes-Wert in compose.yml bedeutet, dass kein Daten-Volume eingehängt wird. Die normale Containerbereitstellung wird dadurch nicht beeinträchtigt.