我们目前正在使用MS Web部署工具将一个活动网站和一些WebServices从一个临时文件夹同步到两个活动服务器。
暂存箱在17000端口上承载任何IP上的站点,而两台现场服务器是负载平衡的,并且每个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开关 – 相信我,我想,但是这样做的文档是坦率地非 – 存在。
现在我需要为这个站点configuration和部署HTTP 和 HTTPS绑定; 包括也将被使用的SSL证书。
我已经在临时框中为站点添加了一个SSL绑定 – 它使用了一个开发证书(这需要被replace – 或者应该使用现场证书吗?),现在上面的命令行起作用了在http和https条目上replace目标IP。
看来我不能在上面的-setParam的DestinationBinding值中指定多个绑定加上证书信息,所以任何人都知道我将如何去做这件事?
任何帮助不胜感激。
好,所以我得到了这么多 – 我不把这个作为对这个问题的修改,尽pipe这看起来是在正确的轨道上,可能有比我一直在努力的更好的方式。 图我会让民主决定!
使用这个链接,我能够找出应该与msdeploy的setParamFile开关一起使用的XML文件的格式。 过去,在安装Web部署工具之后,我还通过在IIS内部使用embedded式GUI来计算出declareParamFile XML的格式。
因此,给定一个名为“SiteA”的站点,在applicationHost.config文件中有两个绑定条目,如下所示:
<bindings> <binding protocol="http" bindingInformation="*:80:" /> <binding protocol="https" bindingInformation="*:443:" /> </bindings>
(这意味着,特别是 – 端口80上的任何IP地址和端口443上的任何IP地址)
正在使用的实际证书不存储在applicationHost.Config中,而是存储在Http.sys(根据本文 )的configuration中。 当msdeploy为网站准备一个包时,它会embedded这些信息 – 这可能不是我最后提到的祝福。
第一步是声明一个参数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 =”属性值。 这确保了正确的绑定被replace。 这是一个正则expression式(正如本文中所描述的那样),用来select现有的绑定值,这些绑定值将在稍后传递的参数值中进行更改。
我们将其保存为declareparameters.xml 。
有了这个,我们现在可以使用这个命令行(这是为了映射我们的SiteA所在的整个IIS)从我们的staging box中生成一个参数化的包,然后我们可以使用这个包进行部署:
msdeploy -verb:sync -source:WebServer,computerName=localhost -dest:package="parameterised.zip" -declareParamFile:declareparameters.xml
如果网站位于不同的Web服务器上,请将“localhost”replace为该Web服务器的名称。 Web部署代理服务必须在目标计算机上运行才能正常工作。
现在,我们声明一个参数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,如果原始数据足够不同,我们可以参数化该站点可能需要的任意数量的单个绑定。
这有一个缺点 – 所以任何替代的答案都要赞赏 – 将SSLconfiguration从源计算机复制到包中 – 这意味着为了使活动站点上的SSLconfiguration在部署时正确,分段计算机和在线服务器必须使用完全相同的SSL证书。
如果临时文件夹可以使用自签名或内部证书进行完整性检查,然后将真正的SSL证书应用于实际部署(再次通过XML文件进行参数化),那么最好的做法是。
您可以通过添加-replace命令行开关来replace端口号
msdeploy -verb:sync -source:WebServer,computerName = localhost -dest:package =“machinename.zip”-replace:objectName = binding,targetAttributeName = bindingInformation,match =:443:,replace =:445: