.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,我们可以实现更安全、更灵活的配置管理方案,同时保持开发环境的便利性。
热门推荐
中国关工委副秘书长李国强:提升家庭数字素养,预防青少年手机沉迷
NAK80模具钢:特性与优势详解
日本姬月季的养植方法和注意事项
山药怎样处理才不手痒、不发黑?教你正确方法,简单快速还不粘手
德州审计行业大模型入选山东省人工智能大模型典型应用案例
安检门对孕妇有影响吗?
烟台长岛两天一晚游玩攻略
CV界,卷积神经网络真的干不过Transformer了吗?
燃气灶选购攻略:选择什么样的燃气灶比较好?哪些燃气灶值得买?
如何创作优质的新媒体内容?关键步骤和技巧全解析
涨知识|有氧训练和无氧训练,怎么搭配才合理?
八字预测:真太阳时与平太阳时的争论与选择
咽喉肿痛的食疗方法
计划成本法的会计分录及账务处理详解
《FF7》不是第一!盘点SE《最终幻想》系列评分最高的游戏
AI在中医药领域的5大应用与10条建议
《新三国》剧情矛盾盘点:从曹操刺董到赤壁之战
感冒时喝牛奶真的好吗?医生的专业解答来了
泥中极品!不可不知的天青泥知识,赶紧收藏!
《四十二章经》(清乾隆二十五年蒋溥写本)
教师住房保障新政来袭:改善生活从“家”开始
龚姓的字辈:家族传承的文化密码
短视频成瘾影响大脑功能!清华、浙大最新研究揭示其与抑郁症状的关联
化疗过程中需要密切注意白细胞减少,别不当回事
公积金缴纳比例解析:单位与个人各承担一半
孕妇能不能吃火龙果
凤姐美国近况曝光:我认为我应该受到赞扬,直到现在我也不后悔
胆囊正常大小是多少mm
癌细胞转移到淋巴结有什么症状
未婚出生证明怎么补办