Skip to Content
Nouvelle version 12 disponible 🎉

Docker

Docker est un moyen pratique et efficace d’exécuter le Babel Licensing Service à des fins de test. Docker fournit un environnement léger et isolé, appelé conteneur, qui encapsule le Babel Licensing Service et toutes ses dépendances, ce qui facilite le déploiement et le test du service sur différents systèmes, sans se soucier des problèmes de compatibilité ni des conflits avec l’environnement hôte.

Prérequis

  1. Docker Desktop 
  2. Paquet ZIP du Babel Licensing Service (babel_service_net80_x.y.z.w.zip), un seul paquet pour les deux éditions
  3. Fichier de licence Babel Licensing Server ou Data Center (babel.licenses)

Docker doit être installé avant de commencer. Téléchargez-le depuis le site officiel de Docker  et suivez les instructions d’installation correspondant à votre système d’exploitation.

Les étapes ci-dessous installent le Babel Licensing Service sur Docker.

Créer le Dockerfile

Pour préparer l’environnement dans lequel Docker génère l’image du Babel Licensing Service, suivez les étapes ci-dessous.

Créer un dossier de travail

Créez sur votre machine locale un dossier destiné aux fichiers du Babel Licensing Service. Ce guide l’appelle le « dossier de travail ».

Copier les fichiers du service

Copiez l’archive ZIP du Babel Licensing Service et le fichier babel.licenses dans le dossier de travail créé à l’étape précédente.

Extraire l’archive

Extrayez le contenu de l’archive ZIP du Babel Licensing Service dans un sous-dossier nommé « babel » du dossier de travail.

Créer le Dockerfile

Dans le dossier de travail, créez un fichier nommé « Dockerfile » avec n’importe quel éditeur de texte ou IDE.

Ajouter le contenu du Dockerfile

Copiez le contenu suivant dans le fichier « Dockerfile » et enregistrez-le.

FROM mcr.microsoft.com/dotnet/aspnet:8.0 as runtime # Expose service ports EXPOSE 5005 # Set working directory WORKDIR /var/www/babel-lic # Copy babel licensing service files to working directory COPY /babel . # Copy license file to working directory COPY /babel.licenses . # Set entrypoint ENTRYPOINT [ "dotnet", "Babel.Licensing.Service.dll" ]

Voici le détail de son contenu :

FROM mcr.microsoft.com/dotnet/aspnet:8.0 as runtime

Cette ligne indique l’image de base du conteneur Docker. Il s’agit ici de l’image du runtime ASP.NET provenant du registre de conteneurs de Microsoft.

EXPOSE 5005

L’instruction EXPOSE indique que le conteneur expose ce port à la machine hôte, ce qui permet d’y accéder de l’extérieur.

WORKDIR /var/www/svc/babel

L’instruction WORKDIR définit /var/www/svc/babel comme répertoire de travail à l’intérieur du conteneur. C’est l’emplacement où les commandes suivantes seront exécutées.

COPY /babel .

Cette ligne copie le contenu du répertoire babel (qui contient les fichiers du Babel Licensing Service) depuis le dossier de travail vers le répertoire de travail du conteneur, /var/www/svc/babel.

COPY /babel.licenses .

De même, cette ligne copie le fichier babel.licenses depuis le contexte de build vers le répertoire de travail du conteneur.

ENTRYPOINT [ "dotnet", "Babel.Licensing.Service.dll" ]

L’instruction ENTRYPOINT indique la commande exécutée au démarrage du conteneur. Ici, elle exécute la commande dotnet avec Babel.Licensing.Service.dll comme point d’entrée du Babel Licensing Service.

Ce Dockerfile met en place l’environnement nécessaire, expose le port requis, copie les fichiers du service et le fichier de licence, et définit le point d’entrée du Babel Licensing Service.

Une fois générée avec Docker, cette image peut être utilisée avec Docker Compose pour déployer le Babel Licensing Service.

Docker Compose

Jusqu’ici, Docker a reçu les instructions pour générer l’image qui exécute le Babel Licensing Service, mais rien dans la configuration ne démarre encore de base de données.

Pour configurer l’installation complète du Babel Licensing Service, base de données comprise, créez un fichier nommé docker-compose.yml dans le dossier de travail. Ajoutez le contenu suivant au fichier docker-compose.yml :

version: '3.7' services: # Database db: image: mysql:latest volumes: - type: volume source: dbdata target: /var/lib/mysql restart: always ports: - '6610:3306' environment: MYSQL_ROOT_PASSWORD: eWk4fSTa45PGpJ MYSQL_DATABASE: licenses MYSQL_USER: babel MYSQL_PASSWORD: babel networks: - babellic # Babel Licensing licensing: depends_on: - db container_name: babel-licensing restart: always build: dockerfile: Dockerfile context: . image: babel/licensing:latest ports: - '5005:5005' environment: DOTNET_CLI_HOME: /tmp # Environment ASPNETCORE_ENVIRONMENT: Production # Service Address KESTREL__ENDPOINTS__GRPC__URL: http://*:5005 # Available database providers: SQLServer, MySQL, SQLite BABEL_SERVICE_DATABASE__PROVIDER: MySQL # Connection strings environment variables # SQL Server: BABEL_SERVICE_CONNECTIONSTRINGS__SQLSERVER # MySQL: BABEL_SERVICE_CONNECTIONSTRINGS__MYSQL # SQLite: BABEL_SERVICE_CONNECTIONSTRINGS__SQLITE BABEL_SERVICE_CONNECTIONSTRINGS__MYSQL: Server=db;User=babel;Password=babel;Database=licenses # Authentication token variables BABEL_SERVICE_APPLICATION__SIGNINGKEY: q9F0nLFRuphIHUdrlphe BABEL_SERVICE_APPLICATION__TOKENEXPIRATION: 00:30:00 # Licensing variables BABEL_SERVICE_LICENSING__HEARTBEATINTERVAL: 00:05:00 # Reporting variables BABEL_SERVICE_REPORTING__ENCRYPTIONKEY: p5UwIWaqaChLxe3eJA9o networks: - babellic networks: babellic: volumes: dbdata: licensing:

Le fichier docker-compose.yml définit une application composée de deux services : licensing et db. L’image du service de licences est générée à partir du Dockerfile indiqué.

Lors du déploiement de l’application avec Docker Compose, le port 5005 du conteneur est mappé sur le port 5005 de l’hôte, comme l’indique le fichier. Vérifiez que le port 5005 de la machine hôte n’est pas utilisé par un autre conteneur. Si c’est le cas, vous pouvez le remplacer par un port disponible.

N’oubliez pas de remplacer les mots de passe root et utilisateur de MySQL par des mots de passe forts et sûrs (vous n’avez pas besoin de les mémoriser), dans le service db et dans la chaîne de connexion du service Babel. Le mot de passe de l’utilisateur sert à établir la connexion avec la base de données MySQL.

Le fichier docker-compose.yml définit la façon dont les images Docker interagissent à l’exécution. Il précise les configurations, les variables d’environnement et la configuration réseau nécessaires aux services. En utilisant Docker Compose avec ce fichier, vous pouvez déployer et gérer facilement le Babel Licensing Service et la base de données associée.

Démarrer le service

Après avoir préparé le fichier docker-compose.yml comme décrit dans la section précédente, vous pouvez exécuter la commande :

docker-compose up -d

Cette commande démarre le Babel Licensing Service et la base de données associée en mode détaché. Attendez le démarrage des conteneurs : Docker Compose commence par télécharger les images requises (si elles ne sont pas déjà présentes), puis crée les conteneurs selon les configurations définies dans le fichier docker-compose.yml. Quelques instants peuvent être nécessaires avant que les conteneurs soient pleinement opérationnels.

Après avoir exécuté la commande, vous pouvez utiliser la commande docker ps pour vérifier que les conteneurs sont en cours d’exécution. Elle affiche la liste des conteneurs en cours d’exécution avec leurs détails, dont le conteneur du Babel Licensing Service et celui de la base de données associée.

$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5d2d3fc62f0a babel/licensing:latest "dotnet Babel.Licens…" 25 seconds ago Up 23 seconds 0.0.0.0:5005->5005/tcp babel-licensing 0e4245f683cf mysql:latest "docker-entrypoint.s…" 25 seconds ago Up 24 seconds 33060/tcp, 0.0.0.0:6610->3306/tcp babel-licesing-db-1

Le fichier de licence détermine l’édition. Avec une licence Data Center, l’application web est servie à l’adresse du service. Avec une licence Server, cette adresse affiche une page de mise à niveau avec une comparaison des éditions ; le service, son API et Babel Desktop continuent de fonctionner. Pour effectuer la mise à niveau, remplacez babel.licenses et redémarrez le conteneur ; il n’y a rien à réinstaller.

ArrĂŞter le service

Pour arrêter et supprimer les conteneurs, ainsi que les volumes associés, vous pouvez utiliser les commandes suivantes :

  1. Arrêter et supprimer les conteneurs : pour arrêter et supprimer les conteneurs créés avec Docker Compose, exécutez la commande suivante :
$ docker compose down

La commande down arrête et supprime les conteneurs définis dans le fichier docker-compose.yml. Elle arrête les conteneurs en cours d’exécution et supprime les ressources associées, telles que les réseaux et les volumes, tout en conservant les images.

  1. Arrêter et supprimer les volumes : si vous souhaitez aussi supprimer les volumes associés aux conteneurs, vous pouvez utiliser l’option -v avec la commande down. Exécutez la commande suivante :
$ docker compose down -v

L’option -v demande à Docker Compose non seulement d’arrêter et de supprimer les conteneurs, mais aussi de supprimer les volumes créés pendant le cycle de vie des conteneurs. Toutes les ressources liées aux conteneurs sont ainsi supprimées proprement, y compris les fichiers de données de la base.

Notez que ces commandes doivent être exécutées dans le répertoire où se trouve le fichier docker-compose.yml. Assurez-vous également que Docker Compose est installé et disponible dans votre environnement de ligne de commande.

En exécutant docker compose down ou docker compose down -v, vous arrêtez et supprimez les conteneurs, et vous supprimez les volumes associés, ce qui libère les ressources utilisées par le Babel Licensing Service.

Configurer le Babel Licensing Service

Le fichier docker-compose.yml permet de configurer l’environnement du conteneur du service babel-licensing au moyen de plusieurs variables d’environnement. Ces variables remplacent les paramètres de configuration par défaut du Babel Licensing Service, qui sont stockés dans le fichier appsettings.json. Voici une description détaillée des variables de configuration disponibles :

  1. DOTNET_CLI_HOME : indique l’emplacement du répertoire temporaire du CLI (Command Line Interface) de .NET. Ici, il est réglé sur /tmp.
  2. ASPNETCORE_ENVIRONMENT : définit l’environnement dans lequel s’exécute le Babel Licensing Service. La valeur Production indique que le service s’exécute dans un environnement de production.
  3. KESTREL__ENDPOINTS__GRPC__URL : définit l’URL du point de terminaison gRPC du Babel Licensing Service. Ici, elle est réglée sur http://*:5005, ce qui indique que le service écoute sur toutes les interfaces réseau disponibles, sur le port 5005.
  4. BABEL_SERVICE_DATABASE__PROVIDER : indique le fournisseur de base de données utilisé par le Babel Licensing Service. La valeur MySQL indique que MySQL est utilisé comme fournisseur de base de données.
  5. BABEL_SERVICE_CONNECTIONSTRINGS__MYSQL : définit la chaîne de connexion de la base de données MySQL. Elle indique le serveur, l’utilisateur, le mot de passe et le nom de la base de données qu’utilise le Babel Licensing Service. Le fournisseur MySQL fonctionne aussi sur l’image .NET 10 (mcr.microsoft.com/dotnet/aspnet:10.0 avec le paquet babel_service_net100_x.y.z.w.zip), où le service utilise Microting.EntityFrameworkCore.MySql, le fork de Pomelo, avec les mêmes variables d’environnement.
  6. BABEL_SERVICE_APPLICATION__SIGNINGKEY : définit la clé de signature utilisée pour générer et valider les jetons d’authentification du Babel Licensing Service. Depuis la version 11.7.0, le fichier appsettings.json fourni ne contient plus de valeur codée en dur : si SigningKey est vide au démarrage, le service génère une clé aléatoire pour le processus en cours (et consigne un avertissement dans le journal). Pour tout déploiement autre qu’un déploiement de développement, et surtout lorsque plusieurs réplicas s’exécutent derrière un équilibreur de charge, réglez toujours cette variable sur un secret explicite et persistant, afin que les jetons émis survivent aux redémarrages et soient acceptés par toutes les instances.
  7. BABEL_SERVICE_APPLICATION__TOKENEXPIRATION : définit la durée de validité des jetons d’authentification émis par le Babel Licensing Service.

Administrateur initial (depuis la version 11.7.0) : le service n’est plus livré avec les identifiants par défaut admin / admin. Pour créer l’administrateur initial au premier démarrage, définissez BABEL_SERVICE_APPLICATION__ADMINUSERNAME et BABEL_SERVICE_APPLICATION__ADMINPASSWORD (et, si vous le souhaitez, BABEL_SERVICE_APPLICATION__ADMINEMAIL). Le conteneur démarre même en l’absence de ces valeurs, mais aucun utilisateur administrateur n’est créé : l’application web (Data Center) ne peut donc pas se connecter avec ce compte et Babel Desktop ne dispose d’aucune clé API d’administrateur pour se connecter, tant que les deux valeurs obligatoires ne sont pas définies et que le conteneur n’est pas redémarré. Ces valeurs ne sont lues qu’au premier démarrage ; changez ensuite le mot de passe dans l’application web et retirez ADMINPASSWORD de votre environnement.

  1. BABEL_SERVICE_LICENSING__HEARTBEATINTERVAL : indique l’intervalle maximal auquel les clients doivent envoyer un signal de présence au Babel Licensing Service. Le format est hh:mm:ss et exprime l’intervalle de temps entre deux signaux de présence.
  2. BABEL_SERVICE_REPORTING__ENCRYPTIONKEY : définit la clé de chiffrement utilisée pour chiffrer les données de la fonctionnalité de rapports du Babel Licensing Service.

Ces variables d’environnement permettent de personnaliser et de configurer différents aspects du Babel Licensing Service selon vos besoins. En remplaçant ces variables dans le fichier docker-compose.yml, vous modifiez le comportement du service sans toucher au fichier appsettings.json d’origine, ce qui rend la configuration souple et simple.

Image Docker de MSSQL Server

Pour configurer Babel Licensing avec MSSQL dans Docker, l’installation utilise la dernière image Azure SQL Edge, compatible avec Linux Ubuntu. La configuration YAML fournie présente les principales variables d’environnement nécessaires à l’accès à la base de données, aux jetons d’authentification et aux paramètres de licence. Cette approche simplifie le déploiement de Babel Licensing et son intégration avec une base de données MSSQL dans un environnement Docker.

version: '3.7' services: # Database ms-sql-server: image: mcr.microsoft.com/azure-sql-edge:latest volumes: - events_mssql:/var/opt/mssql restart: always ports: - '1433:1433' environment: MSSQL_SA_PASSWORD: eWk4fSTa45PGpJ ACCEPT_EULA: Y DATABASE: licenses networks: - babellic # Babel Licensing licensing: depends_on: - ms-sql-server container_name: babel-licensing-mssql restart: always build: dockerfile: Dockerfile context: . image: babel/licensing:latest ports: - '5005:5005' volumes: - type: bind source: ./babel target: /var/www/babel-lic environment: DOTNET_CLI_HOME: /tmp # Environment ASPNETCORE_ENVIRONMENT: Production # Service Address KESTREL__ENDPOINTS__GRPC__URL: http://*:5005 # Available database providers: SQLServer, MySQL, SQLite BABEL_SERVICE_DATABASE__PROVIDER: SQLServer # Connection strings environment variables # SQL Server: BABEL_SERVICE_CONNECTIONSTRINGS__SQLSERVER # MySQL: BABEL_SERVICE_CONNECTIONSTRINGS__MYSQL # SQLite: BABEL_SERVICE_CONNECTIONSTRINGS__SQLITE BABEL_SERVICE_CONNECTIONSTRINGS__SQLSERVER: data source=ms-sql-server;user id=sa;password=eWk4fSTa45PGpJ;initial catalog=licenses;trusted_connection=false;encrypt=false # Authentication token variables BABEL_SERVICE_APPLICATION__LOGTODATABASE: true BABEL_SERVICE_APPLICATION__SIGNINGKEY: q9F0nLFRuphIHUdrlphe BABEL_SERVICE_APPLICATION__TOKENEXPIRATION: 00:30:00 # Licensing variables BABEL_SERVICE_LICENSING__HEARTBEATINTERVAL: 00:05:00 # Reporting variables BABEL_SERVICE_REPORTING__ENCRYPTIONKEY: p5UwIWaqaChLxe3eJA9o networks: - babellic networks: babellic: volumes: events_mssql: licensing:

Avec Docker, vous pouvez mettre en place rapidement une instance du Babel Licensing Service sans avoir à configurer ni à installer manuellement toutes les dépendances requises sur votre machine locale ou sur votre serveur. Vous évitez ainsi les conflits éventuels avec les versions de logiciels ou les dépendances existantes, ce qui simplifie l’installation et fait gagner du temps.

Exécution sur un hôte en mode FIPS ? Si le conteneur s’exécute sur un hôte dont le mode FIPS est activé et que l’image de base ne fournit pas de fournisseur FIPS OpenSSL certifié, le service peut échouer au démarrage avec une OpenSslCryptographicException: error:03000086. Voir Conformité FIPS pour en connaître la cause et la solution (en général OPENSSL_FORCE_FIPS_MODE=0 ou une image de base compatible avec FIPS).

Last updated on