2014年8月7日

ASP.NET MVC - 使用Web Deploy佈署MVC應用程式到IIS

是的!!,大家沒看錯,這篇文章就是要寫很基本到基本不行的基本功;那為啥要寫這篇呢?因為小弟最近都佈署到Azure…久久才佈署一次到IIS上,但每次都會遇到一些小問題(翻),所以為了一勞永逸,就直接把步驟記錄下了來= =…( 不然每次都會忘記東一點,忘記西一點 )

既然如此,我們就開始吧!!首先,我們要先安裝IIS (廢話…)。

image

然後功能這邊,要勾選ASP.NET 4.5!!,因為MVC 5都是拆開成一個又一個的DLL了,所以如果要佈署MVC 5,就直接勾選ASP.NET 4.5就可以了,不用再特別安裝獨立的MVC Package。

image

因為我們會使用Web Deploy佈署,所以要把Management Service勾起來。

image

另外,我們也要在Application Development裡面勾選ASP.NET 4.5,通常勾ASP.NET 4.5,那.NET Extensibility 4.5、ISAPI Extensions、ISAPI Filters都會自動勾起來,另外,如果有使用到SignalR,那要把WebSocket Protocol勾起來喔~當然,其他的Windows驗證等等之類的,就看各位看官的需求了,這邊畢竟是針對Web Deploy和標準的MVC,有需要的朋友,就自行勾選吧。

image

接下來要使用Web Platform來進行安裝Web Deploy,如果是新安裝的OS,進入IIS的時候,他就會問你要不要裝了,然後就會進入Web Platform的官網,這時選擇下載,並且安裝就可以。( p.s 如果IE的安全性沒關掉,不能下載喔…別忘了Win Server的IE預設會開安全性 ),或是進入IIS後,選擇下圖的按鈕也是可以。

image

這邊要裝Web Deploy 3.5、Web Deploy 3.5 without bundled SQL support、Web Deploy 3.5 for Hosting Servers三個套件,除此之外,你也可以直接到Web Deploy的官網下載msi檔案來安裝,我們這邊就先用Web Platform來安裝。( 也有很多文章,是建議直接裝"Recommended Server Configuration For Web Hosting Providers",但那裏面包含了PHP、MySQL等等東西,還要自己取消勾選,所以小弟是直接安裝Web Deploy啦~ )

image

完成後,重新開啟IIS管理介面,就可以看到如下圖位置,多了很多管理的東西~

image

接下來,我們要設定使用權限,通常我們不會使用administrator的權限來進行Deploy,所以在進行下圖這個步驟之前,請自行先去新增一個帳號;新增完畢後,就可以透過下圖的位置,來設定權限。

image

這邊,我們使用skychang這個帳號,到時候在vs裡面,也是用這個帳號進行佈署。

image

接下來,我們要進入到下圖的位置,打開遠端佈署的功能。

image

要Enable,必須先停止後,才能勾選Enable,勾選完後,再啟動就可以了。

image

接下來,我們要設定佈署的相關資訊,簡單的說,就是設定skychang擁有web目錄下的權限。(這樣才能塞網頁上去嘛~ )

image

這邊我們選則剛剛設定的帳號,然後按下setup,就會開始設定目錄的權限了~

image

到這邊,其實還沒結束,也別忘記要把port 8172打開。

image

另外,我們也順便從啟動服務這邊,看看Web Deployment Agent Service、Web Management Service啟動了沒。

image

都完成之後,就回到Visual Studio裡面,設定發行;通常伺服器,用ip比較方便,他會自己去尋找Web Deploy的位置;網站名稱如果有需要,可以在Default Web Site後面再加上Application Name,例如Default Web Site\MyApp;目的地URL,就是你佈署完之後,你這邊會用瀏覽器打開的URL。

image

正常情況下,驗證連線就可以通過了,但今天不知道為啥,遇到了404錯誤,通常遇到這個錯誤,是因為Web Deploy沒有啟動監聽處理,也就是說Web Deploy的安裝沒安裝好,所以我們可以進Web Deploy的網站下,下載安裝檔;記住,如下圖,全部都要勾選。

image

另外,今天也有遇到一個小問題,是Microsoft.Web.Infrastructure錯誤,這種錯誤通常都是因為使用到Windows Server上的GAC;解決方式很簡單;基本上,回到我們專案上,看一下Infrastructure這個DLL的路徑,是使用到下載NuGet的Package,還是參考到GAC路徑;如果是參考到GAC,大家可以參考這篇,或是參考饅頭這篇解法;如果是參考NuGet下載下來的路徑,那只要把複製到本機這個false改成True;到時候就會把這個dll給傳上去了。

image

通常這樣應該就都會成功了!!~你的MVC 5應用程式,就可以順利佈署上去了~

參考資料

2 則留言:

  1. 如果是在Azure的虛擬機器上使用Web Deploy,記得去Azure VM的防火牆,執行相關 Portd設定。

    回覆刪除
    回覆
    1. 在新版的Azure上,找到網路介面,在網路安全性群組中,點選項目名稱,新增一個輸入安全性規則

      刪除