你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 FTP/S 将应用部署到 Azure 应用服务
本文介绍了如何使用 FTP 或 FTPS 将 Web 应用、移动应用后端或 API 应用部署到 Azure App Service。
应用的 FTP/S 终结点已处于活动状态。 启用 FTP/S 部署不需要进行任何配置。
按照配置 Azure 应用服务的部署凭据中的说明,复制应用程序范围的凭据或设置用户范围的凭据。 使用任一凭据都可以连接到应用的 FTP/S 终结点。
根据所选的凭据范围,按以下格式创建 FTP 用户名:
应用程序范围 |
用户范围 |
<app-name>\$<app-name> |
<app-name>\<deployment-user> |
在应用服务中,多个应用间共享 FTP/S 终结点。 由于用户范围的凭据未链接到特定资源,因此需要在应用名称前面预置用户范围的用户名,如上所示。
还是在应用中复制部署凭据的同一管理页(“部署中心”>“FTP 凭据”)上,复制 FTPS 终结点。
运行 az webapp deployment list-publishing-profiles 命令。 下面的示例使用 JMES 路径查询从输出中提取 FTP/S 终结点。
az webapp deployment list-publishing-profiles --name <app-name> --resource-group <group-name> --query "[?ends_with(profileName, 'FTP')].{profileName: profileName, publishUrl: publishUrl}"
每个应用都有两个 FTP/S 终结点,一个支持读写,另一个是只读(profileName
包含 ReadOnly
),用于数据恢复方案。 若要使用 FTP 部署文件,请复制读写终结点的 URL。
运行 Get-AzWebAppPublishingProfile 命令。 下面的示例是从 XML 输出中提取 FTP/S 终结点。
$xml = [xml](Get-AzWebAppPublishingProfile -Name <app-name> -ResourceGroupName <group-name> -OutputFile null)
$xml.SelectNodes("//publishProfile[@publishMethod=`"FTP`"]/@publishUrl").value
- 从 FTP 客户端(例如 Visual Studio、Cyberduck 或 WinSCP),使用收集到的连接信息连接到应用。
- 将文件及其各自的目录结构复制到 Azure 中的 /site/wwwroot 目录(对于 Web 作业,复制到 /site/wwwroot/App_Data/Jobs/ 目录) 。
- 浏览到应用的 URL,以验证该应用是否正在正常运行。
备注
与基于 Git 的部署和 Zip 部署不同,FTP 部署不支持生成自动化,例如:
- 还原依赖项(如 NuGet、NPM、PIP 和 Composer 自动化)
- 编译 .NET 二进制文件
- 生成 web.config(以下提供一个 Node.js 示例)
在本地计算机上手动生成这些必要的文件,并将它们与应用一起部署。
为了增强安全性,只应允许基于 TLS/SSL 的 FTP。 如果不使用 FTP 部署,也可禁用 FTP 和 FTPS。
在 Azure 门户的应用资源页中,从左侧导航中选择“配置”>“常规设置”。
若要禁用未加密的 FTP,请在“FTP 状态”中选择“仅 FTPS”。 若要完全禁用 FTP 和 FTPS,请选择“禁用”。 完成后,选择“保存”。 如果使用“仅 FTPS”,则必须通过导航到 Web 应用的“TLS/SSL 设置”页面来强制实施 TLS 1.2 或更高版本。 TLS 1.0 和 1.1 不支持“仅 FTPS”。
使用 --ftps-state
参数运行 az webapp config set 命令。
az webapp config set --name <app-name> --resource-group <group-name> --ftps-state FtpsOnly
--ftps-state
的可能值有 AllAllowed
(FTP 和 FTPS 已启用时)、Disabled
(FTP 和 FTPS 已禁用时)和 FtpsOnly
(仅 FTPS 时)。
使用 -FtpsState
参数运行 Set-AzWebApp 命令。
Set-AzWebApp -Name <app-name> -ResourceGroupName <group-name> -FtpsState FtpsOnly
--ftps-state
的可能值有 AllAllowed
(FTP 和 FTPS 已启用时)、Disabled
(FTP 和 FTPS 已禁用时)和 FtpsOnly
(仅 FTPS 时)。
所有官方支持的部署方法均会更改应用的 /home/site/wwwroot 文件夹中的文件。 这些文件用于运行你的应用。 因此,部署可能会因为锁定的文件而失败。 应用可能会在部署期间发生不可预测的行为,因为这些文件并非同时更新。 这种行为对于面向客户的应用来说是需要避免的。 可以通过几种方法避免这些问题:
若要排查 FTP 部署问题,第一步是厘清部署问题和运行时应用程序问题。
部署问题通常会导致无文件部署到应用,或者部署到应用的文件错误。 可以通过调查 FTP 部署情况,或者选择备用部署路径(例如源代码管理)来进行故障排除。
出现运行时应用程序问题时,通常部署到应用的文件集是正确的,但应用行为不正确。 可以通过重点查看运行时的代码行为,并调查具体的故障路径来进行故障排除。
若要确定问题是部署问题还是运行时问题,请参阅 Deployment vs. runtime issues(部署问题和运行时问题)。
我无法通过 FTP 来发布代码。 如何解决此问题?
检查是否输入了正确的主机名和凭据。 另请检查计算机上的以下 FTP 端口是否未被防火墙阻止:
- FTP 控制连接端口:21、990
- FTP 数据连接端口:989、10001-10300
如何在 Azure 应用服务中通过被动模式连接到 FTP?
Azure 应用服务支持通过“主动”模式和“被动”模式进行连接。 首选“被动”模式,因为部署计算机通常位于防火墙后面(不管是在操作系统中,还是在家庭网络或企业网络中)。 请参阅 WinSCP 文档中的示例。
为什么我的连接在尝试使用显式加密通过 FTPS 进行连接时失败?
FTPS 允许以“显式”或“隐式”方式建立 TLS 安全连接。
- 如果以隐式加密方式进行连接,则会通过端口 990 建立连接。
- 如果以显式加密方式进行连接,则会通过端口 21 建立连接。
使用的 URL 格式可能会影响连接的成功,这还取决于使用的客户端应用程序。 门户将 URL 显示为 ftps://
,但请注意:
- 如果你用来连接的 URL 以
ftp://
开头,则暗示连接位于端口 21 上。
- 如果它以
ftps://
开头,则暗示连接是隐式的并且位于端口 990 上。
务必不要混合使用这二者(例如尝试连接到 ftps://
并使用端口 21),因为即使你希望进行“显式”加密,它也将无法进行连接。 这是因为“显式”连接在 AUTH 方法之前作为普通 FTP 连接启动。
可以通过检查应用程序设置来确定应用是如何部署的。 如果应用是使用外部包 URL 部署的,则你在应用程序设置中应该会看到具有 URL 值的 WEBSITE_RUN_FROM_PACKAGE
设置。 或者,如果它是使用 zip deploy 部署的,则你应该会看到值为 1
的 WEBSITE_RUN_FROM_PACKAGE
设置。 如果应用是使用 Azure DevOps 部署的,则你在 Azure DevOps 门户中应该会看到部署历史记录。 如果使用的是 Azure Functions Core Tools,则你在 Azure 门户中应该会看到部署历史记录。