繁体   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