- Jelina-Überblick
- JelinaCloud
- Konfigurationsbeispiele
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.
Verwendetes Gerät
Abschnitt betitelt „Verwendetes Gerät“| 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 |
Grundlegender Ablauf
Abschnitt betitelt „Grundlegender Ablauf“
Release veröffentlichen
Abschnitt betitelt „Release veröffentlichen“Ö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.

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.
Containerdienste bereitstellen
Abschnitt betitelt „Containerdienste bereitstellen“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.
- Konfigurationsdatei erstellen.

version: 2services: # 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'-
Klicken Sie auf „Weiter“ → „Speichern“, um das bearbeitete Release zu speichern.
-
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.

- Nach erfolgreichem Upload kann das Release veröffentlicht werden. Klicken Sie oben rechts auf „operation“ → „Veröffentlichen“.
Native Dienste bereitstellen
Abschnitt betitelt „Native Dienste bereitstellen“- 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 wartenfor((i=1;i<=100;i++));do if [ $(expr $i % 10) == 0 ] then echo "hello world $i" sleep 10done# 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.
- Erstellen und speichern Sie die Konfigurationsdatei.
version: 2programs: # Dienstname helloworld: program: helloworld # Neustartrichtlinie: bei einem Fehler neu starten restart: on-failure # Startbefehl des Dienstes command: /usr/bin/bash helloworld.sh- Klicken Sie in der Dienstliste auf das Dateisymbol und laden Sie die paketierte Programmdatei hoch.

- 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.

Release für das Gerät festlegen
Abschnitt betitelt „Release für das Gerät festlegen“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“.
Bereitstellungsstatus des Releases prüfen
Abschnitt betitelt „Bereitstellungsstatus des Releases prüfen“Hinweis: Das Gerät muss mit dem Netzwerk verbunden sein und ordnungsgemäß kommunizieren.
In der JelinaCloud-Oberfläche prüfen
Abschnitt betitelt „In der JelinaCloud-Oberfläche prüfen“Nach dem erfolgreichen Start eines Dienstes können Sie seinen aktuellen Status in der Dienstliste des Gerätedashboards prüfen.

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.
Auf dem Gerät prüfen
Abschnitt betitelt „Auf dem Gerät prüfen“- Öffnen Sie über den Fernzugriff auf der Gerätedetailseite in JelinaCloud ein SSH-Terminal oder verbinden Sie sich mit einem vorhandenen SSH-Client.

Bereitstellung der Container prüfen
Abschnitt betitelt „Bereitstellung der Container prüfen“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.
Bereitstellung nativer Dienste prüfen
Abschnitt betitelt „Bereitstellung nativer Dienste prüfen“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.
Funktion der Dienste prüfen
Abschnitt betitelt „Funktion der Dienste prüfen“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:

Fernzugriffskonsole:
Die folgende Beispielausgabe stammt aus dem Skript dieses Beispiels. Die konkreten Zahlen hängen vom Ausführungsfortschritt ab:
hello world 10hello world 20...name:jackAm 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.
Gerätekonfiguration und Dienstvariablen
Abschnitt betitelt „Gerätekonfiguration und Dienstvariablen“Priorität: Gerätekonfiguration > Flottenkonfiguration
Konfiguration
Abschnitt betitelt „Konfiguration“- Flottenkonfiguration: Standardmäßig verwenden alle Geräte der Flotte diese Konfiguration.

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.

Dienstvariablen
Abschnitt betitelt „Dienstvariablen“-
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.

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

-
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.

Weitere Hinweise
Abschnitt betitelt „Weitere Hinweise“-
Das Gerät führt nur Dienste aus, die im aktuellen Release enthalten sind;
-
Änderungen an gemeinsamen Flottenvariablen oder privaten Gerätevariablen führen zum Neustart der aktuell laufenden Dienste auf dem Gerät;
-
Nach Abschluss eines nativen Dienstes wechselt sein Status zu
Exited; -
Die Standard-Neustartrichtlinie nativer Dienste lautet
restart: always. Beialwaysversucht das System nach einer unerwarteten Unterbrechung, den Dienst neu zu starten. Erfolgen innerhalb eines Zeitfensters fortlaufend Neustarts, wird der Status alsFailedeingestuft. 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-
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;
-
Daten eines nativen Dienstes aus dem vorherigen Release bleiben nur erhalten, wenn sein Name im neuen Release unverändert ist;
-
Für dauerhafte Daten von Containerdiensten konfigurieren Sie beim Erstellen des Releases in
compose.ymlein Daten-Volume. Das Einhängen über einen ausdrücklich angegebenen Pfad wird nicht unterstützt; -
Der Containername ist als
Dienstname _ Image-ID _ Release-ID _ Release-Commitvorgegeben. Benutzer können ihn daher nicht mitcontainer_nameincompose.ymlneu festlegen; -
Der Entwicklermodus bietet umfangreichere Konfigurationsmöglichkeiten als der Modus ohne Entwicklerfunktionen;
-
Ein leerer Volumes-Wert in
compose.ymlbedeutet, dass kein Daten-Volume eingehängt wird. Die normale Containerbereitstellung wird dadurch nicht beeinträchtigt.