IIS7 - Web 部署工具 - SetParam/SetParamFile 设置 http 和 https 绑定 + Cert

And*_*tan 8 deployment iis-7.5 msdeploy

我们目前正在使用MS Web 部署工具将实时网站和一些 Web 服务从暂存箱同步到两个实时服务器。

临时主机在端口 17000 上的任何 IP 上托管站点,而两个实时服务器是负载平衡的,并且每个服务器都有不同的 IP。

目前,我生成了两个单独的部署包 - 每台机器一个 - 使用同步操作并指定 DestinationBinding 参数如下:

msdeploy -verb:sync 
  -source:WebServer,computerName=localhost
  -dest:package="machinename.zip"
  -setParam:type="DestinationBinding",scope="SiteName",value="ip_address:port:".
Run Code Online (Sandbox Code Playgroud)

(拆分成多行以便于阅读!)

我运行了两次,两台机器的目标文件名和 IP 地址不同。在部署方面,我只是从每个包到其各自的实时站点进行同步。

我知道,我知道 - 我应该能够通过生成一个参数化包然后可能对两个服务器中的每一个使用 SetParamFile 开关来做到这一点 - 相信我,我想,但坦率地说,关于这样做的文档不是 -存在。

现在我需要为此站点配置和部署HTTP HTTPS绑定;还包括要使用的 ssl 证书。

我已经在登台框上为站点添加了 SSL 绑定 - 它使用开发证书(需要更换 - 或者登台盒是否应该使用实时证书?),现在上面的命令行有效果替换 http 和 https 条目上的目标 IP。

似乎我无法在上面的 -setParam 中的 DestinationBinding 值中指定多个绑定以及证书信息,所以有人知道我将如何执行此操作吗?

非常感谢任何帮助。

And*_*tan 7

好的,所以我走了这么远 - 我不会将此作为对问题的编辑发布,尽管这似乎是在正确的轨道上,但可能有比我一直在研究的更好的方法. 图我让民主决定!

使用链接,我能够找出应该与setParamFilemsdeploy 开关一起使用的 XML 文件的格式。过去,我还曾在安装 Web 部署工具后通过使用 IIS 中的嵌入式 GUI 确定了 declareParamFile XML 的格式。

因此,给定一个名为“SiteA”的站点,在 applicationHost.config 文件中有两个绑定条目,如下所示:

<bindings>
  <binding protocol="http" bindingInformation="*:80:" />
  <binding protocol="https" bindingInformation="*:443:" />
</bindings>
Run Code Online (Sandbox Code Playgroud)

(具体而言,这意味着 - 端口 80 上的任何 IP 地址和端口 443 上的任何 IP 地址)

实际使用的证书并未存储在 applicationHost.Config 中,而是存储在 Http.sys 的配置中(根据本文)。当 msdeploy 为站点准备一个包时,它会嵌入该信息 - 正如我在最后提到的那样,这可能不是一件好事。

第一步是声明一个参数 xml 文件,我们将使用该文件为目标实时服务器参数化单个包:

<parameters>
  <!-- declare parameter for Http Binding -->
  <parameter name="SiteA-http" description="SiteA Http Binding">
    <parameterEntry kind="DestinationBinding" scope="SiteA" match=":80:" />
  </parameter>
  <!-- declare parameter for Https Binding -->
  <parameter name="SiteA-https" description="SiteA Https Binding">
    <parameterEntry kind="DestinationBinding" scope="SiteA" match=":443:" />
  </parameter>
</parameters>
Run Code Online (Sandbox Code Playgroud)

请注意两个内部参数条目上的 'match=' 属性值。这可确保替换正确的绑定。这是一个正则表达式(如本技术文章中所述),它选择要使用稍后传递的参数值更改的现有绑定值。

我们将其另存为declareparameters.xml.

有了这个,我们现在可以从我们的临时框生成一个参数化的包,然后我们可以从中部署,使用这个命令行(这是为了“映像”我们的 SiteA 所在的整个 IIS):

msdeploy -verb:sync 
  -source:WebServer,computerName=localhost
  -dest:package="parameterised.zip"
  -declareParamFile:declareparameters.xml
Run Code Online (Sandbox Code Playgroud)

如果该网站位于不同的 Web 服务器上,请将“localhost”替换为该 Web 服务器的名称。Web Deploy Agent 服务必须在目标机器上运行才能使其工作。

现在,我们声明一个参数 xml 文件,该文件将为部署到实时服务器实际提供参数值:

<parameters>
  <setParameter name="SiteA-http" value="[fixedIPAddress]:80:"/>
  <setParameter name="SiteA-https" value="[fixedIPAddress]:443:"/>
</parameters>
Run Code Online (Sandbox Code Playgroud)

我们将其另存为

[targetServerName]parameters.xml
Run Code Online (Sandbox Code Playgroud)

(在我的例子中,我有两个目标服务器,所以每个服务器都有自己的参数 xml,具有不同的文件名,并且每个服务器的 IP 略有不同)。

最后,我们可以使用以下命令行对目标服务器执行参数化部署:

msdeploy -verb:sync 
  -source:package="parameterised.zip"
  -dest:WebServer,computerName="[targetServerName]"
  -setParamFile=[targetServerName]parameters.xml
Run Code Online (Sandbox Code Playgroud)

因此,现在我们可以更改 Http 或 Https 绑定的 IP,如果原始绑定足够不同,我们可以参数化该站点可能需要的任意数量的单个绑定。

到目前为止,这有一个缺点 - 所以任何替代答案都值得赞赏 - SSL 配置从源机器复制到包中 - 这意味着为了使实时站点上的 SSL 配置在部署时正确,临时机器和实时服务器必须使用完全相同的 SSL 证书。

如果暂存箱可以使用自签名或内部证书进行健全性检查,然后将真正的 SSL 证书应用于实际部署 - 再次从 XML 文件参数化,那将会很棒。