2016-09-24 52 views
2

2個web應用程序,我開始一個新項目(我們稱之爲MyWebProject),這將有如何構建代碼有部署到同一個Azure的應用服務

  1. MyWebProject:前端應用程序與ASPNET核心服SPA與Angular2
  2. MyWebProjectAPI:與ASPNET核心後端應用程序連接到一個數據庫和暴露的RESTful API

他們沒有間depende因爲MyWebProject只通過http請求訪問MyWebProjectAPI。所以我們可以說他們是獨立的。

我有一個單一的域www.mywebproject.com鏈接到一個單一的Azure應用服務mywebproject.azurewebsites.net,我想同時在同一個Azure應用下部署兩個項目(前端和RESTful API)。

如果我使用Web瀏覽器訪問www.mywebproject.com我想訪問前端。我不介意在哪裏部署RESTful API(我在同一個應用程序服務IIS下的虛擬目錄中猜測)

我還計劃持續部署將更改推送到Git中的主分支庫會引發新的部署(理想情況下都部署單獨配置,但我不介意多)

的問題是:

如何構建我的解決方案/項目,我應該遵循什麼樣的方法呢?

enter image description here

我正在考慮與後端項目所需要的兩個主要項目(前端和後端)加庫項目一個單一的解決方案,因此我假設他們都將有要在同一個Git倉庫中?這會是一個問題嗎?還是將它們放在單獨的Git存儲庫和單獨的解決方案中更好? (這個選項也可以)

當部署到相同的Azure應用服務時,會遵循什麼方法?要使用虛擬目錄,因爲它們都是Web項目(都有wwwroot)?

另一個選項可以是RESTful API和前端的單個項目,其中一個控制器只是簡單地爲SPA服務,其他控制器則充當API資源。這肯定會簡化一切,但不知何故,我想讓這兩個項目都是獨立的。

任何參考,文章或意見將不勝感激。

回答

2

我與一個應用程序一起工作,我們有一個解決方案,即兩個不同的Web項目,它們都位於同一個域,並且都使用連續部署進行部署。它運作良好。下面是它如何工作的:

  • 有一個Visual Studio解決方案
  • 在這個解決方案有兩個Web項目
  • 在你的應用程序服務中的Azure應用程序設置,「虛擬應用程序下滾動至底部,目錄「併爲MyWebProjectAPI設置一個虛擬目錄。虛擬目錄將是「/ MyWebProjectAPI」和物理路徑將是「網站\ wwwroot的\ MyWebProjectAPI」
  • 創建的解決方案文件夾做持續部署的deploy.cmd,就像正常
  • 編輯deploy.cmd到還部署第二個Web項目。

你會發現,看起來像第一個項目一個行:

call :ExecuteCmd "%MSBUILD_PATH%" "%DEPLOYMENT_SOURCE%\MyWebProject\MyWebProject.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%\MyWebProjectAPI\MyWebProjectAPI.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.com和API將在www.mywebproject.com/mywebprojectapi(當然你可以重命名的所有內容)。

這是正確的路嗎?有優點和缺點。在我們的情況下,我們需要這樣做,因爲第二個Web項目來自第三方並且必須位於同一個域中。這是一個很大的職業 - 你可以避免任何可能的跨域問題。此外,只有一個DNS條目需要擔心(包括SSL證書)並且只有一個App Service需要關注,因此您需要進行大量整合。

但我可以爭辯說,讓代碼運行在兩個應用程序中以獲得更獨特的監視和可伸縮性會更好。你說你現在只需要一個App服務,所以無論如何你都無法擴展。但是,如果您將兩個項目設置爲不同的應用程序,那麼如果您需要縮放一個而不是另一個,最終可以將它們移動到單獨的App Services。

如果您確實想要兩個具有不同DNS條目的獨立應用程序,則仍然只能有一個解決方案文件。我沒有一個確切的例子,但你會有兩個應用程序監視該分支。因此,當您推送時,構建會在兩個應用程序中啓動。但是,您可以在Azure應用程序設置中添加一個設置,說明應該構建哪個項目,並且您將修改deploy.cmd文件以查找此參數以構建正確的參數。

相關問題