.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,我们可以实现更安全、更灵活的配置管理方案,同时保持开发环境的便利性。
热门推荐
暗黑破坏神不朽魔法符咒解析与应用大全攻略
11平台js模式怎么ban英雄
腰疼?尿急?尿痛?可能是肾结石!预防结石,记住六条黄金法则!
杨慎的临江仙:词中的意境与人生哲理
如何进行塔罗牌日记练习
比亚迪王传福:父母双亡,嫂子卖嫁妆养他,现百亿身家报答兄嫂
突然眼花是怎么回事
如何发挥团队创作力
祛除湿热最有效的方法
腾讯与北师大心理学部共建大模型情感能力,推动大模型情商能力应用发展
制冷工程师怎么取证?适合谁考?什么要求,适合哪些岗位?
下肢静脉倒流性疾病和静脉回流障碍疾病的区别
藏传佛教:汉藏佛教融合的文化结晶
滑膜炎怎样治疗比较好
左旋肉碱的正确吃法
伊犁河谷亲子自由行全攻略
子弹科普:5.56x45 M193
面对复杂的协作问题怎么办
守望先锋手游版麦克雷英雄深度解析:高效连招技巧与实战应用策略
凤凰单丛茶:茶中香水的百变香型与文化魅力
敏感肌怎麼改善?了解症狀、6大敏感肌護膚品推介和保養貼士
用建筑说故事,颠覆传统印象的七家特色书店
各大银行发布通知:“3类银行卡”将全面注销?卡里有钱也没用!
暑假青春期孩子网络游戏成瘾咋办?全方位应对指南
过敏性鼻炎的症状表现及就医建议
骨折X光片的表现及诊断治疗全解析
闽北“优质稻新品种的试验示范”项目水稻丰收
广州自助游超详细路线攻略,一文看全!
花费时间做某事的英文表达方式
初秋多吃鱼,补钙补蛋白,教你10种做法,营养不上火美味又下饭