又一個佛心來的工具 Web Deployment Tools,這套工具除了提供基本的 GUI 介面可供站台匯入、匯出外 (如下圖),還提供指令列工具 ( MSDeploy.exe ) 可供 Web Farm 站台間檔案自動同步,可有效簡化多台 IIS 主機站台檔案更新與同步的問題,這對我們在 Web Farm 環境的部署非常實用。不僅僅支援 IIS 7,Web Deployment Tools 還支援 IIS 6 站台的同步,有興趣的人可以試試看。
安裝 Web Deployment Tools 擴充套件 ( 透過 Web Platform Installer 2.0 )
預設 msdeploy.exe 所在路徑為:C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe
啟動 Web Deployment Tool 的遠端代理程式服務 ( 為了執行站台同步功能 )
備註: 若要定時同步站台,記得將該服務啟動類型調整為「自動」。
測試 Web Deployment Tool 遠端代理程式服務是否正常啟用,可直接連到以下網址測試即可
http://localhost/MSDEPLOYAGENTSERVICE/
服務尚未啟用會回傳 HTTP Error 503. The service is unavailable. 的錯誤畫面 (如下圖)
如果服務已啟用則會回應 HTTP 500. 但畫面會是一片空白 (如下圖)
如果你用 Fiddler 查看 HTTP Response Header 的話,會看到如下的內容,其中就有幾行是 MSDeploy 開頭的 Header,這就代表你的服務已經安裝起來了:
HTTP/1.1 500 InternalServerError
Transfer-Encoding: chunked
Server: Microsoft-HTTPAPI/2.0
MSDeploy.Response: v1
MSDeploy.ExceptionTimeStamp: 5245631824043805581
MSDeploy.Exception: H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/Sv.....
Date: Mon, 23 Nov 2009 13:42:41 GMT
0
由於 Web Deployment Tool 的 遠端代理程式服務 預設是透過 IIS 提供服務遠端叫用,而預設路徑就是 /MSDEPLOYAGENTSERVICE/,如需修改請參考 Installing the Web Deployment Tool 的說明。
自動同步兩台 IIS 7 的站台內容
透過 Web Deployment Tool 同步多台主機的網站有 4 種方式:
- Push ( 將本機的站台同步至遠端主機站台;將本機網站的檔案與設定推到遠端主機更新 )
- Pull ( 將遠端的站台同步至本機站台;將遠端網站的檔案與設定從遠端拉回來更新 )
- Independent Sync ( 遙控遠端的電腦執行站台同步至另一台遠端電腦 )
- Manual Local Sync ( 先將本機站台備份,然後手動將備份檔移至另一台主機,在執行還原程序 )
我的測試環境
- 來源端電腦:192.168.2.63
- 目的端電腦:192.168.2.64
步驟一:檢視站台相依性
1. 執行以下指令查詢站台的相依性,你必須確保遠端的站台也有跟本機站台一樣的相依設定才能執行同步
msdeploy -verb:getDependencies -source:apphostconfig="Default Web Site"
其中 Default Web Site 為站台的名稱,如下圖示的回應結果中,其中有個相依設定就是 DefaultAppPool 這個應用程式集區是在使用中的,這也代表需同步過去的目的主機的 IIS 上也必須要有同名的應用程式集區才行,如果有其他相依的設定,也必須一起設定好才行。
步驟二:設定目的端電腦
依據步驟一查出的設定,將目的端電腦先設定完成。
步驟三:同步你的站台至目的端電腦
1. 先備份你的 IIS 設定
%windir%\system32\inetsrv\appcmd add backup "PreMsDeployBackup"
2. 安裝遠端代理程式服務 ( 預設透過 Web PI 2.0 會自動安裝 )
3. 啟動遠端代理程式服務 ( 如果你打算用 Push 模式做站台同步,你必須在目的端電腦啟動該服務 )
4. 測試同步命令是否能正常執行
Push 同步模式:在「來源端」執行以下指令 ( 備註: 以下指令為一行,輸入時請不要斷行 )
msdeploy -verb:sync -source:apphostconfig="Default Web Site"
-dest:apphostconfig="Default Web Site",computername=192.168.2.64 –whatif
如果成功執行,畫面會顯示變更的摘要資訊(但並沒有真正執行同步動作,因為 -whatif 參數)
Pull 同步模式:在「目的端」執行以下指令 ( 備註: 以下指令為一行,輸入時請不要斷行 )
msdeploy -verb:sync -source:apphostconfig="Default Web Site",computername=192.168.2.63
-dest:apphostconfig="Default Web Site" -whatif
5. 如果上一步驟都測試無誤,即可重新執行一次指令,只要將 -whatif 參數拿掉即可。
如果因為防火牆問題無法執行遠端連線同步,也可用 Manual Local Sync 方式先將站台匯出:
msdeploy -verb:sync -source:apphostconfig="Default Web Site" -dest:archivedir=c:\site1archive
然後將 c:\site1archive 整個目錄複製到目的端
然後一樣先驗證同步作業是否會成功 ( 備註: 以下指令為一行,輸入時請不要斷行 )
msdeploy -verb:sync -source:archivedir=c:\site1archive
-dest:apphostconfig="Default Web Site" -whatif
若沒問題,則移除 -whatif 參數執行同步作業
msdeploy -verb:sync -source:archivedir=c:\site1archive -dest:apphostconfig="Default Web Site"
相關連結