Docker
Docker es un método cómodo y eficaz para ejecutar el Babel Licensing Service con fines de prueba. Docker proporciona un entorno ligero y aislado, llamado contenedor, que encapsula el Babel Licensing Service y todas sus dependencias, lo que facilita desplegar y probar el servicio en distintos sistemas sin preocuparse por problemas de compatibilidad ni por conflictos con el entorno del host.
Requisitos previos
- Docker DesktopÂ
- Paquete ZIP del Babel Licensing Service (
babel_service_net80_x.y.z.w.zip), un único paquete para las dos ediciones - Archivo de licencia de Babel Licensing Server o Data Center (
babel.licenses)
Docker debe estar instalado antes de empezar. Descárguelo del sitio web oficial de Docker y siga las instrucciones de instalación de su sistema operativo.
Los pasos siguientes instalan el Babel Licensing Service en Docker.
Crear el Dockerfile
Para preparar el entorno en el que se compila la imagen del Babel Licensing Service con Docker, siga los pasos que se indican a continuación.
Crear una carpeta de trabajo
Cree en su equipo local una carpeta para los archivos del Babel Licensing Service. Esta guÃa la llama «carpeta de trabajo».
Copiar los archivos del servicio
Copie el archivo ZIP del Babel Licensing Service y el archivo babel.licenses en la carpeta de trabajo creada en el paso anterior.
Extraer el archivo
Extraiga el contenido del archivo ZIP del Babel Licensing Service en una subcarpeta llamada «babel» dentro de la carpeta de trabajo.
Crear el Dockerfile
En la carpeta de trabajo, cree un archivo nuevo llamado «Dockerfile» con cualquier editor de texto o IDE.
Añadir el contenido del Dockerfile
Copie el contenido siguiente en el archivo «Dockerfile» y guárdelo.
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" ]A continuación se explica su contenido:
FROM mcr.microsoft.com/dotnet/aspnet:8.0 as runtimeEsta lÃnea indica la imagen base del contenedor Docker. En este caso se usa la imagen del entorno de ejecución de ASP.NET del registro de contenedores de Microsoft.
EXPOSE 5005La instrucción EXPOSE indica que el contenedor expone este puerto al equipo host, lo que permite el acceso desde el exterior.
WORKDIR /var/www/svc/babelLa instrucción WORKDIR establece /var/www/svc/babel como directorio de trabajo dentro del contenedor. Es la ubicación en la que se ejecutarán los comandos posteriores.
COPY /babel .Esta lÃnea copia el contenido del directorio babel (que contiene los archivos del Babel Licensing Service) desde la carpeta de trabajo de babel al directorio de trabajo del contenedor, /var/www/svc/babel.
COPY /babel.licenses .Del mismo modo, esta lÃnea copia el archivo babel.licenses desde el contexto de compilación al directorio de trabajo del contenedor.
ENTRYPOINT [ "dotnet", "Babel.Licensing.Service.dll" ]La instrucción ENTRYPOINT indica el comando que se ejecutará al iniciarse el contenedor. En este caso ejecuta el comando dotnet con Babel.Licensing.Service.dll como punto de entrada del Babel Licensing Service.
Este Dockerfile prepara el entorno necesario, expone el puerto requerido, copia los archivos del servicio y el archivo de licencia y define el punto de entrada del Babel Licensing Service.
Una vez compilada con Docker, esta imagen puede usarse junto con Docker Compose para desplegar el Babel Licensing Service.
Docker Compose
Hasta aquà se ha indicado a Docker cómo compilar la imagen que ejecuta el Babel Licensing Service, pero la configuración todavÃa no pone en marcha ninguna base de datos.
Para configurar la instalación completa del Babel Licensing Service, incluida la base de datos necesaria, se crea un archivo nuevo llamado docker-compose.yml en la carpeta de trabajo. Añada el contenido siguiente al archivo 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:
El archivo docker-compose.yml define una aplicación con dos servicios: licensing y db. La imagen del servicio de licencias se compila con el Dockerfile indicado.
Al desplegar la aplicación con Docker Compose, el puerto 5005 del contenedor se asigna al puerto 5005 del host, tal como indica el archivo. Compruebe que ningún otro contenedor esté usando el puerto 5005 en el equipo host. Si lo está, puede cambiar el puerto por uno disponible.
Recuerde sustituir la contraseña de root y la del usuario de MySQL por contraseñas seguras (no hace falta recordarlas) en el servicio db y en la cadena de conexión del servicio de Babel. La contraseña del usuario se usa para establecer la conexión con la base de datos MySQL.
El archivo docker-compose.yml define cómo interactúan entre sà las imágenes de Docker en tiempo de ejecución. Especifica las configuraciones, las variables de entorno y la red que necesitan los servicios. Con Docker Compose y este archivo puede desplegar y administrar fácilmente el Babel Licensing Service junto con su base de datos.
Iniciar el servicio
Una vez preparado el archivo docker-compose.yml como se describe en el apartado anterior, puede ejecutar el comando:
docker-compose up -dEste comando inicia el Babel Licensing Service y la base de datos asociada en modo desacoplado (detached). Espere a que se inicien los contenedores: Docker Compose descarga las imágenes necesarias (si aún no están presentes) y crea los contenedores según las configuraciones indicadas en el archivo docker-compose.yml. Los contenedores pueden tardar unos instantes en estar plenamente operativos.
Después de ejecutar el comando, puede usar el comando docker ps para comprobar que los contenedores están en ejecución. Muestra una lista de los contenedores en ejecución con sus detalles, incluidos el del Babel Licensing Service y el de la base de datos asociada.
$ 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-1El archivo de licencia determina la edición. Con una licencia Data Center, la aplicación web se sirve en la dirección del servicio. Con una licencia Server, esa dirección muestra una página de actualización con una comparación de ediciones; el servicio, su API y Babel Desktop siguen funcionando. Para actualizar, sustituya babel.licenses y reinicie el contenedor; no hay que reinstalar nada.
Detener el servicio
Para detener y eliminar los contenedores, y también para eliminar los volúmenes asociados, puede usar los comandos siguientes:
- Detener y eliminar los contenedores: para detener y eliminar los contenedores creados con Docker Compose, ejecute el comando siguiente:
$ docker compose downEl comando down detiene y elimina los contenedores definidos en el archivo docker-compose.yml. Detiene los contenedores en ejecución y elimina sus recursos asociados, como las redes y los volúmenes, pero conserva las imágenes.
- Detener y eliminar los volúmenes: si además quiere eliminar los volúmenes asociados a los contenedores, puede usar la opción
-vcon el comandodown. Ejecute el comando siguiente:
$ docker compose down -vCon la opción -v, Docker Compose no solo detiene y elimina los contenedores, sino que también elimina los volúmenes creados durante el ciclo de vida de los contenedores. Asà se eliminan por completo todos los recursos relacionados con los contenedores, incluidos los archivos de datos de la base de datos.
Tenga en cuenta que estos comandos deben ejecutarse en el mismo directorio en el que se encuentra el archivo docker-compose.yml. Compruebe además que Docker Compose está instalado y disponible en su entorno de lÃnea de comandos.
Al ejecutar docker compose down o docker compose down -v, se detienen y eliminan los contenedores y se eliminan los volúmenes asociados, con lo que se liberan los recursos que usaba el Babel Licensing Service.
Configurar el Babel Licensing Service
El archivo docker-compose.yml permite configurar el entorno del contenedor del servicio babel-licensing mediante varias variables de entorno. Estas variables sustituyen los ajustes de configuración predeterminados del Babel Licensing Service, que se guardan en el archivo appsettings.json. A continuación se describen con más detalle las variables de configuración disponibles:
DOTNET_CLI_HOME: indica la ubicación del directorio temporal de la CLI (interfaz de lÃnea de comandos) de .NET. En este caso se establece en/tmp.ASPNETCORE_ENVIRONMENT: establece el entorno en el que se ejecuta el Babel Licensing Service. El valorProductionindica que el servicio se ejecuta en un entorno de producción.KESTREL__ENDPOINTS__GRPC__URL: define la URL del punto de acceso gRPC del Babel Licensing Service. En este caso se establece enhttp://*:5005, lo que indica que el servicio escucha en todas las interfaces de red disponibles, en el puerto 5005.BABEL_SERVICE_DATABASE__PROVIDER: indica el proveedor de base de datos que usa el Babel Licensing Service. El valorMySQLindica que se usa MySQL como proveedor de base de datos.BABEL_SERVICE_CONNECTIONSTRINGS__MYSQL: establece la cadena de conexión de la base de datos MySQL. Indica el servidor, el usuario, la contraseña y el nombre de la base de datos que usa el Babel Licensing Service. El proveedorMySQLfunciona también en la imagen de .NET 10 (mcr.microsoft.com/dotnet/aspnet:10.0con el paquetebabel_service_net100_x.y.z.w.zip), donde el servicio usaMicroting.EntityFrameworkCore.MySql, la bifurcación de Pomelo, con las mismas variables de entorno.BABEL_SERVICE_APPLICATION__SIGNINGKEY: define la clave de firma que se usa para generar y validar los tokens de autenticación del Babel Licensing Service. Desde la versión 11.7.0, elappsettings.jsonincluido ya no contiene un valor fijo: siSigningKeyestá vacÃa al arrancar, el servicio genera una aleatoria para el proceso en curso (y escribe una advertencia en el registro). En cualquier despliegue que no sea de desarrollo, y sobre todo cuando se ejecutan varias réplicas detrás de un equilibrador de carga, establezca siempre esta variable con un secreto explÃcito y persistente, de modo que los tokens emitidos sobrevivan a los reinicios y se acepten en todas las instancias.BABEL_SERVICE_APPLICATION__TOKENEXPIRATION: establece el tiempo de vencimiento de los tokens de autenticación que emite el Babel Licensing Service.
Administrador inicial (desde la versión 11.7.0): el servicio ya no se distribuye con las credenciales predeterminadas admin / admin. Para crear el administrador inicial en el primer arranque, establezca BABEL_SERVICE_APPLICATION__ADMINUSERNAME y BABEL_SERVICE_APPLICATION__ADMINPASSWORD (y, de forma opcional, BABEL_SERVICE_APPLICATION__ADMINEMAIL). El contenedor se inicia aunque falten, pero no se crea ningún usuario administrador, de modo que no es posible iniciar sesión en la aplicación web (Data Center) con esa cuenta y Babel Desktop no dispone de una clave API de administrador con la que conectarse, hasta que se establezcan los dos valores obligatorios y se reinicie el contenedor. Estos valores solo se usan en el primer arranque; después, cambie la contraseña desde la aplicación web y quite ADMINPASSWORD de su entorno.
BABEL_SERVICE_LICENSING__HEARTBEATINTERVAL: indica el intervalo máximo con el que los clientes deben enviar señales de actividad al Babel Licensing Service. El formato eshh:mm:sse indica el intervalo de tiempo entre una señal de actividad y la siguiente.BABEL_SERVICE_REPORTING__ENCRYPTIONKEY: define la clave de cifrado que se usa para cifrar los datos de la funcionalidad de informes del Babel Licensing Service.
Estas variables de entorno permiten personalizar y configurar distintos aspectos del Babel Licensing Service según sus necesidades. Al establecer estas variables en el archivo docker-compose.yml, puede modificar el comportamiento del servicio sin tocar el archivo appsettings.json original, lo que aporta flexibilidad y facilita la configuración.
Imagen Docker de MSSQL Server
Para configurar Babel Licensing con MSSQL en Docker, la instalación usa la imagen más reciente de Azure SQL Edge, que es compatible con Linux Ubuntu. La configuración YAML que se muestra incluye las principales variables de entorno necesarias para el acceso a la base de datos, los tokens de autenticación y los parámetros de licencias. Este enfoque simplifica el despliegue y la integración de Babel Licensing con una base de datos MSSQL en un entorno 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:
Con Docker puede preparar rápidamente una instancia del Babel Licensing Service sin tener que configurar e instalar manualmente todas las dependencias necesarias en su equipo local o en su servidor. Asà evita posibles conflictos con las versiones de software o las dependencias existentes, simplifica la instalación y ahorra tiempo.
¿Se ejecuta en un host en modo FIPS? Si el contenedor se ejecuta en un host
con el modo FIPS activado y la imagen base no incluye un proveedor FIPS de
OpenSSL certificado, el servicio puede no arrancar y producir una
OpenSslCryptographicException: error:03000086. Consulte
Conformidad con FIPS para conocer la causa y
cómo resolverlo (normalmente con OPENSSL_FORCE_FIPS_MODE=0 o con una imagen
base compatible con FIPS).