如何构建代码以将2个Web应用程序部署到同一Azure应用程序服务 [英] How to structure code to have 2 web apps deployed to the same Azure App Service
问题描述
我正在启动一个新项目(我们称其为MyWebProject),该项目将具有
- MyWebProject:带有AspNet Core的前端应用,为带有Angular2的SPA提供服务
- MyWebProjectAPI:连接到数据库并公开REST风格API的AspNet核心后端应用
我的单个域www.mywebproject.com
链接到单个Azure应用服务mywebproject.azurewebsites.net
,并且我希望在同一个Azure应用下部署两个项目(前端和REST风格的API)。
如果我使用Web浏览器www.mywebproject.com
访问,我希望访问前端。我不介意RESTful API部署在哪里(我猜是在同一个App Service IIS下的虚拟目录中?)
我还计划进行持续部署,将更改推送到Git存储库中的主分支将触发新部署(理想情况下,两个部署都是单独配置的,但我不太介意)
问题是:
如何组织我的解决方案/项目,我应该遵循什么方法?
我正在考虑一个单一的解决方案,其中包含两个主项目(前端和后端)以及后端项目所需的库项目,因此我假设它们都必须位于同一个Git存储库中。这会有问题吗?或者将它们放在单独的Git存储库和单独的解决方案中会更好?(此选项也可以)
部署到相同的Azure应用程序服务时应该遵循什么方法?使用虚拟目录,因为它们都是Web项目(都有wwwroot
)?
另一种选择可以是针对RESTful API和前端的单个项目,其中一个控制器仅服务于SPA,而另一个控制器充当API资源。这当然会简化所有事情,但不知何故,我希望这两个项目都独立。
如有任何参考、文章或意见,我们将不胜感激。
推荐答案
我使用的一个应用程序有一个解决方案,其中包含两个不同的网络项目,它们都位于相同的域中,并且都使用持续部署进行部署。一切都很顺利。它的工作原理如下:
- 拥有一个Visual Studio解决方案
- 在该解决方案下有两个Web项目
- 在您的应用程序服务的Azure应用程序设置中,滚动到"虚拟应用程序和目录"下的底部,然后为MyWebProjectAPI设置一个虚拟目录。虚拟目录将是"/MyWebProjectAPI",物理路径将是"sitewwwrootMyWebProjectAPI"
- 在解决方案文件夹中创建部署.cmd以进行持续部署,就像正常一样
- 编辑部署.cmd以同时部署第二个Web项目。
您将找到第一个项目的行,如下所示:
call :ExecuteCmd "%MSBUILD_PATH%" "%DEPLOYMENT_SOURCE%MyWebProjectMyWebProject.csproj" /nologo /verbosity:m /t:Build /t:pipelinePreDeployCopyAllFilesToOneFolder /p:_PackageTempDir="%DEPLOYMENT_TEMP%";AutoParameterizationWebConfigConnectionStrings=false;Configuration=Release /p:SolutionDir="%DEPLOYMENT_SOURCE%.\"
IF !ERRORLEVEL! NEQ 0 goto error
复制并更新代码以将API项目构建到虚拟目录中(请注意,第一个路径以及PackageTempDir已更改):
call :ExecuteCmd "%MSBUILD_PATH%" "%DEPLOYMENT_SOURCE%MyWebProjectAPIMyWebProjectAPI.csproj" /nologo /verbosity:m /t:Build /t:pipelinePreDeployCopyAllFilesToOneFolder /p:_PackageTempDir="%DEPLOYMENT_TEMP%MyWebProjectAPI";AutoParameterizationWebConfigConnectionStrings=false;Configuration=Release /p:SolutionDir="%DEPLOYMENT_SOURCE%.\"
IF !ERRORLEVEL! NEQ 0 goto error
部署后,您的前端将位于www.mywebproject t.com,而API将位于www.mywebproject t.com/mywebproject api(当然,您可以重命名所有内容)。
这条路对吗?这是有利有弊的。在我们的例子中,我们需要这样做,因为第二个Web项目来自第三方,并且必须位于相同的域中。这是一个很大的好处--您可以避免任何可能的跨域问题。此外,您只需要担心一个DNS条目(包括SSL证书)和一个应用程序服务,就可以进行大量整合。
我可以说,让您的代码在两个应用程序中运行会更好,以获得更明显的监控和可伸缩性。你说你现在只想要一个App Service,所以无论哪种方式,你都无法获得扩展的能力。但如果您将两个项目设置为不同的应用程序,如果您需要扩展其中一个而不是另一个,则最终可以将它们移动到单独的应用程序服务。
如果您确实想要两个具有不同DNS条目的单独应用程序,您仍然可以只有一个解决方案文件。我没有这样做的确切示例,但您可能会让两个应用程序都监控该分支。因此,当你按下按钮时,两个应用程序都会开始构建。但是您需要在您的Azure应用程序设置中添加一个设置,说明应该构建哪个项目,并且您需要修改您的ploy.cmd文件以查找该参数来构建正确的项目。
这篇关于如何构建代码以将2个Web应用程序部署到同一Azure应用程序服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!