.NET配置体系结构:环境变量与Docker Compose实战
创作时间:
作者:
@小白创作中心
.NET配置体系结构:环境变量与Docker Compose实战
引用
CSDN
1.
https://blog.csdn.net/sd7o95o/article/details/142036765
在.NET应用程序开发中,配置管理是一个核心且复杂的任务。本文将探讨如何在ASP.NET应用程序中有效地管理数据库连接字符串配置,通过使用环境变量和命令行参数等配置源,结合Docker Compose进行部署,实现更安全、更灵活的配置管理方案。
假设我们正在开发一个名为"Confitecture"的ASP.NET应用程序。为了连接数据库,我们需要将连接字符串存储在适当的位置。传统的做法是使用appsettings.json文件,其中包含生产环境的连接字符串:
{
"ConnectionStrings": {
"Db": "ProductionDbConnectionString"
},
// ...
}
同时,我们可以为开发环境创建一个单独的配置文件appsettings.Development.json:
{
"ConnectionStrings": {
"Db": "DevelopmentDbConnectionString"
},
// ...
}
然后在代码中使用以下方式获取连接字符串:
var dbConnectionString = app.Configuration.GetConnectionString("Db");
app.Logger.LogInformation("Db Connection string: {dbConnectionString}", dbConnectionString);
这种方法虽然简单,但存在以下问题:
- 在代码中存储连接字符串不安全,任何开发人员都可以轻松访问生产数据库密码。
- 随着环境数量的增加,会导致大量重复的配置文件,维护混乱。
- 默认配置源可能导致意外连接到生产环境。
- 配置新环境时容易出现配置错误。
使用环境变量
环境变量和命令行参数提供了更安全、更灵活的配置方式。让我们通过一个实际示例来展示如何使用环境变量。
首先,添加EF Core支持PostgreSQL:
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQL
然后更新Program.cs以连接到数据库:
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<DbContext>(
o => o.UseNpgsql(builder.Configuration.GetConnectionString("Db"))
);
var app = builder.Build();
app.MapGet("/", async (DbContext context) => {
await context.Database.OpenConnectionAsync();
return "Connected!";
});
app.Run();
接下来,使用Docker Compose来部署应用程序和PostgreSQL数据库。创建Dockerfile:
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
EXPOSE 8080
WORKDIR /app
COPY . .
RUN dotnet publish "Confitecture.csproj" -c Release -o /app/publish
WORKDIR /app/publish
ENTRYPOINT dotnet Confitecture.dll
然后创建compose.yml:
name: confitecture
services:
app:
image: confitecture
ports:
- "53593:8080"
build: .
profiles: [ "full" ]
environment:
- CONNECTIONSTRINGS__DB=Host=db;Port=5432;Username=postgres;Password=postgres
- ASPNETCORE_ENVIRONMENT=Development
db:
image: postgres
environment:
- POSTGRES_PASSWORD=postgres
ports:
- "5432:5432"
运行以下命令启动服务:
docker compose up -d && sleep 1 && curl localhost:53593
使用LaunchSettings简化开发
为了方便开发人员调试,可以使用launchSettings.json配置本地开发环境:
{
"$schema": "http://json.schemastore.org/launchsettings.json",
"profiles": {
"Local": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "http://localhost:53593",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"CONNECTIONSTRINGS__DB": "Host=localhost;Port=5432;Username=postgres;Password=postgres"
}
}
}
}
这样,开发人员只需运行dotnet run即可启动应用程序。
通过使用环境变量和Docker Compose,我们可以实现更安全、更灵活的配置管理方案,同时保持开发环境的便利性。
热门推荐
梨花声音教育退费配音员用百元预算打造专业级录音环境
食品冷冻及加工技术研究应用现状及研究发展
急降至9字头,买坦洲or斗门?DeepSeek给出了置业建议!
全网曝光量超12亿!吉林动漫IP《茶啊二中》第五季“热”力十足
从深蹲到硬拉:科学训练打造强健下肢的秘诀
智能合约安全审计初学者指南
菜籽油:一种古老而充满活力的食用油
别再乱进补!春二月这样吃才健康!
解谜游戏通用攻略:从入门到精通
拔牙全攻略:目的、方式及注意事项
婚姻的底线是互相尊重
亚麻籽油最佳保存方法:冷藏与避光的重要性
格律诗平仄变通的三种方法
为什么电脑用网线连接显示是以太网,用无线网连接显示WLAN?两者区别及优缺点详解
《仲夏夜之梦》读后感
南北差异有多大?北方人从南方回来了,坦言以后不敢再去了
STEM教育:培养跨学科能力与创新思维的未来教育理念解析
深度分析:孔子思想中的为人处世之道对和谐社会建设的启示
直面突如其来的“濒死感”——惊恐障碍
日本女子当指挥官:法律与性别平等的新范式
专家解读:宝宝脑白质T2信号略高是否需要随访?
在博物馆设计中,如何考虑展品的互动性?
港股通的标的选择和投资策略是什么?港股通对两地市场有何影响?
DDR4内存性能测试:时序设置对性能影响分析
基金价格波动受哪些因素制约?这些因素如何进行分析和预测?
银行的储蓄存款利率会受货币政策影响吗?
养老项目财务管理内容有哪些
一众国际大牌祛痘产品发现致癌化学物
「用有氧來消耗熱量、在日常生活中就燃燒脂肪」專家給你終極減肥的5個必勝關鍵
海南距离张家界有多远?自驾游攻略及两地距离详解