之前的許多經驗,都是把打包好的 package 佈署到 IIS 7 以上的版本。此中又依據權限,再分成管理員權限的佈署及非管理員權限的佈署方式。
這次,我被要求佈署到 IIS 6 上了。
IIS 6
我之前的態度,是一味地以「Windows Server 2003 大舊了,現在沒有人在用了」來推託一翻。雖然言之有理,但其是一大部份原因是:懶!
然而,債還是要還的。客戶出錢,我們做人家小的還是要出力,即使入不敷出。
IIS 6 與之後的 IIS 7有個根本上的不同,是IIS 7 對 metabase 的全面改版,並且 IIS 7 可支援非管理員來管理 IIS。在 Visual Studio 發行的結果,是對 Web Deploy 是再包裝過精簡後的工具,處理的對象是 IIS 7 的 metabase。對於 IIS 6,只能自行尋找文件。
如果直接使用 Visual Studio 所產出的 cmd 指令執行到 IIS 6,會出現如下的錯誤訊息。
使用 MSDeployAgentService
在同一個目錄中,可以找到 Visual Studio 為我們寫好的 readme 檔案,其實裡面已經寫的很清楚了,是可以使用這些工具部署到 IIS 6的。
The service URL can also be in the following format: http://<DestinationServer>/MSDeployAgentService This format requires administrative rights on the destination server, and it requires that Web Deploy Remote Service (MsDepSvc) be installed on the destination server. IIS 7 does not have to be installed on the destination server.
也就是說, 我們必須使用 http://serverName/MSDeployAgentService 使用管理員權限來進行部署。
改一下指令,如下
package.cmd /T /M:http://localhost/MSDeploymentService
結果不如人願,非常類似的錯誤訊息還是打擊了我一下。
解法
注意到了問題了嗎?另一個重點在於 Metabase 路徑,新舊版本不一樣。所以,我偷偷修改了SetParameters.xml,由原來的
<setParameter name="IIS Web Application Name" value="Default Web Site/myApp" />
改成
<setParameter name="IIS Web Application Name" value="/lm/w3svc/1/ROOT/myApp" />
再執行相同的指令
package.cmd /T /M:http://localhost/MSDeploymentService
就完成了我的需求了。
其實,如果是在本機的話,指定機器的 /M 指令也不用加了。只需要
package.cmd /T 即可
進階
由於使用了 MSDeploymentService,就必須使用管理員的權限。既然是管理員權限,在別台機器(只需要安裝 Web Deploy Tool)當然也可以下指令,不必遠端桌面登入到該伺服器。
package.cmd /Y /M:http://serverIpOrHostName/msdeployagentService /U:administrator /P:Password
PS: 對部署來說,這個權限要求實在大到不行,對於無限上綱的資訊安全管理說,就是很好發揮的題材。誰叫你還要用 Windows Server 2003 呢?
沒有留言:
張貼留言