.NET 6 与 Azure 云服务开发指南
1. ASP.NET 框架概述
ASP.NET 多年来一直是构建企业级 Web 应用程序或服务的热门选择,并且该框架不断发展。MVC 模式易于使用,对于熟悉其他语言的开发者来说也很容易上手,因为它主要依赖于模型 - 视图 - 控制器(Model - View - Controller)模式。WebAPI 采用相同的设计模式,便于构建和使用 RESTful API。
在 .NET 6 中,引入了最小 API,它是 ASP.NET 家族的新成员。使用最小 API,我们可以比以往更快地开始构建 API,但会牺牲一些结构。这是一种权衡。基于控制器的 API 使用广为人知的设计模式构建,但对于较小的 API,在项目的大量文件中很容易迷失方向。而最小 API 所需的文件或代码量最少,但结构可能很快就会变得混乱。因此,要明智选择,并使用扩展方法将端点分组。
2. 微软 Azure 云平台简介
云计算在过去几年中得到了巨大的发展,这并不难理解。企业通过不购买和维护自己的服务器硬件,而是选择按使用量付费的模式,可以节省大量资金,这种模式可以在几分钟内从一台服务器扩展到数百台,再缩减回一台。像微软这样的云服务提供商,让软件在云服务上轻松运行,同时还提供强大的工具,用于全面配置基于云的网络,甚至可以将其作为本地网络的扩展。
微软 Azure 是微软的公共云平台。任何拥有信用卡的人都可以创建账户,开始创建和发布云服务。Azure 的功能非常广泛,无法在一篇文章中全面描述,这里选择了一些与 .NET 6 相关的常用服务进行介绍。
配置 Azure 服务有多种方式:
- Azure 门户 :开始使用 Azure 时,最可能首先接触到的是 Azure 门户 。
- 命令行界面(CLI) :Azure SDK 自带命令行工具,可用于自动化 Azure 操作,例如将其集成到 CI/CD 管道中。
- Visual Studio 集成 :Visual Studio 也提供了一些 Azure 集成功能,例如将 Web 应用程序发布到 Azure。这些集成对于快速入门很有用,但最终功能相当有限。
后续示例将通过 Azure 门户进行操作。需要注意的是,Azure 门户是一个发展迅速的 Web 应用程序,当你阅读本文时,界面可能会略有不同,但概念保持不变。要跟随本文操作,你需要一个 Azure 账户,根据所选的服务和层级,可能会产生费用。可以在 这里 获取免费的 Azure 试用版。
3. Azure Web 应用
Azure Web 应用可以简单理解为基本的 Web 托管服务,全球有数千家提供商都提供类似服务。不同之处在于,作为云服务,它可以进行大规模扩展。默认情况下,Web 应用支持以下类型的应用程序:
- .NET
- .NET Classic
- Java
- Ruby
- NodeJS
- PHP
- Python
3.1 创建应用服务
要进行此演示,你需要将一个 ASP.NET Core 6 项目提交到 GitHub 存储库。
创建步骤如下:
1. 打开 Azure 门户,门户会显示最近使用的资源列表和常用资源类型列表。点击带有大“+”图标的按钮创建新资源。
2. 这将弹出一个页面,提供一些资源类型的快速选项,还有一个搜索框,可用于搜索广泛的 Azure 服务目录。需要注意的是,Azure 服务目录中的并非所有服务都是微软的产品,也有大量第三方服务,如 MariaDB、SendGrid、多种用于虚拟机的 Linux 发行版等。在目录中找到 Web 应用并点击“创建”,进入设置向导。确保选择“Web 应用”,而不是“静态 Web 应用”。
3. 选择订阅 :作为 Azure 用户,你需要有一个订阅。Azure 有很多免费服务,但根据所需的灵活性、扩展性或冗余性,很快就会涉及付费服务。为了跟踪使用情况,微软要求用户拥有订阅,你可以将多个订阅关联到同一个电子邮件地址。作为 Visual Studio 客户,你每月可以获得一定的 Azure 信用额度,具体金额取决于你拥有的 Visual Studio 许可证类型。
4. 创建资源组 :资源组是一个功能组,可用于组织你的服务。同一资源组中的 Azure 资源具有相同的生命周期、权限和策略。点击“新建”并为资源组命名。
5. 配置资源 :
- 命名 :资源名称在所有 Azure 客户中必须唯一,因为该名称将用作 URL。作为 Azure Web 应用用户,你将获得一个免费的域名,格式为 https://<your web app name>.azurewebsites.net 。你可以免费使用 *.azurewebsites.net 的 SSL 证书。当然,你也可以将自己的域名附加到 Web 应用实例,但需要自己负责 SSL 证书。
- 部署方式 :可以选择将项目作为代码部署或作为 Docker 容器部署。Azure 支持多种部署容器化应用程序的方式,这里选择将项目作为代码部署,后续会介绍 Docker 部署。
- 运行时堆栈 :选择构建应用程序所使用的技术。由于本文主要介绍 .NET 6,因此选择 .NET 6 (LTS) 作为运行时堆栈。根据运行时堆栈下拉列表中的选项,选择操作系统的选项可能会亮起,因为并非所有运行时堆栈选项都同时支持 Linux 和 Windows,例如经典的 ASP.NET 4.x 只能在 Windows 主机上运行。自 .NET Core 以来,.NET 实现了跨平台,因此也可以在 Linux 上运行。在 Linux 或 Windows 上运行应用服务有一些差异,主要体现在定价方面。使用 Azure 定价计算器计算基本实例每月 730 小时的使用成本,Windows 服务的成本大约是 Linux 服务的四倍。不过,Linux 的 Web 应用没有免费层级,而 Windows 有。所以,选择时不能仅仅考虑成本最低的选项,要充分了解不同选项的特点。
- 选择区域 :Azure 在全球拥有数据中心,一个区域是一组相对靠近的数据中心集合。将服务部署到某个区域时,应用程序将在该区域的一个或多个数据中心中运行,但你不知道具体是哪个。这样做是为了实现冗余,以防某个数据中心出现连接问题,同一区域的其他数据中心可以接管。Azure 有关于数据存储位置和数据传输的相关保证,以符合欧洲 GDPR 等隐私法规。随着 Azure 的发展,区域列表不断扩展,撰写本文时,Azure 有 33 个区域。需要注意的是,并非每个区域都支持所有资源类型,较新的资源类型通常先在美国区域提供,然后逐步推广到整个 Azure 网络。
- 选择应用服务计划 :应用服务计划是另一种分组方式,资源组侧重于生命周期、权限和策略,而应用服务计划则关注位置、功能、成本和资源。一个服务计划与一个区域相关联,如果你希望所有服务都在同一个服务计划中,它们必须位于同一区域。SKU 表示你希望该服务具备的计算能力,计算能力越强,成本越高。选择屏幕会根据工作负载对可用的 SKU 进行分组,并立即显示估计的每月成本。所选的 SKU 可以在后续调整,例如当应用程序的使用量增加时。如果你切换到顶部的“开发/测试”选项卡,可以选择免费层级,这对于演示来说已经足够,并且可以避免消耗 Azure 信用额度。选择适合项目的 SKU 后,进入向导的第 2 步:部署。
3.2 配置部署
Azure 应用服务可以与 GitHub Actions 集成,自动设置 CI/CD 管道。通过 CI/CD,我们可以自动构建和部署应用程序。将 Azure 门户连接到有权访问之前提到的 GitHub 存储库的 GitHub 账户。连接后,选择正确的组织、存储库和分支。设置完成后,会生成一个 YAML 文件并添加到代码存储库中,用于 GitHub 操作。该操作可以自动构建应用程序并将其部署到新创建的 Azure Web 应用。在将 YAML 文件添加到 GitHub 存储库之前,可以在 Azure 门户中预览该文件。有关设置 Azure 和 GitHub Action 之间连接的更多信息,请参考 文档 。
3.3 配置监控
应用程序洞察(Application Insights)是另一个 Azure 服务,提供广泛的日志记录和监控功能。在此处启用它将提供错误和崩溃日志记录,如需更详细的日志记录,需要将 Application Insights SDK 添加到项目中。
3.4 资源标记
向导的最后一步允许为资源添加标签。使用这些标签,你可以为服务创建类别,以便在搜索 Azure 服务时更轻松地进行筛选。
在创建 Azure 资源之前,你将获得所有所选选项的最终概述。如果一切看起来都没问题,点击“创建”,Azure 将开始创建资源。Azure 会随时告知部署状态,你可以离开该页面,稍后回来查看,部署将继续进行。
3.5 部署总结
以之前的 ASP.NET MVC 演示项目为例,选择相应的 GitHub 存储库和分支。Azure 创建了一个应用服务实例来托管 .NET 6 Web 应用程序,同时生成了一个用于 GitHub 构建/部署管道的 YAML 文件。GitHub Actions 编译应用程序并将其部署到新生成的 Azure 应用服务。从现在起,每当有新更改提交到 GitHub 存储库的主分支时,GitHub Action 将自动编译并部署新版本。
在 Azure 门户方面,如果启用了应用程序洞察,你将获得一个带有一些分析数据的仪表板。从这里,你可以停止、启动或重启应用程序服务器,查看应用程序日志,更改配置,更改服务计划等。你还可以下载发布配置文件,将其导入 Visual Studio 中,直接从 IDE 部署到云端。
3.6 发布配置文件对比
发布配置文件有两种,分别来自 Azure 门户和 Visual Studio:
- Azure 门户发布配置文件示例 :
<?xml version="1.0" encoding="UTF-8"?>
<publishData>
<publishProfile
profileName="ApressDotNetSix - Web Deploy"
publishMethod="MSDeploy"
publishUrl="apressdotnetsix.scm.azurewebsites.net:443"
msdeploySite="ApressDotNetSix"
userName="$ApressDotNetSix"
userPWD="***"
destinationAppUrl="http://apressdotnetsix.azurewebsites.net"
SQLServerDBConnectionString=""
mySQLDBConnectionString=""
hostingProviderForumLink=""
controlPanelLink="http://windows.azure.com"
webSystem="WebSites">
<databases />
</publishProfile>
</publishData>
- Visual Studio 发布配置文件示例 :
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WebPublishMethod>MSDeploy</WebPublishMethod>
<ResourceId>/subscriptions/**/ApressDotNetSix</ResourceId>
<ResourceGroup>ApressBookDemo</ResourceGroup>
<PublishProvider>AzureWebSite</PublishProvider>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish>http://apressdotnetsix.azurewebsites.net </SiteUrlToLaunchAfterPublish>
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
<ExcludeApp_Data>False</ExcludeApp_Data>
<ProjectGuid>cab9ed7b-f056-4849-98aa-db947b3cd09e</ProjectGuid>
<MSDeployServiceURL>apressdotnetsix.scm.azurewebsites.net:443 </MSDeployServiceURL>
<DeployIisAppPath>ApressDotNetSix</DeployIisAppPath>
<RemoteSitePhysicalPath />
<SkipExtraFilesOnServer>True</SkipExtraFilesOnServer>
<MSDeployPublishMethod>WMSVC</MSDeployPublishMethod>
<EnableMSDeployBackup>True</EnableMSDeployBackup>
<EnableMsDeployAppOffline>True</EnableMsDeployAppOffline>
<UserName>$ApressDotNetSix</UserName>
<_SavePWD>True</_SavePWD>
<_DestinationType>AzureWebSite</_DestinationType>
</PropertyGroup>
</Project>
这两个文件功能相同,但格式不同。Azure 门户的发布配置文件特别适用于云部署,而 Visual Studio 的版本更通用,可以部署到其他端点,如 Windows 文件系统、Docker 或任何 IIS 服务器。
以下是创建 Azure Web 应用的流程图:
graph LR
A[打开 Azure 门户] --> B[点击 + 创建新资源]
B --> C[选择 Web 应用]
C --> D[选择订阅]
D --> E[创建资源组]
E --> F[配置资源信息]
F --> G[选择部署方式]
G --> H[配置运行时堆栈]
H --> I[选择区域]
I --> J[选择应用服务计划]
J --> K[配置部署(集成 GitHub Actions)]
K --> L[配置监控(启用 Application Insights)]
L --> M[资源标记]
M --> N[确认并创建资源]
4. Azure 静态 Web 应用
静态应用在前端 Web 开发中越来越常见。像 Angular、Vue、React 和 Blazor 等框架都生成客户端逻辑,主要依赖 RESTful API 进行复杂操作和数据访问。由于所有操作都在客户端执行,我们需要一种方法将应用程序部署到客户端。对于基于 JavaScript 的框架(如 Angular、React 和 Vue),它们生成的是 HTML、CSS 和 JavaScript 文件,客户端浏览器可以直接处理。对于 Blazor,会生成 HTML、CSS、JavaScript 和 DLL 文件,支持 WebAssembly 的浏览器可以处理这些文件。要将这些文件部署到客户端,需要一个 Web 服务器来提供这些文件,Azure 静态 Web 应用就可以满足这个需求。静态 Web 应用是一种云服务,用于提供文件,并且可以在全球范围内分发资产,使应用程序位于离客户最近的 Azure 区域,以实现最小延迟。
4.1 创建静态 Web 应用
设置静态 Web 应用与设置默认 Web 应用非常相似,创建向导的第一步应该很熟悉,但有一些特定字段:
1. 选择托管计划 :静态 Web 应用为个人项目提供免费版本,为专业项目提供标准计划。
2. 配置部署细节 :与 Azure Web 应用不同,静态应用不支持发布配置文件,仅通过 CI/CD 集成工作,这意味着需要将 Azure 资源链接到源存储库。Azure 门户的向导与 GitHub 有很好的集成,也支持任何源存储库,但需要从构建服务器本身进行配置,而不是在 Azure 门户上。以一个默认的 Blazor WebAssembly 项目为例,创建资源后,会将一个新的 YAML 文件推送到源存储库,并触发一个 GitHub Action,用于构建和部署 Blazor 应用程序。
4.2 部署流程
- 构建与压缩 :GitHub Actions 成功编译并压缩 Blazor 输出。
- 上传到 Azure :将压缩文件上传到 Azure。
- 解压与部署 :静态 Web 应用服务将解压所有文件,同时 GitHub Action 会轮询服务以确认完成。
- 域名生成 :静态 Web 应用不允许像 Azure Web 应用那样选择自己的主机名,而是自动生成一个域名。
以下是创建 Azure 静态 Web 应用的流程图:
graph LR
A[打开 Azure 门户] --> B[点击 + 创建新资源]
B --> C[选择静态 Web 应用]
C --> D[选择托管计划]
D --> E[配置部署(链接源存储库)]
E --> F[生成 YAML 文件并触发 GitHub Action]
F --> G[GitHub Action 构建与压缩]
G --> H[上传到 Azure]
H --> I[Azure 解压部署]
4.3 部署总结
通过以上步骤,成功创建并部署了一个 Blazor 静态 Web 应用。Azure 静态 Web 应用为基于 HTML、CSS 和 JavaScript 的应用提供了一种简单高效的部署方式,利用 CI/CD 集成实现自动化部署,并且可以在全球范围内分发资产,提高应用的响应速度。
5. 总结
本文介绍了使用 Azure 云服务部署 Web 应用的相关内容,包括 Azure Web 应用和 Azure 静态 Web 应用:
| 服务类型 | 支持的应用类型 | 部署方式 | 域名选择 | 免费层级 |
| ---- | ---- | ---- | ---- | ---- |
| Azure Web 应用 | .NET、.NET Classic、Java、Ruby、NodeJS、PHP、Python 等 | 代码部署、Docker 容器部署 | 可自定义域名 | Windows 有免费层级,Linux 无 |
| Azure 静态 Web 应用 | 主要是 HTML、CSS、JavaScript 及相关框架生成的文件 | 仅支持 CI/CD 集成 | 自动生成域名 | 有免费版本 |
Azure Web 应用适用于多种类型的应用程序,提供了丰富的配置选项和灵活的部署方式;而静态 Web 应用则专注于静态文件的分发,适合基于前端框架的应用,并且提供了免费版本,适合个人开发者和小型项目。在选择使用哪种服务时,需要根据应用的类型、需求和预算等因素进行综合考虑。同时,利用 Azure 提供的各种工具和服务(如 GitHub Actions 集成、应用程序洞察等),可以提高开发和运维的效率,确保应用的稳定运行。
希望本文能帮助你更好地理解和使用 Azure 云服务来部署 Web 应用,让你的应用能够在云端高效运行。
超级会员免费看
306

被折叠的 条评论
为什么被折叠?



