Nell'articolo di introduzione ad ASP.NET Core e Docker (https://www.aspitalia.com/articoli/asp.net-core/docker-aspnet-core-portare-nostri-siti-web-container.aspx), abbiamo visto che portare un nostro sito web su container consiste, in buona sostanza, nel creare un'immagine con all'interno tutti i file necessari alla sua esecuzione. Questa immagine poi potrà essere utilizzata per eseguire l'applicazione all'interno di un container, in un qualsiasi ambiente in cui vogliamo effettuarne il deploy.
Un aspetto che non abbiamo trattato, però, è come gestirne la configurazione, per esempio specificando una diversa connection string, a seconda dell'ambiente di deploy (sviluppo, test, stagin, produzione).
Come abbiamo visto in passato (https://www.aspitalia.com/script/1235/Gestire-Configurazione-ASP.NET-Core-Ambienti.aspx) in ASP.NET Core possiamo referenziare diversi file appSettings e selezionare a runtime quello che vogliamo utilizzare.
Questo approccio, però, impone che tutti questi file siano precostituiti e, se stiamo usando Docker, siano inclusi nella immagine o condivisi dall'esterno, con il risultato di essere piuttosto laborioso.
Una tecnica più semplice consiste invece nell'effettuare l'override delle varie sezioni di configurazione tramite variabili d'ambiente.
Immaginiamo di avere un file appSetting.json come il seguente, nel quale abbiamo una sezione in cui specificare gli URL dei vari servizi di cui l'applicazione ha bisogno.
{ "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Warning" } }, "services": { "backend": "http://backend/" } }
In qualsiasi momento, possiamo modificare uno di questi valori semplicemente creando una variabile d'ambiente che corrisponda al path, all'interno del json, della chiave su cui vogliamo intervenire, utilizzando come separatore il doppio underscore "__". Per esempio, per specificare un nuovo URL per backend, possiamo impostare questa variabile in powershell:
$Env.services__backend="http://alternateaddress/"
Queste variabili possono anche essere impostate anche nel comando Docker Run, così che siano visibili solo all'interno dell'ambiente di esecuzione del container. Per esempio:
docker run -e "services__backend=http://alternateaddress/" myImage
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Persistere la ChatHistory di Semantic Kernel in ASP.NET Core Web API per GPT
Collegare applicazioni server e client con .NET Aspire
La gestione della riconnessione al server di Blazor in .NET 9
Eseguire query manipolando liste di tipi semplici con Entity Framework Core
Generare HTML a runtime a partire da un componente Razor in ASP.NET Core
Utilizzare Azure Cosmos DB con i vettori
Eseguire un metodo asincrono dopo il set di una proprietà in Blazor 8
Migliorare la scalabilità delle Azure Function con il Flex Consumption
Paginare i risultati con QuickGrid in Blazor
Creare un webhook in Azure DevOps
Gestire il colore CSS con HWB
Utilizzare un numero per gestire la concorrenza ottimistica con SQL Server ed Entity Framework