.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,我们可以实现更安全、更灵活的配置管理方案,同时保持开发环境的便利性。
热门推荐
智慧农业时代水稻种植的创新模式
苏州为何会成为至今园林保留数量最多且最完整的城市?
流量卡安全吗?使用流量卡会不会泄露个人信息?
为什么香蕉可以快速补充体力
文明与文化:相同抑或不同?
股票的价格,昨天结束和今天开盘之前怎么不一样?
脂多糖知多少
足球赔率是什么意思?如何计算?
研究揭示:羟氯喹长期使用与系统性红斑狼疮患者损伤积累的关系
清朝男人的辫子:从起源到演变的历史探究
2025长沙中小学入学报名流程!(幼升小、小升初、中考)
俄出现周期性经济过热:工资上涨、劳动力短缺,俄乌冲突成“未知变量”
Nature子刊:华西医院李艳萍团队揭示靶向肠道调节肥胖和胰岛素抵抗的新途径
年轻人开始整顿上海相亲角了
护发素的正确使用方法
如何查询自己车辆的质保期限?
近亲结婚与遗传病风险:北师大版教材讲解
酸奶加热,酸奶可以热一下喝吗
留学澳洲时能带多少烟草
绚丽极光“开年红”,地磁暴会给人类带来什么?
心理学:如何避免非理性决策?三个思考维度,提升理性分析能力
安养FC与全北现代交锋分析:攻防优劣与战术博弈
区块链未来发展展望:机遇与挑战并存
如何正确搅拌水泥?搅拌水泥的比例如何掌握?
揭开运河故道的神秘面纱
全力以赴,把施工影响降到最小
人生不是一场物质的盛宴,而是一场灵魂的修炼。——“红旗渠”精神
索尼18135镜头如何清灰?需要哪些工具?
尿微量白蛋白高说明什么问题?肾脏健康的早期预警信号
节食减肥口臭解决办法有哪些