我们目前正在使用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:".
(分成多行以便于阅读!)
我运行了两次,两台机器的目标文件名和 IP 地址都不同。部署时,我只需将每个包同步到其各自的实时站点即可。
我知道,我知道 - 我应该能够通过生成一个参数化包,然后可能对两个服务器分别使用 SetParamFile 开关来做到这一点 - 相信我,我愿意这样做,但坦率地说,关于这样做的文档是不存在的。
现在我需要配置和部署HTTP 和 HTTPS该站点的绑定;还包括要使用的 SSL 证书。
我已经在暂存箱中为站点添加了 SSL 绑定 - 它使用开发证书(需要替换 - 或者暂存箱应该使用实时证书?),现在上述命令行可以替换 http 和 https 条目上的目标 IP。
看来我无法在上面的 -setParam 中的 DestinationBinding 值中指定多个绑定加上证书信息,所以有人知道我该怎么做吗?
非常感谢您的帮助。
答案1
好吧,我走到这一步了——我并不是把这篇文章作为对问题的编辑发表的,尽管这似乎是正确的方向,但可能还有比我一直在研究的更好的方法。我想我会让民主来决定!
使用这链接 我能够弄清楚应该与setParamFile
msdeploy 开关一起使用的 XML 文件的格式。过去,我还在安装 Web 部署工具后使用 IIS 中的嵌入式 GUI 弄清楚了 declaredParamFile 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=”属性值。这可确保替换正确的绑定。这是一个正则表达式(如这篇 Technet 文章) 选择要使用稍后传递的参数值进行更改的现有绑定值。
我们将其保存为declareparameters.xml
。
有了这个,我们现在可以从我们的暂存箱中生成一个参数化包,然后我们可以使用此命令行从中进行部署(这是为了“映像”我们的 SiteA 所在的整个 IIS):
msdeploy -verb:sync
-source:WebServer,computerName=localhost
-dest:package="parameterised.zip"
-declareParamFile:declareparameters.xml
如果网站位于不同的 Web 服务器上,请将“localhost”替换为该 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 Binding 的 IP,并且如果原始 IP 有足够的差异,我们可以参数化该站点可能需要的任意数量的单独绑定。
到目前为止,这有一个缺点 - 所以请接受任何其他答案 - SSL 配置从源机器复制到包中 - 这意味着为了使实时站点上的 SSL 配置在部署时正确,登台机器和实时服务器都必须使用完全相同的 SSL 证书。
如果暂存箱可以使用自签名或内部证书进行健全性检查,然后在实际部署中应用真正的 SSL 证书(再次从 XML 文件中参数化),那就太好了。
答案2
您可以通过添加 -replace 命令行开关来替换端口号
msdeploy -verb:同步 -source:WebServer,computerName=localhost -dest:package="machinename.zip" -replace:objectName=binding,targetAttributeName=bindingInformation,match=:443:,replace=:445: