Aller au contenu
JelinaJelina DocumentationDocumentation technique
Retour au site officiel

Exemple de déploiement applicatif sur un équipement

Cette page explique le déploiement d’applications avec JelinaCloud.

Les captures proviennent de documents réels du produit et montrent les configurations et points d’accès. Les noms d’équipements, versions et services sont ceux de l’exemple ; adaptez-les au projet.

Installez d’abord JelinaOS et ajoutez l’équipement à une flotte. Voir Ajouter un équipement.

Équipement Version JelinaOS Version Jelinvisor Version du noyau
I.MX8MP EBC-RS08-A2 imx8mmebcrs08a2 Debian-10 1.0.4 1.0.9 5.4.70-g62c07ec2f origin

Procédure de déploiement applicatif

Ouvrez la flotte de l’équipement, puis « Versions → Nouvelle version ». Choisissez le mode d’édition et passez à l’éditeur compose.yml.

Création d’une Release dans la flotte

Choisir le mode d’édition :

Le mode développeur permet d’éditer Compose ; le mode non-développeur utilise un formulaire de services. Des exemples des deux interfaces suivent.

Exemple en mode développeur

Dans l’éditeur compose.yml, définissez les services. Une même version peut contenir des conteneurs et des services natifs ; ils sont expliqués séparément ici pour plus de clarté.

Recherchez l’image souhaitée sur Docker Hub (https://hub.docker.com/search?q=). Consultez la documentation de sa page pour les modalités de déploiement.

Exemple avec un conteneur Mysql :

  1. Rédigez la configuration.

Éditeur de configuration en mode développeur

version: 2
services:
#Nom du service
db:
# mysql : nom de l’image ; latest : dernière version, facultative, l’omission utilise par défaut la dernière image Docker Hub. Une version précise peut être indiquée, par exemple mysql:5.7
image: mysql:latest
#Variables d’environnement
environment:
# Mot de passe du superadministrateur mysql
MYSQL_ROOT_PASSWORD: '123456'
#Ports mappés entre hôte et conteneur
ports:
- '3306:3306'
  1. Cliquez sur « Suivant → Enregistrer » pour sauvegarder la version.

  2. Cliquez sur l’icône de fichier du service pour téléverser son paquet. Une image publique peut être téléchargée directement par Docker à partir de son nom ; son téléversement est donc facultatif.

Liste des services et téléversement des paquets

  1. Après transfert, cliquez sur « operation → Publier » en haut à droite.
  1. Écrivez un script de test helloworld.sh.

Il parcourt les nombres de 1 à 100. Lorsqu’un nombre est divisible par 10, il affiche hello world et attend 10 s. À la fin, il lit la variable name de l’équipement et l’affiche.

#!/bin/bash
#Parcourir 1 à 100 ; pour chaque multiple de 10, afficher hello world dans la console puis attendre 10s
for((i=1;i<=100;i++));
do
if [ $(expr $i % 10) == 0 ]
then
echo "hello world $i"
sleep 10
done
#Lire la variable d’équipement name, définie à jack, et l’afficher. Remarque : l’utilisateur définit name dans les variables communes de flotte ou privées d’équipement. Voir la section ##Configuration des équipements et variables de service## ci-dessous
echo "name:$name"

Empaquetez ensuite helloworld.sh dans helloworld.tar.gz.

  1. Rédigez et enregistrez la configuration.
version: 2
programs:
#Nom du service
helloworld:
program: helloworld
#Politique de redémarrage : relancer le service en cas d’échec
restart: on-failure
#Commande de démarrage du service
command: /usr/bin/bash helloworld.sh
  1. Cliquez sur l’icône de fichier du service pour téléverser le paquet.

Téléversement du paquet natif

  1. Après transfert, publiez via « operation → Publier » en haut à droite.

Mode non-développeur

Ce mode permet de définir un service en renseignant simplement son nom et sa commande de démarrage :

Cliquez sur « Ajouter des données », double-cliquez sur « – » pour modifier et saisissez les paramètres.

Cliquez sur « Suivant » pour enregistrer. Le téléversement du paquet et la publication suivent ensuite les mêmes étapes qu’en mode développeur.

Formulaire des services en mode non-développeur

Par défaut, la flotte suit la dernière version, mais le basculement peut prendre environ 15 minutes. Une affectation manuelle permet de l’accélérer.

Dans la vue d’ensemble, choisissez « operation → Affecter une version », sélectionnez la nouvelle version et confirmez avec « Affecter une version ».

Attention : l’équipement doit être connecté et communiquer normalement.

Après démarrage, consultez l’état du service dans la liste du tableau de bord.

Versions courante et cible, services et journaux

Quatre états courants :

  • Running : en cours d’exécution
  • Failed : échec du service
  • Restarting : redémarrage en cours
  • Exited : service terminé
  1. Ouvrez un terminal SSH depuis l’accès distant de la page de détails, ou utilisez votre client SSH.

Accès distant de l’équipement JelinaCloud

Dans le terminal, exécutez docker ps pour afficher les conteneurs actifs.

Vérifiez que le conteneur cible figure dans la liste avec STATUS à Up. Sinon, examinez la Release cible, le téléchargement d’image et les journaux.

Le nom du conteneur est imposé : nom du service _ ID image _ ID version _ Commit version.

Vérifiez que le service db de cet exemple est actif.

Consultez les journaux avec journalctl -u jelina-jelinvisor -f pour vérifier l’état de l’application.

Comparez les démarrages et sorties consignés par l’agent à l’état affiché dans le cloud.

L’équipement remonte périodiquement son état. Tenez compte de sa période réelle de remontée et de l’état effectif du service pour confirmer son fonctionnement.

Ouvrez Navicat et connectez-vous au MySQL déployé. Renseignez l’adresse, le compte administrateur, son mot de passe défini dans compose.yml et le port :

Paramètre Valeur dans l’exemple
Adresse Adresse IP accessible de l’équipement
Port Port hôte mappé dans Compose, 3306 ici
Utilisateur root ou un utilisateur métier déjà créé
Mot de passe Mot de passe de base de données dans la configuration applicative

Cliquez sur « Tester la connexion ». Un succès confirme que l’application est déployée et accessible.

D’autres paramètres MySQL, comme les comptes, peuvent être définis dans les variables privées de l’équipement ou partagées de la flotte.

Après son lancement, les sorties helloworld apparaissent dans les journaux du tableau de bord et dans le terminal distant :

Tableau de bord JelinaCloud :

État des services et zone des journaux

Terminal distant :

Exemple de sortie du script ; les nombres varient selon son avancement :

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

La sortie finale name:jack indique que le script a lu la variable de service name. Si la valeur diffère, vérifiez son périmètre et sa valeur effective.

Configuration des équipements et variables de service

Section intitulée « Configuration des équipements et variables de service »

Priorité : configuration de l’équipement > configuration de la flotte

  • Flotte : par défaut, tous ses équipements utilisent cette configuration.

Configuration partagée des équipements de flotte

Équipements couverts : équipements de la flotte utilisant cette configuration.

  • Équipement : chaque équipement peut définir ses propres valeurs.

Configuration et remplacement propres à l’équipement

  • Variables partagées de flotte : par défaut, elles définissent l’environnement des services de tous les équipements.

    Par exemple, définir a, b et name pour tous les services les rend présentes sur tous les équipements.

Variables de service partagées

Vous pouvez également choisir un service d’image précis :

Ajouter une variable à un service précis

  • Variables privées d’équipement : chaque équipement peut définir ses valeurs et remplacer celles de la flotte avec « override ».

    Par exemple, remplacez name, a et b : les nouvelles valeurs ne s’appliquent qu’à cet équipement et n’affectent pas les autres.

Remplacer une variable partagée sur l’équipement

  1. L’équipement exécute uniquement les services de sa version actuelle.

  2. Modifier une variable partagée ou privée redémarre les services de l’équipement concerné.

  3. Un service natif terminé passe à l’état Exited.

  4. La stratégie native par défaut est restart: always. Avec always, le système tente un redémarrage après interruption anormale. Des redémarrages répétés dans une même période entraînent l’état Failed. Plusieurs stratégies sont disponibles selon les besoins.

restart: Options : no,on-success,on-failure,on-abnormal,on-watchdog,on-abort,always ; par défaut always
  1. Les conteneurs privés et services natifs nécessitent un paquet téléversé ; sinon, leur version ne peut pas être publiée.

  2. Pour qu’un service natif conserve les données de l’ancienne version, son nom doit rester identique dans la nouvelle.

  3. Pour la persistance des conteneurs, déclarez un volume dans compose.yml à la création de la version. Le montage par chemin explicite n’est pas pris en charge.

  4. Le nom du conteneur est imposé : nom du service _ ID image _ ID version _ Commit version. Il ne peut donc pas être redéfini avec container_name dans compose.yml.

  5. Le mode développeur offre davantage de possibilités de configuration que le mode non-développeur.

  6. Une valeur Volumes vide dans compose.yml signifie qu’aucun volume n’est monté et n’empêche pas le déploiement normal du conteneur.