Docker
Docker è un modo comodo ed efficiente per eseguire il Babel Licensing Service a scopo di test. Docker fornisce un ambiente leggero e isolato, chiamato container, che racchiude il Babel Licensing Service e tutte le sue dipendenze: diventa così facile distribuire e provare il servizio su sistemi diversi senza preoccuparti di problemi di compatibilità o di conflitti con l’ambiente host.
Prerequisiti
- Docker Desktop
- Pacchetto ZIP del Babel Licensing Service (
babel_service_net80_x.y.z.w.zip), un unico pacchetto per entrambe le edizioni - File di licenza Babel Licensing Server o Data Center (
babel.licenses)
Docker deve essere installato prima di iniziare. Scaricalo dal sito ufficiale di Docker e segui le istruzioni di installazione per il tuo sistema operativo.
I passi seguenti installano il Babel Licensing Service su Docker.
Creare il Dockerfile
Per preparare l’ambiente in cui creare con Docker l’immagine del Babel Licensing Service, segui i passi riportati di seguito.
Crea una cartella di lavoro
Crea sul tuo computer una cartella per i file del Babel Licensing Service. Questa guida la chiama “cartella di lavoro”.
Copia i file del servizio
Copia l’archivio ZIP del Babel Licensing Service e il file babel.licenses nella cartella di lavoro creata al passo precedente.
Estrai l’archivio
Estrai il contenuto dell’archivio ZIP del Babel Licensing Service in una sottocartella chiamata “babel” all’interno della cartella di lavoro.
Crea il Dockerfile
Nella cartella di lavoro crea un nuovo file chiamato “Dockerfile” con un editor di testo o un IDE qualsiasi.
Aggiungi il contenuto del Dockerfile
Copia il contenuto seguente nel file “Dockerfile” e salvalo.
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" ]Vediamone il contenuto riga per riga:
FROM mcr.microsoft.com/dotnet/aspnet:8.0 as runtimeQuesta riga specifica l’immagine di base del container Docker. In questo caso usa l’immagine del runtime ASP.NET del Container Registry di Microsoft.
EXPOSE 5005L’istruzione EXPOSE specifica che il container espone questa porta al computer host, consentendo l’accesso dall’esterno.
WORKDIR /var/www/svc/babelL’istruzione WORKDIR imposta /var/www/svc/babel come cartella di lavoro all’interno del container. È la posizione in cui vengono eseguiti i comandi successivi.
COPY /babel .Questa riga copia il contenuto della cartella babel (che contiene i file del Babel Licensing Service) dalla cartella di lavoro alla cartella di lavoro del container, /var/www/svc/babel.
COPY /babel.licenses .Allo stesso modo, questa riga copia il file babel.licenses dal contesto di build alla cartella di lavoro del container.
ENTRYPOINT [ "dotnet", "Babel.Licensing.Service.dll" ]L’istruzione ENTRYPOINT specifica il comando che viene eseguito all’avvio del container. In questo caso esegue il comando dotnet con Babel.Licensing.Service.dll come punto di ingresso del Babel Licensing Service.
Questo Dockerfile prepara l’ambiente necessario, espone la porta richiesta, copia i file del servizio e il file di licenza e definisce il punto di ingresso del Babel Licensing Service.
Una volta creata con Docker, questa immagine può essere usata insieme a Docker Compose per distribuire il Babel Licensing Service.
Docker Compose
Finora hai indicato a Docker come creare l’immagine che esegue il Babel Licensing Service, ma la configurazione non avvia ancora alcun database.
Per configurare l’installazione completa del Babel Licensing Service, compreso il database necessario, crea un nuovo file chiamato docker-compose.yml nella cartella di lavoro. Aggiungi il contenuto seguente al file 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:
Il file docker-compose.yml definisce un’applicazione con due servizi: licensing e db. L’immagine del servizio di licenze viene creata con il Dockerfile specificato.
Quando distribuisci l’applicazione con Docker Compose, la porta 5005 del container viene mappata sulla porta 5005 dell’host, come indicato nel file. Assicurati che la porta 5005 del computer host non sia già usata da un altro container. Se lo è, puoi sostituirla con una porta libera.
Ricorda di sostituire le password di root e dell’utente MySQL con password robuste e sicure (non serve ricordarle) nel servizio db e nella stringa di connessione del servizio Babel. La password dell’utente serve a stabilire la connessione con il database MySQL.
Il file docker-compose.yml definisce il modo in cui le immagini Docker interagiscono tra loro in fase di esecuzione. Specifica le configurazioni, le variabili d’ambiente e l’impostazione di rete necessarie ai servizi. Usando Docker Compose con questo file puoi distribuire e gestire facilmente il Babel Licensing Service insieme al database associato.
Avviare il servizio
Dopo aver preparato il file docker-compose.yml come descritto nel paragrafo precedente, puoi eseguire il comando:
docker-compose up -dQuesto comando avvia il Babel Licensing Service e il database associato in modalità detached. Attendi l’avvio dei container: Docker Compose scarica le immagini necessarie (se non sono già presenti) e crea i container in base alle configurazioni specificate nel file docker-compose.yml. Può volerci qualche istante prima che i container siano pienamente operativi.
Dopo aver eseguito il comando, puoi usare il comando docker ps per verificare che i container siano in esecuzione. Mostra l’elenco dei container in esecuzione con i relativi dettagli, compresi il container del Babel Licensing Service e quello del database associato.
$ 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-1Il file di licenza determina l’edizione. Con una licenza Data Center l’applicazione web è disponibile all’indirizzo del servizio. Con una licenza Server quell’indirizzo mostra una pagina di upgrade con un confronto tra le edizioni; il servizio, la sua API e Babel Desktop continuano a funzionare. Per fare l’upgrade, sostituisci babel.licenses e riavvia il container; non c’è nulla da reinstallare.
Arrestare il servizio
Per arrestare e rimuovere i container, ed eliminare anche i volumi associati, puoi usare i comandi seguenti:
- Arrestare e rimuovere i container: per arrestare e rimuovere i container creati con Docker Compose, esegui il comando seguente:
$ docker compose downIl comando down arresta e rimuove i container definiti nel file docker-compose.yml. Arresta i container in esecuzione e rimuove le risorse associate, come reti e volumi, conservando le immagini.
- Arrestare ed eliminare i volumi: se vuoi eliminare anche i volumi associati ai container, puoi usare l’opzione
-vcon il comandodown. Esegui il comando seguente:
$ docker compose down -vCon l’opzione -v Docker Compose non si limita ad arrestare e rimuovere i container, ma elimina anche i volumi creati durante il loro ciclo di vita. In questo modo vengono rimosse tutte le risorse legate ai container, compresi i file di dati del database.
Tieni presente che questi comandi vanno eseguiti nella cartella in cui si trova il file docker-compose.yml. Assicurati inoltre che Docker Compose sia installato e disponibile nel tuo ambiente da riga di comando.
Eseguendo docker compose down o docker compose down -v arresti e rimuovi i container, ed elimini anche i volumi associati, liberando le risorse usate dal Babel Licensing Service.
Configurare il Babel Licensing Service
Il file docker-compose.yml ti permette di configurare l’ambiente del container del servizio babel-licensing specificando diverse variabili d’ambiente. Queste variabili sostituiscono le impostazioni di configurazione predefinite del Babel Licensing Service, memorizzate nel file appsettings.json. Ecco una descrizione dettagliata delle variabili di configurazione disponibili:
DOTNET_CLI_HOME: specifica la posizione della cartella temporanea della CLI (Command Line Interface) di .NET. In questo caso è impostata su/tmp.ASPNETCORE_ENVIRONMENT: imposta l’ambiente in cui viene eseguito il Babel Licensing Service. Il valoreProductionindica che il servizio è in esecuzione in un ambiente di produzione.KESTREL__ENDPOINTS__GRPC__URL: definisce l’URL dell’endpoint GRPC del Babel Licensing Service. In questo caso è impostato suhttp://*:5005, a indicare che il servizio è in ascolto su tutte le interfacce di rete disponibili, sulla porta 5005.BABEL_SERVICE_DATABASE__PROVIDER: specifica il provider di database usato dal Babel Licensing Service. Il valoreMySQLindica che come provider di database viene usato MySQL.BABEL_SERVICE_CONNECTIONSTRINGS__MYSQL: imposta la stringa di connessione del database MySQL. Specifica il server, l’utente, la password e il nome del database usati dal Babel Licensing Service. Il providerMySQLfunziona anche con l’immagine .NET 10 (mcr.microsoft.com/dotnet/aspnet:10.0con il pacchettobabel_service_net100_x.y.z.w.zip), dove il servizio usaMicroting.EntityFrameworkCore.MySql, il fork di Pomelo, con le stesse variabili d’ambiente.BABEL_SERVICE_APPLICATION__SIGNINGKEY: definisce la chiave di firma usata per generare e convalidare i token di autenticazione del Babel Licensing Service. Dalla versione 11.7.0 il fileappsettings.jsonincluso nel pacchetto non contiene più un valore fisso: se all’avvioSigningKeyè vuota, il servizio ne genera una casuale per il processo corrente (e scrive un avviso nel log). In ogni distribuzione che non sia di sviluppo, e soprattutto quando esegui più repliche dietro un bilanciatore del carico, imposta sempre questa variabile su un segreto esplicito e persistente, così i token emessi sopravvivono ai riavvii e vengono accettati da tutte le istanze.BABEL_SERVICE_APPLICATION__TOKENEXPIRATION: imposta la scadenza dei token di autenticazione emessi dal Babel Licensing Service.
Amministratore iniziale (dalla versione 11.7.0): il servizio non viene più distribuito con le credenziali predefinite admin / admin. Per creare l’amministratore iniziale al primo avvio, imposta BABEL_SERVICE_APPLICATION__ADMINUSERNAME e BABEL_SERVICE_APPLICATION__ADMINPASSWORD (e, facoltativamente, BABEL_SERVICE_APPLICATION__ADMINEMAIL). Il container si avvia anche quando queste variabili mancano, ma non viene creato alcun utente amministratore: non è quindi possibile accedere all’applicazione web (Data Center) con quell’account e Babel Desktop non ha una chiave API di amministratore con cui connettersi, finché non imposti entrambi i valori obbligatori e riavvii il container. Questi valori vengono usati solo al primo avvio; in seguito cambia la password dall’applicazione web e rimuovi ADMINPASSWORD dal tuo ambiente.
BABEL_SERVICE_LICENSING__HEARTBEATINTERVAL: specifica l’intervallo massimo entro cui i client devono inviare gli heartbeat al Babel Licensing Service. Il formato èhh:mm:sse indica l’intervallo di tempo tra un heartbeat e il successivo.BABEL_SERVICE_REPORTING__ENCRYPTIONKEY: definisce la chiave di cifratura usata per cifrare i dati della funzionalità di reporting del Babel Licensing Service.
Queste variabili d’ambiente ti permettono di personalizzare e configurare vari aspetti del Babel Licensing Service in base alle tue esigenze. Ridefinendo queste variabili nel file docker-compose.yml puoi modificare il comportamento del servizio senza toccare il file appsettings.json originale, con una configurazione più flessibile e più semplice.
Immagine Docker di MSSQL Server
Per configurare Babel Licensing con MSSQL in Docker, l’installazione usa l’immagine più recente di Azure SQL Edge, compatibile con Linux Ubuntu. La configurazione YAML riportata di seguito indica le principali variabili d’ambiente per l’accesso al database, i token di autenticazione e i parametri delle licenze. Questo approccio semplifica la distribuzione di Babel Licensing e la sua integrazione con un database MSSQL in un ambiente 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 puoi preparare rapidamente un’istanza del Babel Licensing Service senza dover configurare e installare a mano tutte le dipendenze necessarie sul tuo computer o sul tuo server. Eviti così possibili conflitti con le versioni del software o con le dipendenze già presenti, semplifichi l’installazione e risparmi tempo.
Esegui il servizio su un host con FIPS abilitato? Se il container viene
eseguito su un host con la modalità FIPS abilitata e l’immagine di base non
include un provider FIPS di OpenSSL certificato, il servizio può non avviarsi
e restituire un’eccezione OpenSslCryptographicException: error:03000086. Vedi
Conformità FIPS per la causa e per la
soluzione (di solito OPENSSL_FORCE_FIPS_MODE=0 o un’immagine di base
compatibile con FIPS).