簡體   English   中英

具有數據庫遷移的Azure Web App部署槽

[英]Azure Web App deployment slots with database migration

我目前正在運行帶有多個部署插槽的webApp(例如dev,staging,production)。 每個Slot都連接到一個數據庫(db_dev,db_staging,db_production)。 我想部署到臨時插槽,然后切換生產。 數據庫遷移如何適應這里?

我的意思是,如果我將具有db遷移的新構建部署到分段,則db_staging會更新。 如果我切換插槽怎么辦? 遷移是否應用於db_production? 停機時間怎么樣?

根據我的理解,只有URL被切換,所以在切換后,臨時插槽中的應用程序將指向db_production? 那沒有意義。

我可以部署到臨時插槽並指向db_production(使用遷移),但隨后數據庫將被更新,並且可能會破壞實時插槽中的應用程序。

不要在源代碼中對連接字符串進行硬編碼,而是將它們放在應用服務設置的連接字符串部分下,並將其作為環境變量進行訪問。 它不僅更安全,因為它允許您只為任何環境提供一個代碼,並通過將設置檢查為“插槽設置”,無論您是否交換,對於該插槽,配置保持固定。

在此輸入圖像描述

更多信息:

https://azure.microsoft.com/en-us/documentation/articles/web-sites-configure/

更新

對於數據庫更新(即,為了更新新應用程序版本的數據庫架構而需要運行的必需腳本),可以使用web.config的applicationInitialization部分。 通常用於預熱應用程序,但也適用於您的情況。

<system.webServer>  
  <applicationInitialization >  
    <add initializationPage="/init-script.php" hostName="xxxxxx.azurewebsites.net"/>  
  </applicationInitialization>  
<system.webServer> 

AppInit模塊將等到此代碼完成后再完成交換過程,這基本上允許應用程序的生產流量。 基本邏輯將檢查數據庫是否正在運行預期版本,如果不是,則將按順序執行某些其他邏輯。

我一直在思考這個問題,據我所知,唯一明智的過程如下:

  1. 停止Prelive stites
  2. 將實時DB克隆回新的臨時數據庫
  3. 運行腳本以確保數據安全(可以聯系真實用戶的明確信息等)
  4. 將staging slot粘連連接字符串更改為指向此數據庫
  5. 運行DBUP aganst staging DB(現在是live-ish的升級版本)
  6. 部署到臨時插槽
  7. 重新啟動prelive站點
  8. 測試升級直到滿意為止
  9. 備份實時數據庫
  10. 針對實時運行DBUP(如果它們是非破壞性更改,則站點可以保持運行狀態)
  11. 交換現場和前置插槽
  12. 現場檢查

如果您可以保持數據庫更新不中斷,那么回滾可以很簡單,就像交換插槽一樣。 如果沒有,您將回到熟悉的回滾腳本或恢復快照的痛苦中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM