Skip to content

项目配置说明

当你需要切换环境、排查“本地能跑线上不行”、或要把某个组件(Redis/MinIO 等)正确接入时,优先查这篇。

本文介绍 youlai-aspnet 的配置体系,你将了解:

  • 多环境配置与环境变量的使用方式
  • .NET 配置加载优先级
  • 核心组件的常用配置项与注意事项

多环境配置

配置文件结构

src/Youlai.Api/
├── appsettings.json            # 主配置文件(公共配置)
├── appsettings.Development.json # 开发环境配置
└── appsettings.Production.json  # 生产环境配置

配置文件加载优先级

.NET 配置加载遵循 外层覆盖内层、特定覆盖通用 的原则:

优先级配置来源示例
1命令行参数--urls=http://localhost:8000
2环境变量Database__ConnectionString=...
3appsettings.{Environment}.jsonappsettings.Production.json
4appsettings.json公共配置

激活环境配置

方式一:环境变量激活(推荐生产环境)

bash
# Linux/Mac
export ASPNETCORE_ENVIRONMENT=Production

# Windows PowerShell
$env:ASPNETCORE_ENVIRONMENT="Production"

# Docker
docker run -e ASPNETCORE_ENVIRONMENT=Production youlai-aspnet

方式二:命令行激活

bash
dotnet run --environment Production

配置覆盖策略

  • appsettings.json 定义所有默认值
  • appsettings.{Environment}.json 只需覆盖变化的配置项
  • 环境变量可覆盖任意配置项

数据库配置

json
"Database": {
  "ConnectionString": "Server=localhost;Port=3306;Database=youlai_admin;User=root;Password=123456;CharSet=utf8mb4;"
}
参数说明
ServerMySQL 服务器地址
PortMySQL 端口
Database数据库名称
User用户名
Password密码

Redis 配置

json
"Redis": {
  "ConnectionString": "localhost:6379,password=,defaultDatabase=0"
}
参数说明
ConnectionStringRedis 连接字符串

JWT 配置

json
"Security": {
  "Session": {
    "Jwt": {
      "SecretKey": "your-secret-key-at-least-32-characters-long",
      "Issuer": "youlai-aspnet",
      "AccessTokenTTL": 7200,
      "RefreshTokenTTL": 604800
    }
  }
}
参数说明默认值
SecretKeyJWT 签名密钥(至少 32 字符)-
IssuerToken 签发者youlai-aspnet
AccessTokenTTL访问令牌有效期(秒)7200(2 小时)
RefreshTokenTTL刷新令牌有效期(秒)604800(7 天)

文件存储配置

json
"Oss": {
  "Type": "local",
  "Local": {
    "StoragePath": "/data/upload",
    "BaseUrl": "http://localhost:8000"
  },
  "Minio": {
    "Endpoint": "localhost:9000",
    "AccessKey": "minioadmin",
    "SecretKey": "minioadmin",
    "Bucket": "youlai"
  },
  "Aliyun": {
    "Endpoint": "oss-cn-hangzhou.aliyuncs.com",
    "AccessKeyId": "your-key",
    "AccessKeySecret": "your-secret",
    "Bucket": "youlai"
  }
}
参数说明
Type存储类型:local / minio / aliyun
Local.*本地存储配置
Minio.*MinIO 对象存储配置
Aliyun.*阿里云 OSS 配置

限流配置

json
"RateLimit": {
  "Enabled": true,
  "PermitLimit": 100,
  "Window": 60
}
参数说明
Enabled是否启用限流
PermitLimit时间窗口内允许的最大请求数
Window时间窗口(秒)

日志配置

json
"Logging": {
  "LogLevel": {
    "Default": "Information",
    "Microsoft.AspNetCore": "Warning",
    "Microsoft.EntityFrameworkCore": "Warning"
  }
}
参数说明
Default默认日志级别
Microsoft.AspNetCoreASP.NET Core 框架日志级别
Microsoft.EntityFrameworkCoreEF Core 日志级别

Kestrel 配置

json
"Kestrel": {
  "Endpoints": {
    "Http": {
      "Url": "http://*:8000"
    }
  }
}
参数说明
Url监听地址和端口

环境变量覆盖

生产环境可通过环境变量覆盖配置:

环境变量对应配置
Database__ConnectionString数据库连接字符串
Redis__ConnectionStringRedis 连接字符串
Security__Session__Jwt__SecretKeyJWT 密钥
Oss__Type存储类型

示例:

bash
export Database__ConnectionString="Server=prod-mysql;Port=3306;Database=youlai_admin;User=prod_user;Password=prod_password"
export Security__Session__Jwt__SecretKey="your-production-secret-key"

配置类映射

配置通过 Options 模式映射到强类型:

csharp
// Options/JwtOptions.cs
public class JwtOptions
{
    public string SecretKey { get; set; } = string.Empty;
    public string Issuer { get; set; } = "youlai-aspnet";
    public int AccessTokenTTL { get; set; } = 7200;
    public int RefreshTokenTTL { get; set; } = 604800;
}

// Program.cs
builder.Services.Configure<JwtOptions>(
    builder.Configuration.GetSection("Security:Session:Jwt"));

相关文件

文件说明
appsettings.json基础配置
appsettings.Development.json开发环境配置
appsettings.Production.json生产环境配置
Options/*.csOptions 类定义

基于 MIT 许可发布 · 由 ❤️ 和 ☕ 驱动 · 支持作者