Deployment

IIS7 - Web 部署工具 - SetParam/SetParamFile 設置 http 和 https 綁定 + 證書

  • June 5, 2017

我們目前正在使用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 值中指定多個綁定以及證書資訊,所以有人知道我將如何去做嗎?

非常感謝任何幫助。

好的,所以我走了這麼遠-我不會將其作為對問題的編輯發布,儘管這似乎在正確的軌道上,但可能有比我一直在努力的更好的方法. 圖我會讓民主來決定!

使用連結,我能夠找出應該與setParamFilemsdeploy 開關一起使用的 XML 文件的格式。過去,在安裝 Web 部署工具後,我還通過使用 IIS 中的嵌入式 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 的配置中(根據本文)。當 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,如果原件完全不同,我們可以參數化該站點可能需要的任意數量的單個綁定。

到目前為止,這有一個缺點-因此請讚賞任何替代答案-SSL配置從源電腦複製到程序包中-這意味著為了使實時站點上的SSL配置在部署時正確,登台電腦和實時伺服器必須使用完全相同的 SSL 證書。

如果暫存盒可以使用自簽名或內部證書進行完整性檢查,然後將真正的 SSL 證書應用於實際部署,那就太好了——再次,從 XML 文件參數化。

引用自:https://serverfault.com/questions/110661