dotnet-aspire by markpitt/claude-skills
npx skills add https://github.com/markpitt/claude-skills --skill dotnet-aspire此技能帮助将 .NET Aspire 添加到现有的 .NET 解决方案中,或创建新的支持 Aspire 的分布式应用程序。它提供了编排、服务发现、组件集成、配置管理和部署的模块化指导。
.NET Aspire 是一个面向云端的、有主见的堆栈,用于构建可观测、生产就绪的分布式应用程序。它提供:
在以下情况下使用此技能:
| 需求 | 资源 | 描述 |
|---|---|---|
| 整体结构 | 概述与设置 | 从分析到运行的分步实施 |
| 数据库、缓存、消息传递 |
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
resources/components.md| 所有可用的 Aspire 组件包及示例 |
| 服务间通信 | resources/service-communication.md | 服务发现、HttpClient 模式、弹性 |
| 配置与机密 | resources/configuration-management.md | 环境设置、机密、功能标志 |
| 本地开发 | resources/local-development.md | 仪表板、调试、测试、健康检查 |
| 生产部署 | resources/deployment.md | Azure 容器应用、Kubernetes、Docker Compose |
.NET Aspire 使用两个关键项目:
# Install .NET Aspire workload
dotnet workload install aspire
# Verify installation
dotnet workload list # Should show "aspire"
# Docker Desktop (for container resources)
# Ensure it's running before launching AppHost
1. 分析解决方案
2. 创建 Aspire 项目
dotnet new aspire-apphost -n MyApp.AppHost
dotnet new aspire-servicedefaults -n MyApp.ServiceDefaults
dotnet sln add MyApp.AppHost/MyApp.AppHost.csproj
dotnet sln add MyApp.ServiceDefaults/MyApp.ServiceDefaults.csproj
3. 配置服务
builder.AddServiceDefaults()app.MapDefaultEndpoints()4. 在 AppHost 中编排
var builder = DistributedApplication.CreateBuilder(args);
var cache = builder.AddRedis("cache");
var database = builder.AddPostgres("postgres").AddDatabase("appdb");
var api = builder.AddProject<Projects.MyApi>("api")
.WithReference(database)
.WithReference(cache);
var web = builder.AddProject<Projects.MyWeb>("web")
.WithReference(api)
.WithExternalHttpEndpoints();
builder.Build().Run();
5. 更新服务通信
builder.AddServiceDefaults() 模式匹配6. 运行并验证
dotnet run --project MyApp.AppHost
# Opens dashboard at https://localhost:15001
AppHost 项目命名:
[解决方案名称].AppHost服务资源名称:
资源管理:
azd 自动配置的 Azure 资源或手动配置服务发现设置:
http://api 而不是 https://localhost:7001var api = builder.AddProject<Projects.Api>("api")
.WithReference(database)
.WithExternalHttpEndpoints();
var web = builder.AddProject<Projects.Web>("web")
.WithReference(api)
.WithExternalHttpEndpoints();
var messaging = builder.AddRabbitMQ("messaging");
var orderService = builder.AddProject<Projects.OrderService>("orders")
.WithReference(messaging);
var inventoryService = builder.AddProject<Projects.InventoryService>("inventory")
.WithReference(messaging);
var postgres = builder.AddPostgres("postgres")
.AddDatabase("users")
.AddDatabase("products");
var mongo = builder.AddMongoDB("mongo")
.AddDatabase("orders");
var userApi = builder.AddProject<Projects.UserApi>("userapi")
.WithReference(postgres);
var orderApi = builder.AddProject<Projects.OrderApi>("orderapi")
.WithReference(mongo);
有关详细实施指导,请参阅:
resources/components.mdresources/service-communication.mdresources/configuration-management.mdresources/local-development.mdresources/deployment.md.WithReference() 在 AppHost 中定义显式依赖关系.WithDataVolume()appsettings.Development.json 和 .WithEnvironment()服务无法通信
AddServiceDefaults()MapDefaultEndpoints()连接字符串未注入
builder.AddNpgsqlDbContext<>() 而不是手动配置仪表板无法启动
健康检查失败
AddServiceDefaults() 和 MapDefaultEndpoints() 更新服务 Program.csdotnet run --project AppHost 在本地测试resources/components.mdresources/service-communication.mdresources/configuration-management.mdresources/local-development.mdresources/deployment.md记住:从单个服务开始,验证通信是否正常,然后增加复杂性。在部署到生产环境之前,使用仪表板在本地调试问题。
在实施之前,向用户确认:
服务识别:
基础设施要求:
Aspire 结构:
依赖关系:
创建 AppHost 项目:
dotnet new aspire-apphost -n [SolutionName].AppHost
AppHost 项目:
Program.cs创建 ServiceDefaults 项目:
dotnet new aspire-servicedefaults -n [SolutionName].ServiceDefaults
ServiceDefaults 项目:
将项目添加到解决方案:
dotnet sln add [SolutionName].AppHost/[SolutionName].AppHost.csproj
dotnet sln add [SolutionName].ServiceDefaults/[SolutionName].ServiceDefaults.csproj
对于每个服务项目(API、Web 应用、工作程序):
添加 ServiceDefaults 引用:
dotnet add [ServiceProject] reference [SolutionName].ServiceDefaults/[SolutionName].ServiceDefaults.csproj
更新 Program.cs 以注册服务默认值:
// At the top of Program.cs, after builder creation
var builder = WebApplication.CreateBuilder(args);
// Add this line
builder.AddServiceDefaults();
// ... rest of service configuration ...
var app = builder.Build();
// Add this line before app.Run()
app.MapDefaultEndpoints();
app.Run();
对于工作程序服务,模式类似:
var builder = Host.CreateApplicationBuilder(args);
builder.AddServiceDefaults();
// ... service configuration ...
var host = builder.Build();
host.Run();
在 AppHost 中添加项目引用:
dotnet add [SolutionName].AppHost reference [ServiceProject1]/[ServiceProject1].csproj
dotnet add [SolutionName].AppHost reference [ServiceProject2]/[ServiceProject2].csproj
更新 AppHost Program.cs 以编排服务:
var builder = DistributedApplication.CreateBuilder(args);
// Add infrastructure resources
var cache = builder.AddRedis("cache");
var postgres = builder.AddPostgres("postgres")
.AddDatabase("appdb");
// Add services with dependencies
var apiService = builder.AddProject<Projects.MyApi>("apiservice")
.WithReference(postgres)
.WithReference(cache);
var webApp = builder.AddProject<Projects.MyWebApp>("webapp")
.WithReference(apiService)
.WithExternalHttpEndpoints();
builder.Build().Run();
常见资源方法:
.AddRedis("name") - Redis 缓存.AddPostgres("name").AddDatabase("dbname") - PostgreSQL.AddSqlServer("name").AddDatabase("dbname") - SQL Server.AddRabbitMQ("name") - RabbitMQ 消息传递.AddMongoDB("name").AddDatabase("dbname") - MongoDB.AddAzureStorage("name") - Azure 存储服务配置方法:
.WithReference(resource) - 添加依赖项并注入连接信息.WithExternalHttpEndpoints() - 使服务可从外部访问.WithReplicas(count) - 运行多个实例.WithEnvironment("KEY", "value") - 添加环境变量.WithHttpsEndpoint(port: 7001) - 指定 HTTPS 端口Aspire 包由模板自动添加,但请验证:
AppHost 项目:
Aspire.Hosting.AppHost(通常通过工作负载包含)Aspire.Hosting.PostgreSQL)ServiceDefaults 项目:
Microsoft.Extensions.Http.ResilienceMicrosoft.Extensions.ServiceDiscoveryOpenTelemetry.Exporter.OpenTelemetryProtocolOpenTelemetry.Extensions.HostingOpenTelemetry.Instrumentation.AspNetCoreOpenTelemetry.Instrumentation.HttpOpenTelemetry.Instrumentation.Runtime服务项目:
Aspire.Npgsql.EntityFrameworkCore.PostgreSQL(如果使用 PostgreSQL)Aspire.StackExchange.Redis(如果使用 Redis)安装包:
dotnet add [Project] package [PackageName]
对于调用其他服务的服务,使用服务发现:
之前(硬编码 URL):
builder.Services.AddHttpClient("apiservice", client =>
{
client.BaseAddress = new Uri("https://localhost:7001");
});
之后(服务发现):
builder.Services.AddHttpClient("apiservice", client =>
{
client.BaseAddress = new Uri("http://apiservice");
});
服务名称与 AppHost 中 AddProject<>() 调用的名称匹配。
对于类型化 HttpClients:
builder.Services.AddHttpClient<IApiClient, ApiClient>(client =>
{
client.BaseAddress = new Uri("http://apiservice");
});
资源连接字符串会自动注入。更新服务配置:
之前:
builder.Services.AddDbContext<AppDbContext>(options =>
options.UseNpgsql(builder.Configuration.GetConnectionString("DefaultConnection")));
之后:
builder.AddNpgsqlDbContext<AppDbContext>("appdb");
连接名称("appdb")与 AppHost 中的数据库名称匹配。
对于 Redis:
builder.AddRedisClient("cache");
运行 AppHost 项目:
dotnet run --project [SolutionName].AppHost
这将启动:
验证:
对于不在解决方案中的服务:
var externalApi = builder.AddProject<Projects.ExternalApi>("external-api")
.WithHttpsEndpoint(port: 8001);
在容器中运行服务:
var myApi = builder.AddContainer("myapi", "myapiimage")
.WithHttpEndpoint(port: 8000, targetPort: 80);
对于 Azure 托管的资源:
var storage = builder.AddAzureStorage("storage")
.AddBlobs("blobs");
var keyVault = builder.AddAzureKeyVault("keyvault");
使用自定义资源扩展 Aspire:
var customResource = builder.AddResource(new CustomResource("name"))
.WithEndpoint("http", endpoint => endpoint.Port = 9000);
appsettings.Development.json 进行本地覆盖.WithReference() 注入连接信息var apiGateway = builder.AddProject<Projects.ApiGateway>("gateway")
.WithExternalHttpEndpoints();
var serviceA = builder.AddProject<Projects.ServiceA>("servicea");
var serviceB = builder.AddProject<Projects.ServiceB>("serviceb");
apiGateway.WithReference(serviceA).WithReference(serviceB);
var messaging = builder.AddRabbitMQ("messaging");
var worker = builder.AddProject<Projects.Worker>("worker")
.WithReference(messaging);
var api = builder.AddProject<Projects.Api>("api")
.WithReference(messaging);
var cache = builder.AddRedis("cache");
var database = builder.AddPostgres("postgres").AddDatabase("appdb");
var api = builder.AddProject<Projects.Api>("api")
.WithReference(database)
.WithReference(cache);
var web = builder.AddProject<Projects.Web>("web")
.WithReference(api)
.WithExternalHttpEndpoints();
builder.AddServiceDefaults()app.MapDefaultEndpoints()builder.AddNpgsqlDbContext<>() 而不是手动 AddDbContext将 Aspire 添加到现有解决方案时,预计会修改:
确保已安装以下内容:
dotnet workload install aspire验证安装:
dotnet workload list
应在已安装的工作负载中显示 "aspire"。
实施 Aspire 后,验证:
AddServiceDefaults() 和 MapDefaultEndpoints()有关特定组件和模式的详细信息,请参阅:
resources/components.md - Aspire 组件包和配置resources/deployment.md - 将 Aspire 应用程序部署到生产环境完成后,解决方案结构应如下所示:
MySolution/
├── MySolution.sln
├── MySolution.AppHost/
│ ├── Program.cs # Orchestration configuration
│ ├── MySolution.AppHost.csproj
│ └── appsettings.json
├── MySolution.ServiceDefaults/
│ ├── Extensions.cs # Service defaults implementation
│ └── MySolution.ServiceDefaults.csproj
├── MySolution.Api/
│ ├── Program.cs # Calls AddServiceDefaults()
│ └── MySolution.Api.csproj # References ServiceDefaults
├── MySolution.Web/
│ ├── Program.cs # Calls AddServiceDefaults()
│ └── MySolution.Web.csproj # References ServiceDefaults
└── MySolution.Worker/
├── Program.cs # Calls AddServiceDefaults()
└── MySolution.Worker.csproj # References ServiceDefaults
运行 dotnet run --project MySolution.AppHost 将启动所有服务,并打开仪表板以监控和调试分布式应用程序。
每周安装次数
77
仓库
GitHub 星标数
12
首次出现
2026年1月22日
安全审计
安装于
opencode62
gemini-cli56
github-copilot56
codex55
claude-code53
cursor41
This skill helps add .NET Aspire to existing .NET solutions or create new Aspire-enabled distributed applications. It provides modular guidance for orchestration, service discovery, component integration, configuration management, and deployment.
.NET Aspire is an opinionated, cloud-ready stack for building observable, production-ready, distributed applications. It provides:
Use this skill when:
| Need | Resource | Description |
|---|---|---|
| Overall structure | Overview & Setup | Step-by-step implementation from analysis to running |
| Database, cache, messaging | resources/components.md | All available Aspire component packages with examples |
| Inter-service communication | resources/service-communication.md | Service discovery, HttpClient patterns, resilience |
| Configuration & secrets | resources/configuration-management.md | Environment settings, secrets, feature flags |
| Local development | resources/local-development.md | Dashboard, debugging, testing, health checks |
.NET Aspire uses two key projects:
# Install .NET Aspire workload
dotnet workload install aspire
# Verify installation
dotnet workload list # Should show "aspire"
# Docker Desktop (for container resources)
# Ensure it's running before launching AppHost
1. Analyze the solution
2. Create Aspire projects
dotnet new aspire-apphost -n MyApp.AppHost
dotnet new aspire-servicedefaults -n MyApp.ServiceDefaults
dotnet sln add MyApp.AppHost/MyApp.AppHost.csproj
dotnet sln add MyApp.ServiceDefaults/MyApp.ServiceDefaults.csproj
3. Configure services
builder.AddServiceDefaults() in Program.csapp.MapDefaultEndpoints() for ASP.NET Core services4. Orchestrate in AppHost
var builder = DistributedApplication.CreateBuilder(args);
var cache = builder.AddRedis("cache");
var database = builder.AddPostgres("postgres").AddDatabase("appdb");
var api = builder.AddProject<Projects.MyApi>("api")
.WithReference(database)
.WithReference(cache);
var web = builder.AddProject<Projects.MyWeb>("web")
.WithReference(api)
.WithExternalHttpEndpoints();
builder.Build().Run();
5. Update service communication
builder.AddServiceDefaults() pattern matching6. Run and verify
dotnet run --project MyApp.AppHost
# Opens dashboard at https://localhost:15001
AppHost Project Naming:
[SolutionName].AppHostService Resource Names:
Resource Management:
azd or manually configuredService Discovery Setup:
http://api instead of https://localhost:7001var api = builder.AddProject<Projects.Api>("api")
.WithReference(database)
.WithExternalHttpEndpoints();
var web = builder.AddProject<Projects.Web>("web")
.WithReference(api)
.WithExternalHttpEndpoints();
var messaging = builder.AddRabbitMQ("messaging");
var orderService = builder.AddProject<Projects.OrderService>("orders")
.WithReference(messaging);
var inventoryService = builder.AddProject<Projects.InventoryService>("inventory")
.WithReference(messaging);
var postgres = builder.AddPostgres("postgres")
.AddDatabase("users")
.AddDatabase("products");
var mongo = builder.AddMongoDB("mongo")
.AddDatabase("orders");
var userApi = builder.AddProject<Projects.UserApi>("userapi")
.WithReference(postgres);
var orderApi = builder.AddProject<Projects.OrderApi>("orderapi")
.WithReference(mongo);
For detailed implementation guidance, see:
resources/components.mdresources/service-communication.mdresources/configuration-management.mdresources/local-development.mdresources/deployment.md.WithReference().WithDataVolume()appsettings.Development.json and .WithEnvironment()Services can't communicate
AddServiceDefaults() is called in all servicesMapDefaultEndpoints()Connection strings not injected
builder.AddNpgsqlDbContext<>() instead of manual configurationDashboard won't start
Health checks failing
AddServiceDefaults() and MapDefaultEndpoints()dotnet run --project AppHostresources/components.mdresources/service-communication.mdresources/configuration-management.mdresources/local-development.mdresources/deployment.mdRemember : Start with a single service, verify communication works, then add complexity. Use the dashboard to debug issues locally before deploying to production.
Before implementing, confirm with the user:
Service Identification:
Infrastructure Requirements:
Aspire Structure:
Dependencies:
Create the AppHost project:
dotnet new aspire-apphost -n [SolutionName].AppHost
The AppHost project:
Program.cs with application compositionCreate the ServiceDefaults project:
dotnet new aspire-servicedefaults -n [SolutionName].ServiceDefaults
The ServiceDefaults project:
Add projects to solution:
dotnet sln add [SolutionName].AppHost/[SolutionName].AppHost.csproj
dotnet sln add [SolutionName].ServiceDefaults/[SolutionName].ServiceDefaults.csproj
For each service project (API, Web App, Worker):
dotnet add [ServiceProject] reference [SolutionName].ServiceDefaults/[SolutionName].ServiceDefaults.csproj
// At the top of Program.cs, after builder creation
var builder = WebApplication.CreateBuilder(args);
// Add this line
builder.AddServiceDefaults();
// ... rest of service configuration ...
var app = builder.Build();
// Add this line before app.Run()
app.MapDefaultEndpoints();
app.Run();
3. For Worker Services , the pattern is similar:
var builder = Host.CreateApplicationBuilder(args);
builder.AddServiceDefaults();
// ... service configuration ...
var host = builder.Build();
host.Run();
Add project references in AppHost:
dotnet add [SolutionName].AppHost reference [ServiceProject1]/[ServiceProject1].csproj
dotnet add [SolutionName].AppHost reference [ServiceProject2]/[ServiceProject2].csproj
Update AppHost Program.cs to orchestrate services:
var builder = DistributedApplication.CreateBuilder(args);
// Add infrastructure resources
var cache = builder.AddRedis("cache");
var postgres = builder.AddPostgres("postgres")
.AddDatabase("appdb");
// Add services with dependencies
var apiService = builder.AddProject<Projects.MyApi>("apiservice")
.WithReference(postgres)
.WithReference(cache);
var webApp = builder.AddProject<Projects.MyWebApp>("webapp")
.WithReference(apiService)
.WithExternalHttpEndpoints();
builder.Build().Run();
Common resource methods:
.AddRedis("name") - Redis cache.AddPostgres("name").AddDatabase("dbname") - PostgreSQL.AddSqlServer("name").AddDatabase("dbname") - SQL Server.AddRabbitMQ("name") - RabbitMQ messaging.AddMongoDB("name").AddDatabase("dbname") - MongoDB.AddAzureStorage("name") - Azure StorageService configuration methods:
.WithReference(resource) - Add dependency and inject connection info.WithExternalHttpEndpoints() - Make service accessible externally.WithReplicas(count) - Run multiple instances.WithEnvironment("KEY", "value") - Add environment variables.WithHttpsEndpoint(port: 7001) - Specify HTTPS portAspire packages are automatically added by templates, but verify:
AppHost project:
Aspire.Hosting.AppHost (typically included via workload)Aspire.Hosting.PostgreSQL)ServiceDefaults project:
Microsoft.Extensions.Http.ResilienceMicrosoft.Extensions.ServiceDiscoveryOpenTelemetry.Exporter.OpenTelemetryProtocolOpenTelemetry.Extensions.HostingOpenTelemetry.Instrumentation.AspNetCoreOpenTelemetry.Instrumentation.HttpOpenTelemetry.Instrumentation.RuntimeService projects:
Aspire.Npgsql.EntityFrameworkCore.PostgreSQL (if using PostgreSQL)Aspire.StackExchange.Redis (if using Redis)Install packages:
dotnet add [Project] package [PackageName]
For services that call other services , use service discovery:
Before (hardcoded URLs):
builder.Services.AddHttpClient("apiservice", client =>
{
client.BaseAddress = new Uri("https://localhost:7001");
});
After (service discovery):
builder.Services.AddHttpClient("apiservice", client =>
{
client.BaseAddress = new Uri("http://apiservice");
});
The service name matches the name in AppHost's AddProject<>() call.
For typed HttpClients:
builder.Services.AddHttpClient<IApiClient, ApiClient>(client =>
{
client.BaseAddress = new Uri("http://apiservice");
});
Resource connection strings are automatically injected. Update service configuration:
Before:
builder.Services.AddDbContext<AppDbContext>(options =>
options.UseNpgsql(builder.Configuration.GetConnectionString("DefaultConnection")));
After:
builder.AddNpgsqlDbContext<AppDbContext>("appdb");
The connection name ("appdb") matches the database name in AppHost.
For Redis:
builder.AddRedisClient("cache");
Run the AppHost project:
dotnet run --project [SolutionName].AppHost
This launches:
Verify:
For services not in the solution:
var externalApi = builder.AddProject<Projects.ExternalApi>("external-api")
.WithHttpsEndpoint(port: 8001);
Run services in containers:
var myApi = builder.AddContainer("myapi", "myapiimage")
.WithHttpEndpoint(port: 8000, targetPort: 80);
For Azure-hosted resources:
var storage = builder.AddAzureStorage("storage")
.AddBlobs("blobs");
var keyVault = builder.AddAzureKeyVault("keyvault");
Extend Aspire with custom resources:
var customResource = builder.AddResource(new CustomResource("name"))
.WithEndpoint("http", endpoint => endpoint.Port = 9000);
appsettings.Development.json for local overrides.WithReference() to inject connection informationvar apiGateway = builder.AddProject<Projects.ApiGateway>("gateway")
.WithExternalHttpEndpoints();
var serviceA = builder.AddProject<Projects.ServiceA>("servicea");
var serviceB = builder.AddProject<Projects.ServiceB>("serviceb");
apiGateway.WithReference(serviceA).WithReference(serviceB);
var messaging = builder.AddRabbitMQ("messaging");
var worker = builder.AddProject<Projects.Worker>("worker")
.WithReference(messaging);
var api = builder.AddProject<Projects.Api>("api")
.WithReference(messaging);
var cache = builder.AddRedis("cache");
var database = builder.AddPostgres("postgres").AddDatabase("appdb");
var api = builder.AddProject<Projects.Api>("api")
.WithReference(database)
.WithReference(cache);
var web = builder.AddProject<Projects.Web>("web")
.WithReference(api)
.WithExternalHttpEndpoints();
builder.AddServiceDefaults() is called in service Program.csapp.MapDefaultEndpoints() is called for ASP.NET servicesbuilder.AddNpgsqlDbContext<>() instead of manual AddDbContextWhen adding Aspire to an existing solution, expect to modify:
Ensure the following are installed:
dotnet workload install aspireVerify installation:
dotnet workload list
Should show "aspire" in the installed workloads.
After implementing Aspire, verify:
AddServiceDefaults() and MapDefaultEndpoints()For detailed information about specific components and patterns, see:
resources/components.md - Aspire component packages and configurationsresources/deployment.md - Deploying Aspire applications to productionWhen complete, the solution structure should look like:
MySolution/
├── MySolution.sln
├── MySolution.AppHost/
│ ├── Program.cs # Orchestration configuration
│ ├── MySolution.AppHost.csproj
│ └── appsettings.json
├── MySolution.ServiceDefaults/
│ ├── Extensions.cs # Service defaults implementation
│ └── MySolution.ServiceDefaults.csproj
├── MySolution.Api/
│ ├── Program.cs # Calls AddServiceDefaults()
│ └── MySolution.Api.csproj # References ServiceDefaults
├── MySolution.Web/
│ ├── Program.cs # Calls AddServiceDefaults()
│ └── MySolution.Web.csproj # References ServiceDefaults
└── MySolution.Worker/
├── Program.cs # Calls AddServiceDefaults()
└── MySolution.Worker.csproj # References ServiceDefaults
Running dotnet run --project MySolution.AppHost starts all services and opens the dashboard for monitoring and debugging the distributed application.
Weekly Installs
77
Repository
GitHub Stars
12
First Seen
Jan 22, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
opencode62
gemini-cli56
github-copilot56
codex55
claude-code53
cursor41
Sentry .NET SDK 设置指南:错误监控、性能追踪与日志记录
314 周安装
NeuralMemory 记忆质量审计工具 - 系统性评估AI智能体大脑健康的6大维度
77 周安装
能力进化器 - OpenClaw智能体自主代码进化与自我修复工具
3,200 周安装
Apify电商数据提取工具 - 抓取产品价格、评论、卖家信息 | 竞品分析利器
3,200 周安装
LangChain 人在回路中间件:AI 工具调用人工审批与安全控制
3,400 周安装
Orderly Network 入门指南:全链订单簿交易基础设施与AI智能体开发工具
3,300 周安装
LangChain 依赖包安装指南:核心包、模型供应商与框架选择(Python/TypeScript)
3,400 周安装
| Production deployment |
resources/deployment.md |
| Azure Container Apps, Kubernetes, Docker Compose |