如何构建代码以将2个Web应用程序部署到同一Azure应用程序服务 [英] How to structure code to have 2 web apps deployed to the same Azure App Service

查看:17
本文介绍了如何构建代码以将2个Web应用程序部署到同一Azure应用程序服务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在启动一个新项目(我们称其为MyWebProject),该项目将具有

  1. MyWebProject:带有AspNet Core的前端应用,为带有Angular2的SPA提供服务
  2. MyWebProjectAPI:连接到数据库并公开REST风格API的AspNet核心后端应用
它们之间没有依赖关系,因为MyWebProject仅通过http请求访问MyWebProjectAPI。所以我们可以说它们是独立的。

我的单个域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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆