首页 > 解决方案 > Azure 应用服务存在于子目录中时,如何设置其默认文档?

问题描述

我正在通过配置为在我的构建代理上执行 Azure App Service Deploy 任务的发布管道从 Azure DevOps 部署 Azure App Service。部署任务以我的应用服务的根目录为目标,因此它将部署在我的“\site\wwwroot\”文件夹中。

Azure DevOps 发布管道配置

我的项目是一个 Laravel PHP Web 应用程序,因此默认文档设置为“index.php”。我的应用程序被部署到“\site\wwwroot\”,但是我的“index.php”文件的位置设置为默认文档,但位于“\site\wwwroot\”中。

默认文档和虚拟应用程序目录的 Azure 应用服务应用程序设置

不是什么大问题,对吧?只需将应用程序目录设置为“\site\wwwroot\public”,该应用程序就可以运行,因为它现在可以找到我的默认文档 (index.php)。除了有一个问题。

当 Azure DevOps 部署到 Azure 应用服务时,它将部署到你在 Azure 中设置的应用程序目录。因为我的根现在设置为 '\site\wwwroot\public' 以更正查找默认文档的问题,AzureDevops 正在将后续构建部署到 '\site\wwwroot\public' 文件夹。

理想情况下,我想将我的 'index.php' 文件保留在我的 '\site\wwwroot\public' 文件夹中,因为当我将它移动到我的项目的根目录时它会导致问题。我似乎不知道如何告诉 Azure 在我的公用文件夹中查找默认文档。我是否需要编写一个 web.config 并将其放在我的项目根目录中以便 IIS 找到它?


更新:

我仍在尝试解决我遇到的这个问题。我无法配置 Azure 或 Azure DevOps 来区分我的应用程序部署到的目录和提供我的应用程序的目录。

我不能简单地创建两个虚拟应用程序,因为这会将我的根目录暴露给该端点。我需要能够简单地指示 Azure DevOps 将我的应用程序放在 Web 应用程序的哪个位置。

标签: laravelazureiisazure-devopsazure-pipelines

解决方案


您可以通过为您的 Azure 应用服务提供 Kudu 环境变量来指定从 Azure DevOps(或 Git、BitBucket 等)部署源代码的位置。请参阅在 Azure 门户的“应用程序设置”部分为我的 Azure 应用服务配置的以下环境变量。

为源代码管理路径配置的环境变量(SCM_REPOSITORY_PATH 和 SCM_TARGET_PATH Kudu 变量)

这使我可以指示代码的部署位置。否则,Kudu 的默认源代码管理路径似乎取自您的虚拟应用程序路径。

进一步阅读: https ://github.com/projectkudu/kudu/wiki/Deploying-inplace-and-without-repository


更新:

看来,虽然您能够使用 Kudu 环境变量配置代码部署的位置,但您仍然受限于虚拟应用程序的文件夹名称。

例如,如果我将 SCM_TARGET_PATH 设置为\home\sites\app,并且我有一个虚拟应用程序,其虚拟路径为/,物理路径为\home\sites\app\public,Azure DevOps 会将您的代码部署到\home\sites\app\public而不是预期的\home\sites\app.

这是一个巨大的不便,我无法托管我的 Laravel 应用程序,因为我的持续部署不会像 Azure 目前的工作方式那样工作。我将不得不将我的代码发布到 Docker 容器并改用它(我不想这样做)。


推荐阅读