使用门户更改 Azure 应用程序设置而无需重新启动

Change an Azure App Setting using the portal without a restart

我有时会这样:

在 Azure 门户中,我转到 "App Services",然后单击我的 Web 应用程序,然后转到 "Application Settings"。

我在这里更改了 "App Settings" 列表中的一个值:

例如。我将“128”更改为“129”

最后我点击了"Save"。

这会导致我的网络应用程序重新启动。我不要那个。

问:有没有办法在不重启的情况下手动修改这个值?如果不是,我应该以另一种方式存储这个值吗?也许在 web.config 中使用我每次都可以上传的新部分?

如果我使用新的部分,例如:

<moreAppSettings configSource="moreSettings.config">
</moreAppSettings>

而这个moreSettings.config是这样的:

<?xml version="1.0" encoding="utf-8"?>
<moreSettings>
   <add key="ClientAppBuild" value="129" />
</moreSettings>

我可以在不重新启动的情况下上传并覆盖单个 .config 文件吗?

如果您所追求的只是一个可以在运行时修改的键值存储,为什么不使用专门为此设计的东西,例如 Table Storage or Redis Cache

如果您只是想存储您的内部版本号,只需在您的项目中部署一个静态 VERSION 文件(未通过源代码管理跟踪)并在构建时增加内部版本号。您需要将此文件保留在 wwwroot 之外(在 d:\home\site\somethingElse 之下),这样下一次部署就不会清理它。

如果您将源代码控制连接到 Kudu 以进行持续集成,您可以获得 current/active commit id(如果您不这样做,它也代表您最新构建的提交t roll back) 和其他一些有趣的事情通过调用 Kudu 的 /api/deployments:

http is like curl but different

$ http https://SiteUsername:SitePassword@sitename.scm.azurewebsites.net/api/deployments

HTTP/1.1 200 OK
Content-Type: application/json; charset=utf-8
...
{
    "active": true,
    "author": "snobu",
    "deployer": "GitHub",
    "end_time": "2017-03-29T08:47:08.954981Z",
    "id": "5ada48724129c78b8a993b4a25f2144aec03cbd2",
    "message": "Changed bootstrap theme to Flatly",
    ...

更多信息 API 在这里 - https://github.com/projectkudu/kudu/wiki/REST-API#deployment

这比人为的内部版本号更有意义。您可以安全地将 site-level credentials 存储为应用程序设置并构建 /api/deployments URL 而无需硬编码秘密。

通过 Azure 门户编辑应用程序设置与编辑 web.config 文件相同。因此,这将导致托管您的 Web 应用程序的 IIS 应用程序池重新启动。这在 Azure App Service 中的工作方式与在任何 Windows 服务器上的 IIS 中的工作方式完全相同。

如果您不想在更新特定设置时重新启动应用程序池,则需要将它们存储在其他地方。如果您要存储一个简单的 Key/Value 对,那么您可以将其存储在 JSON 或 XML 文件中,随应用一起部署,或者您可以使用 Key/Value 存储服务例如 Azure 存储表或 Redis 缓存。您也可以将 Key/Value 对存储在您的应用程序数据库中。无论将它存储在哪里,您都可能希望实现某种缓存,这样您就不必在每次访问时都从存储中读取值。

我能想到的另一个解决方案是有 2 个部署槽,说:

  • 制作
  • 前期制作

预生产是与生产配置相似的插槽,以实现零停机时间。

所以一步一步是:

  1. 将新配置添加到预生产中
  2. 等待预制作恢复
  3. 将 100% 的流量从生产路由到预生产

对生产重复步骤 1 和 2,然后将流量反向返回生产。