SuperAPI AI 工具集

cloud-native-deploy

部署与运维

查看项目

更新于 10-16 04:05

技能介绍

用途

该技能用于将 .NET 应用部署到云原生环境,主要面向 Azure 平台,同时涵盖 Docker 与 Kubernetes 相关实践,并配套 CI/CD 流程。

主要能力

Azure Container Apps(通过 Aspire)

安装 Azure Developer CLI:

winget install microsoft.azd  # Windows
brew install azd              # macOS

初始化与部署:

azd init
azd provision   # Creates Azure resources from Aspire manifest
azd deploy      # Deploys all services

Dockerfile(多阶段)

资料给出基于 .NET 10 的多阶段构建示例:构建阶段使用 mcr.microsoft.com/dotnet/sdk:10.0,先复制解决方案与项目文件并执行 dotnet restore,再复制源码并 dotnet publish;运行阶段使用 mcr.microsoft.com/dotnet/aspnet:10.0,暴露 8080 端口,设置 ASPNETCORE_URLS=http://+:8080,并以 dotnet MyApp.Web.dll 作为入口。

Docker Compose

示例编排包含 web、db(postgres:16)与 redis(redis:7-alpine)三个服务。web 通过 build 指定 Dockerfile,映射 8080 端口,设置连接字符串与环境变量,并依赖 db 的健康检查;db 配置数据库名、密码、数据卷与 pg_isready 健康检查;redis 映射 6379 端口;并声明 postgres_data 卷。

GitHub Actions CI/CD

流水线在 push 与 pull_request 到 main 分支时触发,环境变量包含 DOTNET_VERSION: '10.0.x'、REGISTRY: ghcr.io 与镜像名。build-and-test 任务执行 checkout、setup-dotnet、restore、build(-warnaserror)、test(输出 trx 到 TestResults)并上传测试结果工件。deploy 任务依赖 build-and-test,仅在 main 分支执行,使用 azure/login@v2 登录后执行 dotnet publish 并通过 az webapp deploy 部署。

环境配置与健康检查

Program.cs 中按顺序加载 appsettings.json、环境特定的 appsettings.{EnvironmentName}.json(可选)、环境变量与 UserSecrets(仅开发环境)。并通过 app.MapHealthChecks("/health") 提供负载均衡健康检查端点。

Azure App Service 部署

Azure CLI 单命令方式:

az login
az webapp up --sku F1 --name <app-name> --os-type linux
# --sku: F1 (free), B1 (basic), S1 (standard), P1v3 (premium)
# app-name must be globally unique (a-z, 0-9, -)

Azure Developer CLI 方式:

azd init --template https://github.com/Azure-Samples/quickstart-deploy-aspnet-core-app-service.git
azd up      # Provisions + deploys
azd down    # Cleanup all resources

PowerShell 方式:连接账户、发布、压缩为 deploy.zip,再通过 Publish-AzWebApp 部署。

Azure SDK 调用模式

资料总结为四步:定位 → 安装 → 创建客户端 → 调用方法。示例覆盖 Blob Storage(BlobContainerClient + DefaultAzureCredential 上传)、Key Vault(SecretClient 获取密钥)、Service Bus(ServiceBusClient 创建发送者并发送消息)。

常用 Azure 服务与 NuGet 包对照

Web 应用与 API 对应 App Service;无服务器微服务对应 Container Apps;事件驱动函数对应 Azure Functions(Azure.Functions);关系型数据对应 Azure SQL(Microsoft.Data.SqlClient);全局 NoSQL 对应 Cosmos DB(Azure.Cosmos);文件/Blob 存储对应 Blob Storage(Azure.Storage.Blobs);消息队列对应 Service Bus(Azure.Messaging.ServiceBus);密钥管理对应 Key Vault(Azure.Security.KeyVault.Secrets);身份验证对应 Entra ID(Microsoft.Identity.Web);缓存对应 Redis(StackExchange.Redis)。

App Service 迁移注意事项

仅支持 HTTP(80)与 HTTPS(443)端口,需移除自定义端口;不支持 GAC,依赖需部署到 \bin 文件夹;不支持 COM/COM+,需用托管代码重写;无物理文件系统,需使用 Azure Files(SMB)或 Blob Storage;Azure AD 需要付费层(Basic 及以上),免费层不支持;生产环境应将连接字符串迁移到 Azure Key Vault。

跨平台目标框架

单目标(应用推荐):<TargetFramework>net10.0</TargetFramework>;多目标(需要广泛兼容的 NuGet 库):<TargetFrameworks>net10.0;netstandard2.0;net462</TargetFrameworks>。反模式:不要以 netstandard1.x 为目标,会产生庞大的依赖图。

使用方式

按部署目标选择对应路径:使用 Aspire 与 azd 部署到 Container Apps;使用多阶段 Dockerfile 与 Docker Compose 进行容器化;使用 GitHub Actions 建立 CI/CD;使用 Azure CLI、azd 或 PowerShell 部署到 App Service;通过 Azure SDK 模式接入各项 Azure 服务。

适用场景

适用于需要将 .NET 应用部署到 Azure 云原生环境、构建容器镜像、编排本地依赖服务、搭建自动化构建测试与部署流水线,以及从传统 App Service 迁移的场景。

限制

资料未提供 Kubernetes 的具体部署清单或命令细节,仅标题提及;未提供收费、价格或性能效果数据;未提供各 Azure 服务的完整配置参数说明。