2012年10月17日 星期三

部署網站

Websites, by default, are entirely file based. This means that the source code is usually deployed to the server. The server then compiles that code when pages are requested. In this scenario, you can deploy a website to a web server by simply copying the files to the correct directory on the server. No special deployment software is required.

If your website is to be deployed to an array of web servers, you can use any file-synchronization tool to copy the files between the servers. This allows you to deploy to a master server and have the deployment synchronized across the web farm.

If your website has a database, requires special web server configuration, or needs different configuration settings in a release environment, simply copying files will be insufficient.

Visual Studio 2010 includes a new Publish Web dialog box that allows you to configure each of these settings once, and then publish a website to one or more web servers with a single click.

部署網站

使用 Web Setup Project 部署網站

這個方法是使用 Web Setup Project 建置後產生檔案,它有二種格式:

  • setup.exe
    這是一個可以用來安裝檔案的可執行檔,啟動後,安裝精靈會一步一步提示使用者,以完成安裝步驟。
  • WebSetup1.msi
    這是一個 Windows Installer 檔案,包含了所有加入到 Web Setup Project 中的檔案。 使用者也可以直接使用這個檔案進行安裝,就如同setup.exe。 除此之外,網路管理人員也可以使用 AD 軟體發佈工具或者 Microsoft System Management Server 來發佈.msi 檔案。

Microsoft Install (msi)

雖然大都數人都習慣 setup.exe,但是 .msi 卻是一個檔案較小且用途更廣的檔案。 唯一缺點就是目標主機上必須要有 Windows Installer ,不過現在大部份機器上都己包含這個元件。

使用 Copy Web Tool 部署網站

如果只是要做網站更新的工作,直接使用 Copy Web Tool 會比透過安裝程式來的方便且快速。 「Copy Web Tool」僅適用於 Web 網站,若是 Web 專案,可使用下節的「單鍵發行網站」。

Copy Web Tool 可以僅複製幾個檔案,也可以複製整個網站。 透過這個工具的搬移功能,就可以將檔案更新到遠端主機。 同時它也支援同步功能來更新檔案。

有二個地方可以啟動這個功能,如下圖:

1.由方案總管中,開啟網站的右鍵選單

2.由主選單中的[網站]功能

啟動後如下圖畫面:

點選「連接」,設定主機資訊,共有以下四種連線方式:

建立連結後,可以在來源與遠端網站間,以多種不同方式複製或同步檔案:

要注意,若同時有多人在維護同一個網站,要注意彼此覆蓋的問題。

使用 Publish Web Site Tool 部署網站

這個方式適用於 Web 網站和 Web 專案,只是二種使用方式不太相同。

Web 網站的發行

設定編譯選項。

使用Web 網站的發行,可以設定是否先行編譯,以減少網頁執行時才編譯的回應時間。

設定發行目標位置。

Web 專案的發行

使用Web 專案的發行,一律會先行編譯。

使用「單鍵發行(1-click)」部署網站

「單鍵發行網站」僅適用於 Web Application 專案,是 VS2010 之後所提供的一種方便快速的發行方式。 請情可參考這篇 單鍵發行網站

使用 Web Deployment Projects 部署網站

當發行一個Web型網站時,其建置出來的 dll 檔名會依特定規則給予不同的名稱,如下圖:

若是使用單一頁面固定命名,還可以由檔名判斷dll與程式碼的對應關係; 若沒有使用固定命名,要想知道各個dll對應到的是哪個aspx,就必須要先找到該aspx,開啟後看一下他的inherits才能找出到底要版更時我要換哪個dll才對:

總之,發行一個 Web 型網站後,會產生一大堆 dll 。在部署到主機時,就會顯的有點麻煩。若不想這個狀況,就可以改用 Web Deployment Projects 。 這個 WDP 工具是在 VS2010 時被釋出,它是一個外掛在 Visual Studio 上的專案類型,主要目的是提供你將現有 ASP.NET Web型網站專案型網站另一種部署網站的方式

與 Publish Web Site 的不同的是,Publish Web Site 是直接將網站發佈到一個目錄下,但 Web Deployment Projects 必須先新增一個獨立的 WDP 專案到方案中,然後先預先設定組件名稱(Assembly Name)與網站建置時的輸出目錄。

若要下載 Web Deployment Projects 可以參考以下網址:

關於詳細的 Web Deployment Projects 使用方法,可以參考以下網址:

Web.config 轉換 (Transformations)

Web.config 轉換是 ASP.NET 4.0 新增的功能,這個功能僅適用 Web 專案 它可以協助你在部署網站時,針對不同的部署主機設定不同的 web.config 內容。 在專案型網站網站中,預設 web.config 檔案底下會有二個設定檔,web.debug.config 和 web.release.config , 你也可以新增一個設定檔,例如,自行建立一個 web.staging.config 設定檔。 這些不同的設定檔,讓你可以針對執行主機的實際狀況,建立不同的設定值,例如,資料庫連線資訊等。 等到真正要發行或部署專案時,就會動態的以適當的內容取代 web.config 相同項目的設定值。

如何建立自訂的組態設定檔(build configuration)

當建置專案時,系統預設只會提供 debug 和 release 二個組態設定檔,你也可以建立自已的組態設定檔。

  1. 在組態管理員中,新增方案組態:

  2. 新增組態轉換:

最後你就可以在 web.config 底下看到新的組態設定檔。

建立組態設定檔轉換內容

經由上一個步 Web.Config 中的設定內容是基礎的內容,當進行網站部署時,你可以針對不同的建置組態,對特定的內容進行「新增」、「取代」、「刪除」的操作。

加入設定

Transform="Insert"

你可以使用這個技巧,將共同的設定內容放在 web.config 檔中,然後將不同的設定內容放在各別的組態設定檔中,當網站發行時,這些各別的設定內容就會被加入到 web.config 之中。

<appSettings>
  </appSettings>
<appSettings>
    <add key="gClientId" value="1042829788251-l58ngmtphk14g9nc855hu0couvkmle8s" xdt:Transform="Insert" />
    <add key="gClientSecret" value="6QKgG13hKIOCuo" xdt:Transform="Insert" />
  </appSettings>

取代設定

Transform="Replace"

你可以使用這個技巧,修改 web.config 檔中特定的項目。

<appSettings>
    <add key="gClientId" value="1042829788251-l58ngmtphk14g9nc855hu0couvkmle8s" />
    <add key="gClientSecret" value="6QKgG13hKIOCuo" />
  </appSettings>
<appSettings>
    <add key="gClientId" value="1042829788251-6fbhecc8ut752l7umrotjnd0gn2c4bq3" xdt:Transform="Replace" xdt:Locator="Match(key)" />
    <add key="gClientSecret" value="YoF2E-GRsesx5" xdt:Transform="Replace" xdt:Locator="Match(key)" />
  </appSettings>

你也可以將整個群組取代掉。

<appSettings xdt:Transform="Replace">
    <add key="gClientId" value="1042829788251-6fbhecc8ut752l7umrotjnd0gn2c4bq3" />
    <add key="gClientSecret" value="YoF2E-GRsesx5"/>
  </appSettings>

移除設定

移除設定是指移除設定項中的特定屬性,而不是整個設定項。

Transform="RemoveAttributes()"

例如,若要移除 <compilation> 中的 <debug> 屬性,可以這麼做:

<configuration>
        <system.web>
            <compilation xdt:Transform="RemoveAttributes(debug)" />
        </system.web>
    </configuration>

組態設定檔轉換語法

Web.config 的轉換語法可參考 MSDN:http://msdn.microsoft.com/zh-tw/library/dd465326.aspx

如何建立 Web Setup Project

建立安裝專案

建立網站的安裝專案和建立桌面程式的安裝專案是類似的,而且還提供Web應用程式所需要的特定功能。

  1. Open your Web site in Visual Studio.
  2. Add a new Web Setup Project

  3. Add a project output

    create a project output group

  4. Add additional folders, files, and assemblies that are not part of your project output.

  5. Building a Web Setup Project

    當build網站時,安裝專案並不會自動build,必須手動點選安裝專案再build。 當build安裝專案時,VisualStudio會先驗證網站的程式碼,然後產生 .msi 檔案,將專案的相關檔案都包裝進 .msi 檔。 透過 VisualStudio 的輸出視窗,可以看到所有的建置部驟以及最後 .msi 檔案的產生位置。

設定部署屬件

大部份專案在以上步驟就可以完成建置專案,但是如果比較複雜的網站可能會使用到如:自訂register或偵側作業系統版本等。

要設定部署屬件,必須打開啟動條件編輯器(Launch Conditions editor),步驟如下:

  • 在「方案總管」點選你的安裝專案
  • 選擇「檢視」→「啟動條件」

  • 出現「啟動條件」頁簽。

There are two main branches of the Launch Conditions editor

  • 搜尋目標電腦:定義安裝前的搜尋條件,以判斷是否需要變更,如:登錄資訊、版本資訊等。
  • 啟動條件:定義安裝前需要符合的條件,如 OS 版本、IIS、.NET Framework 版本等。

Typically, you must add an item to each of these two nodes to require a single component as part of your install. For example, if you want to verify that a specific DLL is present, you must create a search condition under Search Target Machine and store the result of the search in a property. You then create a launch condition that uses the search condition's property. If the required condition is not met (file is missing), you specify an error message to be displayed to the user. You can also optionally add a Uniform Resource Locator (URL) to the required component for download.

通常一個需求都會必須同時在這二個節點加入項目, 例如:要判個特定的dll檔,就必須先在「搜尋目標電腦」節點上建立一個搜尋條件,然後再依搜尋條件的結果在「啟動條件」節點中建立一個啟動條件。

所以,比較簡便的方法就是在「目標電腦上的需求」節點上,由右鍵選單功能表中直接加入「啟動條件」, 系統就會自動在「搜尋目標電腦」節點中加入一個搜尋條件,並且在「啟動條件」節點中加入一個啟動條件。

加入搜尋條件

另外,我們也可以單獨由「搜尋目標電腦」節點中加入一個搜尋條件,它共有3種類型:

1. File Search

這個類型是用來定義搜尋特定檔案。 若要搜尋檔案,你只要指定 FileName 屬性;若要尋找目錄,就指定 Folder 屬性即可搜尋。

2. Registry Search

這個類型是用來定義搜尋特定的登錄資訊。

  • Root :設定要開始搜尋的節點
  • RegKey :設定要搜尋節點的Key
  • Value:a value you hope to be set for the given key

3. Windows Installer Search

這個類型是用來定義搜尋已註冊的元件。

以上,每一個類型都有其各自的搜尋屬性可以設定。 你必須在 Property 屬性設定一個名稱,以定義搜尋結果,如此啟動條件便可以依這個名稱取得搜尋結果。如下圖所示:

設定啟動條件

加入一個啟動條件之後,屬性視窗中有以下屬性可以設定:

  • Condition :指定特定搜尋條件,依其結果判斷是否安裝。
  • InstallUrl :若 Condition 不符合,安裝專案用來取得需求元件的網址(非必要)。
  • Message :設定若安裝條件為false的顯示訊息。

除了可以利用搜尋條件的結果來判斷是否啟動外,也可以直接設定啟動條件的判斷式。

例如辨識環境變數,可以在變數名稱前面加上 "%" 符號,如:

%HOMEDRIVE = "C:" (verify that the home drive is C:\)

檢查特定的屬性:

IISVERSION >= "#6" (檢查 IIS 必須 6.0 以上)
VersionNT = 601 (檢查必須是 Windows 7 (32-bit 版本))

底下是一些常用的條件:

  • IISVERSION :Version of IIS, if installed
  • VersionNT :Version number for Microsoft Windows NT–based OS
  • Version9X :Version number for Microsoft Windows 95–based OS
  • ServicePackLevel :Version number of the OS service pack
  • WindowsBuild :Build number of the OS
  • SystemLanguageID :Default language identifier for the system
  • AdminUser :Tool that determines whether the user has administrative privileges
  • PhysicalMemory :Size of the installed RAM in megabytes

範例:如何設定檔案的啟動條件

??

如何寫入登錄資料

有時候在安裝過程中,會需要寫入相關資訊到註冊區,可以如下操作:

  1. 在方案總管中,點選你的安裝專案。
  2. 由右鍵選單中,執行[檢視]→[登錄]

  3. 在出現的「登錄編輯器」中,加入登錄設定。
    這個步驟是巢狀的,例如:如果要加入 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\ 設定,就必須加入SOFTWARE、Microsoft、ASP.NET機碼。

  4. 點選想要設定的機碼,在右鍵選單中,執行[新增]→[字串值]、[二進位值]...

  5. 右側的Property視窗,可以用來修改設定值。如果要設定安裝的條件,就必須設定「Condition」屬性。

  6. 當解除安裝時,登錄機碼預設是不會同時刪除的,如果想要自動移除登錄機碼,請選擇機碼,並且檢視屬性視窗,將「DeleteAtUninstall」屬性設為 True 。

加入自訂安裝步驟

在安裝過程中,若我們想要收集使用者的特定資訊,就可以加入自訂對話方塊。 對話方塊可分成以下幾種工作類型:

  • Display a license agreement
    這個步驟就是製作一個顯示授權合約的對話範本,同意才可以繼續操作。
  • Modify settings in the Web.config file
    這個步驟可用來編輯設定檔
  • Perform custom configuration
    這個步驟可用來提供儲存在登錄區或特殊位置的資料給使用者。
  • Activate or register your application
    這個步驟可用來顯示給使用者產品金鑰或註冊資訊。

要加入自訂安裝步驟,必須使用「使用者介面編輯器(User Interface Editor)」([檢視]→[使用者介面])。

使用者介面編輯器可以用來顯示或管理不同的安裝階段。

加入自訂安裝步驟,示範如下:

  1. 點選需要新增步驟的階段,在其右鍵選單上點選「加入對話方塊」。

  2. 對話方塊有不同範本可以用來收集不一樣的資訊類型,若用不到的欄位可以隱藏即可。
  3. 點選加入的對話方塊,可在右鍵選單中使用上移下移功能調整順序。

  4. 底下為自訂對話方塊的畫面顯示

加入自訂安裝動作

如果說在安裝過程中,必須執行特定的程式,就可以加入自訂動作。 例如:使用自訂步驟中取得的資料去更新設定檔,或者驗證產品金鑰等等的行為。

要加入自訂安裝動作,必須使用「自訂動作編輯器(Custom Actions Editor)」([檢視]→[自訂動作])。

沒有留言:

張貼留言