Skip to Content
Nuova versione 12 disponibile 🎉

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

  1. Docker Desktop 
  2. Pacchetto ZIP del Babel Licensing Service (babel_service_net80_x.y.z.w.zip), un unico pacchetto per entrambe le edizioni
  3. 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 runtime

Questa 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 5005

L’istruzione EXPOSE specifica che il container espone questa porta al computer host, consentendo l’accesso dall’esterno.

WORKDIR /var/www/svc/babel

L’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 -d

Questo 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-1

Il 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:

  1. Arrestare e rimuovere i container: per arrestare e rimuovere i container creati con Docker Compose, esegui il comando seguente:
$ docker compose down

Il 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.

  1. Arrestare ed eliminare i volumi: se vuoi eliminare anche i volumi associati ai container, puoi usare l’opzione -v con il comando down. Esegui il comando seguente:
$ docker compose down -v

Con 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:

  1. DOTNET_CLI_HOME: specifica la posizione della cartella temporanea della CLI (Command Line Interface) di .NET. In questo caso è impostata su /tmp.
  2. ASPNETCORE_ENVIRONMENT: imposta l’ambiente in cui viene eseguito il Babel Licensing Service. Il valore Production indica che il servizio è in esecuzione in un ambiente di produzione.
  3. KESTREL__ENDPOINTS__GRPC__URL: definisce l’URL dell’endpoint GRPC del Babel Licensing Service. In questo caso è impostato su http://*:5005, a indicare che il servizio è in ascolto su tutte le interfacce di rete disponibili, sulla porta 5005.
  4. BABEL_SERVICE_DATABASE__PROVIDER: specifica il provider di database usato dal Babel Licensing Service. Il valore MySQL indica che come provider di database viene usato MySQL.
  5. 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 provider MySQL funziona anche con l’immagine .NET 10 (mcr.microsoft.com/dotnet/aspnet:10.0 con il pacchetto babel_service_net100_x.y.z.w.zip), dove il servizio usa Microting.EntityFrameworkCore.MySql, il fork di Pomelo, con le stesse variabili d’ambiente.
  6. 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 file appsettings.json incluso nel pacchetto non contiene più un valore fisso: se all’avvio SigningKey è 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.
  7. 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.

  1. BABEL_SERVICE_LICENSING__HEARTBEATINTERVAL: specifica l’intervallo massimo entro cui i client devono inviare gli heartbeat al Babel Licensing Service. Il formato è hh:mm:ss e indica l’intervallo di tempo tra un heartbeat e il successivo.
  2. 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).

Last updated on