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
- Docker DesktopÂ
- Paquet ZIP du Babel Licensing Service (
babel_service_net80_x.y.z.w.zip), un seul paquet pour les deux éditions - 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 runtimeCette 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 5005L’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/babelL’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 -dCette 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-1Le 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 :
- 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 downLa 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.
- Arrêter et supprimer les volumes : si vous souhaitez aussi supprimer les volumes associés aux conteneurs, vous pouvez utiliser l’option
-vavec la commandedown. Exécutez la commande suivante :
$ docker compose down -vL’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 :
DOTNET_CLI_HOME : indique l’emplacement du répertoire temporaire du CLI (Command Line Interface) de .NET. Ici, il est réglé sur/tmp.ASPNETCORE_ENVIRONMENT : définit l’environnement dans lequel s’exécute le Babel Licensing Service. La valeurProductionindique que le service s’exécute dans un environnement de production.KESTREL__ENDPOINTS__GRPC__URL : définit l’URL du point de terminaison gRPC du Babel Licensing Service. Ici, elle est réglée surhttp://*:5005, ce qui indique que le service écoute sur toutes les interfaces réseau disponibles, sur le port 5005.BABEL_SERVICE_DATABASE__PROVIDER : indique le fournisseur de base de données utilisé par le Babel Licensing Service. La valeurMySQLindique que MySQL est utilisé comme fournisseur de base de données.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 fournisseurMySQLfonctionne aussi sur l’image .NET 10 (mcr.microsoft.com/dotnet/aspnet:10.0avec le paquetbabel_service_net100_x.y.z.w.zip), où le service utiliseMicroting.EntityFrameworkCore.MySql, le fork de Pomelo, avec les mêmes variables d’environnement.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 fichierappsettings.jsonfourni ne contient plus de valeur codée en dur : siSigningKeyest 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.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.
BABEL_SERVICE_LICENSING__HEARTBEATINTERVAL : indique l’intervalle maximal auquel les clients doivent envoyer un signal de présence au Babel Licensing Service. Le format esthh:mm:sset exprime l’intervalle de temps entre deux signaux de présence.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).