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


8

我们目前正在使用MS Web部署工具将实时网站和某些Web服务从登台盒同步到两个实时服务器。

暂存盒将站点托管在端口17000上的任何IP上,而两个活动服务器是负载平衡的,并且每个服务器都具有不同的IP。

目前,我使用sync操作并按如下所示指定DestinationBinding参数,生成了两个用于部署的独立程序包-每台计算机一个。

msdeploy -verb:sync 
  -source:WebServer,computerName=localhost
  -dest:package="machinename.zip"
  -setParam:type="DestinationBinding",scope="SiteName",value="ip_address:port:".

(分成多行以使其更易于阅读!)

我运行了两次,为两台机器中的每台机器使用了不同的目标文件名和IP地址。关于部署,我只需将每个程序包同步到其各自的实时站点。

我知道,我知道-我应该能够通过生成一个参数化的程序包,然后为两个服务器中的每一个使用SetParamFile开关来做到这一点-相信我,但是坦率地说,有关此操作的文档存在。

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

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

看来我无法在上面的-setParam的DestinationBinding值中指定多个绑定以及证书信息,所以有人知道我将如何去做吗?

任何帮助,不胜感激。


1
也许您应该将msdeply添加为标签。可能还会跳转到stackoverflow.com,因为有许多msdeploy
MikeJ 2010年

现在有一个好点子:)
Andras Zoltan 2010年

是的-我确实首先想到了StackOverflow;指出与开发人员相比,较低级别的msdeploy操作更可能用于技术支持/管理员。如果我在这里没有得到任何帮助,那么也许我会取消这个问题,然后按照您的建议张贴在那儿。总是可以说我是开发人员,而不是分析师,如果我需要知道这一点,那么其他开发人员也可能会这样做!
Andras Zoltan'2

Answers:


7

好吧,我已经走了很远-我不打算将此内容发布为问题的编辑,以免偶然发现尽管这似乎是在正确的轨道上,但可能有比我正在研究的方法更好的方法。图我让民主来决定!

使用链接,我能够弄清楚应该与setParamFilemsdeploy 的开关一起使用的XML文件的格式。过去,我还将在安装Web部署工具后通过使用IIS中的嵌入式GUI来确定clarifyParamFile XML的格式。

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

<bindings>
  <binding protocol="http" bindingInformation="*:80:" />
  <binding protocol="https" bindingInformation="*:443:" />
</bindings>

(具体来说,这意味着-端口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>

注意两个内部参数条目上的“ match =”属性值。这样可以确保替换正确的绑定。这是一个Regex(如本technet文章中所述),它选择将要用即将传递的参数值更改的现有绑定值。

我们将此另存为declareparameters.xml

完成此操作后,我们现在可以从暂存框中生成一个参数化的程序包,然后可以使用以下命令行从中进行部署(这是“映像”其中包含我们的SiteA的整个IIS):

msdeploy -verb:sync 
  -source:WebServer,computerName=localhost
  -dest:package="parameterised.zip"
  -declareParamFile:declareparameters.xml

如果网站位于其他Web服务器上,则用该Web服务器的名称替换“ localhost”。Web Deploy代理服务必须在目标计算机上运行才能正常工作。

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

<parameters>
  <setParameter name="SiteA-http" value="[fixedIPAddress]:80:"/>
  <setParameter name="SiteA-https" value="[fixedIPAddress]:443:"/>
</parameters>

我们将其另存为

[targetServerName]parameters.xml

(在我的情况下,我有两个目标服务器,因此每个服务器都有自己的参数xml,文件名不同,每个IP略有不同)。

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

msdeploy -verb:sync 
  -source:package="parameterised.zip"
  -dest:WebServer,computerName="[targetServerName]"
  -setParamFile=[targetServerName]parameters.xml

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

到目前为止,它有一个缺点-因此,请提供任何其他答案-将SSL配置从源计算机复制到软件包中-这意味着为了使实时站点上的SSL配置在部署时正确,登台计算机和实时服务器必须使用完全相同的SSL证书。

最好的是,登台框可以使用自签名或内部证书进行完整性检查,然后将实际的SSL证书应用于实际部署-再次从XML文件进行参数设置。


这似乎是msdeploy工具的局限性-唯一的解决方案是编写一个可以执行msdeploy的附加iis脚本。该脚本将使用SSL证书内容包装其他绑定。这真是令人难以置信的耻辱。
安德拉斯·佐坦

0

您可以通过添加-replace命令行开关来替换端口号

msdeploy -verb:sync -source:WebServer,computerName = localhost -dest:package =“ machinename.zip” -replace:objectName = binding,targetAttributeName = bindingInformation,match =:443:,replace =:445:

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.