Azure WEBSITE_RUN_FROM_PACKAGE真的意味着不要解压缩 zip 存档吗?



我正在通过GitHub工作流将。net框架web应用程序压缩部署到Azure应用程序服务。

我在Azure控制台的Settings / Configuration / Application settings页面中将WEBSITE_RUN_FROM_PACKAGE设置为1。我还尝试将WEBSITE_RUN_FROM_ZIP设置为1,以防万一(尽管我认为这是一个过时的标志)。

该包在GitHub中正确构建,我可以看到它出现在我的Kudu调试控制台上,在C:homesitewwwroot(如MyPackageName.zip)以及C:homedataSitePackages(如20220512205318.zip)。

YAML的部署部分是:

deploy:
runs-on: windows-latest
needs: build
environment:
name: 'Test'
url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}
steps:
- name: Download artifact from build job
uses: actions/download-artifact@v2
with:
name: ASP-app
- name: Deploy to Azure Web App
id: deploy-to-webapp
uses: azure/webapps-deploy@v2
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_XYZsecret }}
package: .

和。publishsettings我上传到GitHub看起来像:

<publishData>
<!-- Which one of these 3 profiles is my YAML using?  I don't actually know. -->
<publishProfile profileName="mywebappname-test - Web Deploy" publishMethod="MSDeploy"  etc="foobar">
<databases/>
</publishProfile>
<publishProfile profileName="mywebappname-test - FTP" publishMethod="FTP" etc="foobar">
<databases/>
</publishProfile>
<publishProfile profileName="mywebappname-test - Zip Deploy" publishMethod="ZipDeploy" etc="foobar">
<databases/>
</publishProfile>
</publishData>

zip包是而不是被自动解压缩。与我交谈过的微软支持代表建议这就是问题所在,当我将软件包下载到我的机器并将其放入Kudu的Tools/Zip Push Deploy页面时,我看到软件包被解包,并且我可以通过设置适当的物理路径来匹配'/'虚拟路径来使站点工作。特别是Kudu Tools Zip Push使我的网页。Config和favicon.ico等文件显示在:

C:homesitewwwrootContentD_CafoobargoodboyobjTestPackagePackageTmp

,我可以转到Azure控制台为我的应用程序服务,导航到Settings / Configuration/ Path Mappings, Virtual applications and directories,并编辑现有的条目:

Virtual path: /
Physical Path: sitewwwrootContentD_CafoobargoodboyobjTestPackagePackageTmp
Type: Application

然后看到我的网站出现在浏览器中

然而,当做任何事情来解包存档时,我将条目保留为:

Virtual path: /
Physical Path: sitewwwroot
Type: Application

我无法在浏览器中看到我的网站,而只能看到"您没有权限查看此目录或页面。"当我挖掘工藤的日志时,我在我的主站上看到了403.14 -禁止错误,在C:homesitewwwrootfavicon.ico上看到了404.0 -未发现错误。(像我的其他文件一样,favicon.ico仍然在[...]foobargoodboyobjTestPackagePackageTmpfavicon.ico的zip存档中。)

我的问题是:

  1. 我的web应用程序应该能够运行,只是我的zip文件坐在那里作为C:homesitewwwrootMyPackageName.zip?,或者它真的需要像微软代表指出的那样解包吗?
  2. 如果它应该以这种方式运行,我错过了什么想法?我认为这是我的YAML中的东西(3个publishProfile设置中哪一个是在这里实际选择的?)或Settings / Configuration/ Path MappingsApplication settings,但我不知道在这一点上是什么,我已经没有想法了。

谢谢,Eric

  1. 我的web应用程序应该能够运行在所有只是我的zip文件坐在那里作为C:homesitewwwroot mypackame .zip?

差不多,是的,只是不在wwwroot中。当启用WEBSITE_RUN_FROM_PACKAGE时,应用程序将作为只读目录挂载直接从存档运行。没有任何内容被复制到wwwwroot或其他任何地方。

  1. 如果它应该以这种方式运行,我错过了什么想法?

我的理解是不支持从GitHub部署包,或者更确切地说,GitHub存档与在App Service上运行包不兼容。

dwellman的回答是对我最初问题的正确答案,但我将在这里添加更多细节,说明如何使用这些信息使部署正常工作。我觉得无法读取zip存档的内部索引XML文件以找到正确的相对路径是Azure的一个缺陷,但在解决这个问题之前,我希望其他人会觉得这很有用。

我的第一步是放弃作为zip文件部署的想法。我可能仍然可以通过一些后期处理,以不同的格式压缩内容,而不使用嵌套文件夹,但在我的情况下,我认为单文件部署的好处不值得付出代价。为了停止作为zip文件部署,我手动编辑了作为msbuild选项/p:PublishProfile=AzureCI.pubxml传入的.pubxml文件。我所做的更改是将PackageAsSingleFile从true更改为false,并将DesktopBuildPackageLocation从zip文件路径更改为文件夹路径。

仅这一点就足以让我的站点作为单独的文件而不是zip存档部署到Azure。这些文件仍然隐藏在一个丑陋的文件夹结构中,但我至少可以在Kudu中看到它们,并通过应用我在原始问题中描述的相同的Settings / Configuration/ Path Mappings, Virtual applications and directories调整使网站正常工作。

我本可以停在那里,但我希望能够只使用默认的虚拟路径,而不是让我的Azure配置如此依赖于我的上游进程。换句话说,我只想要我的网。config和favicon.ico等直接放在C:homesitewwwroot中,而不是在子文件夹结构的杂草中。为了做到这一点,我将package参数更改为webapps-deploy。到适当的路径,如下所示:

- name: Deploy to Azure Web App
id: deploy-to-webapp
uses: azure/webapps-deploy@v2
with:
app-name: ${{ env.AZURE_WEBAPP_NAME }}
publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_XYZsecret }}
package: .ArchiveContentD_CafoobargoodboyobjTestPackagePackageTmp

这导致部署过程只从构建中挑选出我需要的文件,并将它们放入C:homesitewwwroot。然后我就可以恢复路径映射组合,继续我的工作了。

相关内容

  • 没有找到相关文章