你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
教程:将 ASP.NET Core 和 Azure SQL 数据库应用部署到 Azure 应用服务
在本教程中,你将了解如何将 ASP.NET Core 应用部署到 Azure 应用服务并连接到 Azure SQL 数据库。 Azure 应用服务是一种可缩放程度高、支持自修补的 Web 托管服务,可轻松地在 Windows 或 Linux 上部署应用。 尽管本教程使用 ASP.NET Core 6.0 应用,但对于其他版本的 ASP.NET Core 和 ASP.NET Framework 而言,此过程是相同的。
本教程需要:
示例应用程序
若要浏览本教程中使用的示例应用程序,请从存储库下载它https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore或使用以下 Git 命令克隆它:
git clone https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore.git
cd msdocs-app-service-sqldb-dotnetcore
1. 创建应用服务和 Azure SQL 数据库
此步骤创建 Azure 资源。 本教程中使用的步骤创建一组默认安全的资源,其中包括应用服务和 Azure SQL 数据库。 此创建过程中,你将指定:
- Web 应用的名称。 此名称用作 Web 应用的 DNS 名称的一部分,其格式为
https://<app-name>.azurewebsites.net
。 - “区域”,在世界上以物理方式运行应用。
- 应用的运行时堆栈。 在此处选择要用于应用的 .NET 版本。
- 应用的托管计划。 它是定价层,包括应用的一组功能和缩放容量。
- 应用的资源组。 使用资源组可将应用程序所需的所有 Azure 资源分组到一个逻辑容器中。
登录到 Azure 门户并按照以下步骤创建 Azure 应用服务资源。
步骤 1。 在 Azure 门户中:
- 在 Azure 门户顶部的搜索栏中,输入“Web 应用数据库”。
- 选择“市场”标题下标记为“Web 应用 + 数据库”的项目。 还可以直接导航到创建向导。
步骤 2. 在“创建 Web 应用 + 数据库”页上,按如下所述填写表单。
- 资源组 → 选择“新建”,并使用名称 msdocs-core-sql-tutorial。
- 区域 → 与你靠近的任何 Azure 区域。
- 名称 → msdocs-core-sql-XYZ,其中 XYZ 是任意三个随机字符。 该名称在 Azure 中必须唯一。
- 运行时堆栈 → .NET 6 (LTS)。
- 托管计划 → 基本。 准备就绪后,可以稍后纵向扩展到生产定价层。
- 默认情况下,选择 SQLAzure 作为数据库引擎。 Azure SQL 数据库是一个完全托管的平台即服务 (PaaS) 数据库引擎,始终运行于最新稳定版 SQL Server。
- 选择“查看 + 创建”。
- 验证完成后,选择“创建”。
步骤 3. 部署需要数分钟才能完成。 部署完成后,选择“转到资源”按钮。 这将直接转到应用服务应用,但会创建以下资源:
- 资源组 → 所有已创建资源的容器。
- 应用服务计划 → 定义应用服务的计算资源。 将创建基本层中的 Linux 计划。
- 应用服务 → 表示应用,且在应用服务计划中运行。
- 虚拟网络 → 与应用服务应用集成,并隔离后端网络流量。
- 专用终结点 → 虚拟网络中数据库服务器的访问终结点。
- 网络接口 → 表示专用终结点的专用 IP 地址。
- Azure SQL 数据库服务器 → 只能从专用终结点后面访问。
- Azure SQL 数据库 → 你的数据库和用户创建于此服务器上。
- 专用 DNS 区域 → 在虚拟网络中启用数据库服务器的 DNS 解析。
2. 验证数据库连接
创建向导已为你生成连接字符串。 在此步骤中,查找生成的连接字符串供以后使用。
步骤 1。 在左侧菜单的“应用服务”页面中,选择“配置”。
步骤 2.
- 滚动到页面底部并选择连接字符串 defaultConnection。 它是由创建向导生成的。 若要设置应用程序,有这个名称就够了。
- 如果需要,可以选择“复制”按钮复制“值”字段。
- 选择“取消” 。
稍后,你将更改应用程序以使用此
defaultConnection
连接字符串。
3. 部署示例代码
在此步骤中,你将使用 GitHub Actions 配置 GitHub 部署。 这只是部署到应用服务的许多方法之一,也是一种在部署过程中持续集成的好方法。 默认情况下,GitHub 存储库的每个 git push
都会启动生成和部署操作。
步骤 1。 在应用服务页的左侧菜单中,选择“部署中心”。
步骤 2. 在“部署中心”页中:
- 在“源”中,选择“GitHub”。 默认情况下,选择 GitHub Actions 作为生成提供程序。
- 登录到 GitHub 帐户,并按照提示授权 Azure。
- 在“组织”中,选择你的帐户。
- 在“存储库”中,选择“msdocs-app-service-sqldb-dotnetcore”。
- 在“分支”中,选择“主”。
- 在顶部菜单中,选择“保存”。 应用服务会将工作流文件提交到所选 GitHub 存储库中(在
.github/workflows
目录中)。
步骤 3. 在新浏览器中:
- 登录到 GitHub 帐户。
- 导航到 https://github.com/Azure-Samples/msdocs-app-service-sqldb-dotnetcore。
- 选择“Fork”。
- 选择“创建分支”。
步骤 4. 在 GitHub 页中,按 .
键在浏览器中打开 Visual Studio Code。
步骤 5。 在浏览器中的 Visual Studio Code:
- 在资源管理器中打开 DotNetCoreSqlDb/appsettings.json。
- 将连接字符串名称
MyDbConnection
更改为defaultConnection
,与之前在应用服务中创建的连接字符串相匹配。
步骤 6.
- 在资源管理器中打开 DotNetCoreSqlDb/Startup.cs。
- 在
options.UseSqlServer
方法中,将连接字符串名称MyDbConnection
更改为defaultConnection
。 这是示例应用程序使用连接字符串的位置。
步骤 7.
- 在资源管理器中打开 .github/workflows/main_msdocs-core-sql-XYZ。 此文件由应用服务创建向导创建。
- 在
dotnet publish
步骤下,添加一个步骤,以使用命令dotnet tool install -g dotnet-ef
安装 Entity Framework Core 工具。 - 在新步骤下,添加另一个步骤以在部署包中生成数据库迁移捆绑包:
dotnet ef migrations bundle -p DotNetCoreSqlDb/DotNetCoreSqlDb.csproj -o ${{env.DOTNET_ROOT}}/myapp/migrate
。 迁移捆绑包是一个自包含的可执行文件,无需 .NET SDK 即可在生产环境中运行。 应用服务 Linux 容器只有 .NET 运行时,没有 .NET SDK。
步骤 8.
- 选择“源代码管理”扩展。
- 在文本框中,键入类似
change connection string name & add migration bundle
的提交消息。 - 选择“提交和推送”。
步骤 9. 返回到 Azure 门户中的“部署中心”页:
- 选择“日志”。 已从提交的更改开始新的部署运行。
- 在部署运行的日志项中,选择具有最新时间戳的“生成/部署日志”条目。
步骤 10. 你已转到 GitHub 存储库,并看到 GitHub Action 正在运行。 工作流文件定义两个单独的阶段,即生成和部署阶段。 等待 GitHub 运行以显示“完成”状态。 这需要几分钟的时间才能完成。
4. 生成数据库架构
在 SQL 数据库受虚拟网络保护的情况下,运行 dotnet 数据库迁移的最简单方法是使用应用服务容器在 SSH 会话中运行。
步骤 1。 在应用服务页的左侧菜单中,选择“SSH”。
步骤 2. 在 SSH 终端中:
- 运行
cd /home/site/wwwroot
。 下面是所有已部署的文件。 - 使用
./migrate
运行 GitHub 工作流生成的迁移捆绑包。 如果该命令成功,则应用服务会成功连接到 SQL 数据库。 只有对/home
中文件的更改才能在应用重启之后持久保存。 不会保留/home
外部的更改。
5.浏览到应用
步骤 1。 在“应用服务”页中:
- 从左侧菜单中选择“概述”。
- 选择应用的 URL。 你也可以直接导航到
https://<app-name>.azurewebsites.net
。
步骤 2. 将一些任务添加到列表。 恭喜,你已在 Azure 应用服务中运行了一个安全的数据驱动的 ASP.NET Core 应用。
6.流式传输诊断日志
Azure 应用服务捕获已记录到控制台的所有消息,以帮助你诊断应用程序的问题。 示例应用在其每个终结点中输出控制台日志消息,以演示此功能。
步骤 1。 在“应用服务”页中:
- 从左菜单中选择“应用服务日志”。
- 在“应用程序日志记录”下,选择“文件系统”。
步骤 2. 在左侧菜单中,选择“日志流”。 将显示应用的日志,包括平台日志和容器内部的日志。
7.清理资源
完成后,可以通过删除资源组从 Azure 订阅中删除所有资源。
步骤 1。 在 Azure 门户顶部的搜索栏中:
- 输入资源组名称。
- 选择前面创建的资源组。
步骤 2. 在资源组页上,选择“删除资源组”。
步骤 3.
- 输入资源组名称以确认删除。
- 选择“删除”。
常见问题
此设置花费有多大?
创建资源的定价如下所示:
- 应用服务计划在基本层中创建,可以进行纵向扩展或缩减。 请参阅应用服务定价。
- Azure SQL 数据库是在具有最少核心数的标准系列硬件上的常规用途无服务器层中创建的。 成本很小,可以分发到其他区域。 可以通过减小其最大大小来进一步降低成本,也可以通过调整服务层、计算层、硬件配置、核心数、数据库大小和区域冗余来纵向扩展成本。 请参阅 Azure SQL 数据库定价。
- 除非配置额外的功能(例如对等互连),否则虚拟网络不会产生费用。 请参阅 Azure 虚拟网络定价。
- 专用 DNS 区域会产生少量费用。 请参阅 Azure DNS 定价。
如何使用其他工具连接到在虚拟网络后面受保护的 Azure SQL 数据库服务器?
- 要从命令行工具进行基本访问,可以从应用的 SSH 终端运行
sqlcmd
。 应用的容器不附带sqlcmd
,因此必须手动安装它。 请记住,已安装的客户端不会在应用重启时持久保存。 - 若要从 SQL Server Management Studio 客户端或 Visual Studio 进行连接,你的计算机必须位于虚拟网络中。 例如,它可以是连接到其中某个子网的 Azure VM,也可以是与 Azure 虚拟网络建立站点到站点 VPN 连接的本地网络中的计算机。
本地应用开发如何处理 GitHub Actions?
以应用服务自动生成的工作流文件为例,每个 git push
文件都会启动新的生成和部署运行。 从 GitHub 存储库的本地克隆中,将所需的更新推送到 GitHub。 例如:
git add .
git commit -m "<some-message>"
git push origin main
后续步骤
请继续学习下一教程,了解如何使用自定义域和证书保护应用。
或者,查看其他资源: