使用 Visual Studio ASP.NET Web 部署:部署至生產環境
By Tom Dykstra
本教學課程系列說明如何使用 Visual Studio 2012 或 Visual Studio 2010,將 (發佈) ASP.NET Web 應用程式部署至Azure App 服務 Web Apps或協力廠商裝載提供者。 如需系列的相關資訊,請參閱 系列的第一個教學課程。
概觀
在本教學課程中,您會設定 Microsoft Azure 帳戶、建立預備和生產環境,並使用 Visual Studio 單鍵發佈功能,將您的 ASP.NET Web 應用程式部署至預備和生產環境。
如果您想要,您可以部署至協力廠商主機提供者。 本教學課程中所述的大部分程式都與裝載提供者或 Azure 相同,不同之處在于每個提供者都有自己的帳戶和網站管理使用者介面。 您可以在 Microsoft.com 網站上的 提供者資源庫中 找到裝載提供者。
提醒:如果您在完成本教學課程時收到錯誤訊息或某些專案無法運作,請務必檢查本教學課程系列中的 [疑難排解] 頁面。
取得 Microsoft Azure 帳戶
如果您還沒有 Azure 帳戶,您可以在幾分鐘內建立免費試用帳戶。 如需詳細資料,請參閱 Azure 免費試用。
建立預備環境
注意
由於本教學課程已撰寫,Azure App 服務新增了新功能,以自動化許多建立預備和生產環境的程式。 請參閱在 Azure App 服務 中設定 Web 應用程式的預備環境。
如 部署至測試環境教學課程中所述,最可靠的測試環境是裝載提供者的網站,就像生產網站一樣。 在許多裝載提供者中,您必須根據大量額外成本來衡量這一點的優點,但在 Azure 中,您可以建立額外的免費 Web 應用程式作為預備應用程式。 您也需要資料庫,而實際執行資料庫費用的額外費用將會是無或最少。 在 Azure 中,您會支付您所使用的資料庫儲存體數量,而不是針對每個資料庫付費,而您將用於預備環境的額外儲存體數量將會降到最低。
如 部署至測試環境教學課程所述,在預備和生產環境中,您要將兩個資料庫部署到一個資料庫。 如果您想要將它們分開,程式會是相同的,不同之處在于您會為每個環境建立額外的資料庫,而且當您建立發行設定檔時,會為每個資料庫選取正確的目的地字串。
在本教學課程的本節中,您將建立 Web 應用程式和資料庫以用於預備環境,而且您將部署至預備環境,並在建立並部署到生產環境之前進行測試。
注意
下列步驟示範如何使用 Azure 管理入口網站,在 Azure App 服務 中建立 Web 應用程式。 在最新版的 Azure SDK 中,您也可以使用 [伺服器總管] 來執行這項操作,而不需要離開 Visual Studio。 在 Visual Studio 2013中,您也可以直接從 [發佈] 對話方塊建立 Web 應用程式。 如需詳細資訊,請參閱在 Azure App 服務 中建立 ASP.NET Web 應用程式。
在 Azure 管理入口網站中,按一下 [ 網站],然後按一下 [ 新增]。
按一下 [網站],然後按一下 [ 自訂建立]。
[ 新增網站 - 自訂建立精 靈] 隨即開啟。 [ 自訂建立 精靈] 可讓您同時建立網站和資料庫。
在精靈的 [ 建立網站] 步驟中,在 [URL ] 方塊中輸入字串,以作為應用程式預備環境的唯一 URL。 例如,輸入 ContosoUniversity-staging123 (在結尾包含亂數,使 ContosoUniversity-staging 成為唯一) 。
完整的 URL 將包含您在此處輸入的字串,加上您在文字方塊旁看到的尾碼。
在 [ 區域 ] 下拉式清單中,選擇最接近您的區域。
此設定會指定 Web 應用程式將在哪個資料中心執行。
在 [ 資料庫 ] 下拉式清單中,選擇 [建立新的 SQL 資料庫]。
在 [ 資料庫連接字串名稱] 方塊中,保留預設值 DefaultConnection。
按一下指向方塊底部右邊的箭號。
下圖顯示 [ 建立網站] 對話方塊,其中包含範例值。 您輸入的 URL 和區域將會不同。
精靈隨即前進至 [指定資料庫設定] 步驟。
在 [ 名稱] 方塊中,輸入 ContosoUniversity 加上一個亂數字,使其是唯一的,例如 ContosoUniversity123。
在 [伺服器] 方塊中,選取 [新增SQL Database伺服器]。
輸入系統管理員名稱和密碼。
您在這裡不會輸入現有的名稱和密碼。 而是輸入新的名稱和密碼;您現在定義的名稱和密碼將供未來存取資料庫時使用。
在 [ 區域 ] 方塊中,選擇您為 Web 應用程式選擇的相同區域。
將網頁伺服器和資料庫伺服器保留在相同區域中,可提供最佳的效能,並將費用降到最低。
按一下方塊底部的核取記號,指出您已完成。
下圖顯示 [ 指定資料庫設定 ] 對話方塊,其中包含範例值。 您輸入的值可能不同。
管理入口網站會返回 [網站] 頁面,而 [ 狀態 ] 資料行會顯示正在建立 Web 應用程式。 一段時間後 (通常少於一分鐘) , [狀態 ] 資料行會顯示已成功建立 Web 應用程式。 在左側導覽列中,帳戶中您擁有的 Web 應用程式數目會出現在 [網站 ] 圖示旁邊,而 [SQL Database] 圖示旁會顯示資料庫數目。
您的 Web 應用程式名稱會與圖例中的範例應用程式不同。
將應用程式部署至預備環境
既然您已為預備環境建立 Web 應用程式和資料庫,您可以將專案部署至該環境。
注意
這些指示說明如何下載 . publishsettings 檔案來建立發佈設定檔,這不僅適用于 Azure,也適用于協力廠商裝載提供者。 最新的 Azure SDK 也可讓您直接從 Visual Studio 連線到 Azure,並從您在 Azure 帳戶中擁有的 Web 應用程式清單中選擇。 在Visual Studio 2013中,您可以從[Web 發佈] 對話方塊或 [伺服器總管] 視窗登入 Azure。 如需詳細資訊,請參閱在 Azure App 服務 中建立 ASP.NET Web 應用程式。
下載 .publishsettings 檔案
按一下您剛才建立的 Web 應用程式名稱。
在 [儀表板] 索引標籤的 [快速流覽] 下,按一下[下載發佈設定檔]。
此步驟會下載一個檔案,其中包含您需要的所有設定,以便將應用程式部署至 Web 應用程式。 您將將此檔案匯入 Visual Studio,因此您不需要手動輸入此資訊。
將 .publishsettings 檔案儲存在您可以從 Visual Studio 存取的資料夾中。
警告
安全性 - .publishsettings 檔案包含您的認證, (用來管理 Azure 訂用帳戶和服務的非編碼) 。 這個檔案的安全性最佳作法是暫時儲存在來源目錄之外 (例如在 Libraries\Documents 資料夾),然後在匯入完成後予以刪除。 取得 .publishsettings 檔案存取權的惡意使用者,可以編輯、建立和刪除您的 Azure 服務。
建立發行設定檔
在 Visual Studio 中,以滑鼠右鍵按一下方案總管中的 ContosoUniversity 專案,然後從操作功能表中選取 [發佈]。
此時會開啟 [發行 Web] 精靈。
按一下 [個人資料] 索引標籤。
按一下 [匯入] 。
流覽至您稍早下載的 .publishsettings 檔案,然後按一下 [ 開啟]。
在 [ 連線 ] 索引標籤中,按一下 [ 驗證連線 ] 以確定設定正確。
驗證連線之後,會顯示 [ 驗證連線 ] 按鈕旁的綠色核取記號。
對於某些裝載提供者,當您按一下 [ 驗證連線] 時,可能會看到 [ 憑證錯誤 ] 對話方塊。 如果您這麼做,請確認伺服器名稱是您預期的名稱。 如果伺服器名稱正確,請選取 [ 儲存此憑證以供 Visual Studio 的未來會話 使用],然後按一下 [ 接受]。 (此錯誤表示主機提供者已選擇避免為您要部署的 URL 購買 SSL 憑證的費用。如果您想要使用有效的憑證建立安全連線,請連絡您的裝載提供者.)
按一下 [下一步] 。
在 [ 設定] 索引 標籤中,展開 [ 檔案發佈選項],然後 從 [App_Data] 資料夾中選取 [排除檔案]。
如需檔案 發佈選項下其他選項的相關資訊,請參閱 部署至 IIS 教學課程。 顯示此步驟結果的螢幕擷取畫面,且下列資料庫設定步驟位於資料庫組態步驟的結尾。
在 [資料庫]區段的 [DefaultConnection] 下,設定成員資格資料庫的資料庫部署。
-
選取 [更新資料庫]。
DefaultConnection正下方的[遠端連線字串] 方塊會填入 .publishsettings 檔案中的連接字串。連接字串包含SQL Server認證,這些認證會以純文字儲存在.pubxml檔案中。 如果您不想將它們永久儲存在該處,您可以在部署資料庫之後將其從發佈設定檔中移除,並改為將它們儲存在 Azure 中。 如需詳細資訊,請參閱如何在 Scott Hanselman 部落格上 從 Source 部署至 Azure 時保護您的 ASP.NET 資料庫連接字串 。 2.按一下 [ 設定資料庫更新]。 3.在 [設定資料庫更新] 對話方塊中,按一下 [新增 SQL 腳本]。 4.在 [ 新增 SQL 腳本 ] 方塊中,流覽至您稍早在方案資料夾中儲存的 aspnet-data-prod.sql 腳本,然後按一下 [ 開啟]。 5.關閉 [設定資料庫更新] 對話方塊。
在 [資料庫] 區段的[SchoolCoNtext] 下,選取 [在應用程式啟動時執行Code First 移轉 (執行],) 。
Visual Studio 會顯示[執行] Code First 移轉,而不是更新類別的資料庫
DbContext
。 如果您想要使用 dbDacFx 提供者,而不是移轉來部署您使用類別存取DbContext
的資料庫,請參閱 msDN 上的 Web 部署 ASP.NET 常見問題中的如何?部署 Code First 資料庫而不進行移轉?。[ 設定 ] 索引標籤現在看起來像下列範例:
執行下列步驟以儲存設定檔,並將其重新命名為預備:
按一下 [ 設定檔] 索引 標籤,然後按一下 [ 管理設定檔]。
匯入已建立兩個新的設定檔,一個用於 FTP,另一個用於 Web Deploy。 您已設定 Web Deploy 設定檔:將此設定檔重新命名為預備。
關閉 [ 編輯 Web 發佈設定檔 ] 對話方塊。
關閉 [發佈 Web 精靈]。
設定環境指標的發佈設定檔轉換
注意
本節說明如何設定環境指標的Web.config轉換。 因為指標位於 元素中 <appSettings>
,所以當您部署至 Azure App 服務 時,有另一個用來指定轉換的替代方法。 如需詳細資訊,請參閱 在 Azure 中指定Web.config設定。
在[方案總管] 中,依序展開 [屬性] 和 [PublishProfiles]。
以滑鼠右鍵按一下 [Staging.pubxml],然後按一下 [ 新增組態轉換]。
Visual Studio 會建立 Web.Staging.config 轉換檔案並加以開啟。
在 Web.Staging.config 轉換檔案中,緊接在開頭
configuration
標記之後插入下列程式碼。<appSettings> <add key="Environment" value="Prod" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/> </appSettings>
當您使用預備發行設定檔時,此轉換會將環境指標設定為 「Prod」。 在已部署的 Web 應用程式中,您不會在 「Contoso University」 H1 標題後面看到任何尾碼,例如「 (Dev) 」 或 「 (Test) 」。
以滑鼠右鍵按一下 Web.Staging.config 檔案,然後按一下 [ 預覽轉換 ],確定您編碼的轉換會產生預期的變更。
[Web.config預覽] 視窗會顯示套用Web.Release.config轉換和Web.Staging.config轉換的結果。
防止公開使用測試應用程式
暫存應用程式的重要考慮是它會在網際網路上上線,但您不想讓公用使用它。 若要將人員找到和使用的可能性降到最低,您可以使用下列一或多個方法:
- 設定防火牆規則,只允許從您用來測試預備的 IP 位址存取預備應用程式。
- 使用無法猜測的模糊 URL。
- 建立 robots.txt 檔案,以確保搜尋引擎不會在搜尋結果中編目測試應用程式和報告連結。
這些方法的第一個是最有效的方法,但在本教學課程中並未涵蓋,因為它會要求您部署至 Azure 雲端服務,而不是Azure App 服務。 如需 Azure 中雲端服務和 IP 限制的詳細資訊,請參閱Azure 提供的計算裝載選項和封鎖特定 IP 位址來存取 Web 角色。 如果您要部署至協力廠商主機提供者,請連絡提供者以瞭解如何實作 IP 限制。
在本教學課程中,您將建立 robots.txt 檔案。
在方案總管中,以滑鼠右鍵按一下 ContosoUniversity 專案,然後按一下 [新增專案]。
建立名為robots.txt的新文字檔,並將下列文字放在其中:
User-agent: * Disallow: /
這
User-agent
一行會告訴搜尋引擎檔案中的規則適用于所有搜尋引擎網頁編目程式, (機器人) ,而Disallow
該行會指定網站上不應該編目任何頁面。您想要搜尋引擎編錄生產應用程式,因此您需要從生產部署中排除此檔案。 若要這樣做,您會在建立生產發佈設定檔時設定設定。
部署至預備環境
以滑鼠右鍵按一下 Contoso University 專案,然後按一下 [發佈],以開啟[發佈 Web精靈]。
請確定已選取 預備 設定檔。
按一下 [發佈]。
[輸出] 視窗會顯示已採取的部署動作,並報告部署作業已順利完成。 預設瀏覽器會自動開啟至已部署 Web 應用程式的 URL。
在預備環境中進行測試
請注意,環境指標不存在 (H1 標題之後沒有「 (測試) 」或「 (Dev) 」,這會顯示環境指標 的Web.config 轉換成功。
執行 [學生] 頁面,以確認已部署的資料庫沒有學生。
執行 Instructors 頁面,確認 Code First 以講師資料植入資料庫:
從 [學生]功能表中選取 [新增學生]、新增學生,然後在 [學生] 頁面中檢視新學生,以確認您可以成功寫入資料庫。
在 [ 課程] 頁面中,按一下 [更新點數]。 [ 更新點數 ] 頁面需要系統管理員許可權,因此會顯示 [ 登入 ] 頁面。 輸入您稍早建立的系統管理員帳號憑證 (「admin」 和 「prodpwd」) 。 [ 更新點數 ] 頁面隨即顯示,這會驗證您在上一個教學課程中建立的系統管理員帳戶是否已正確部署到測試環境。
要求不正確 URL 以造成 ELMAH 將追蹤的錯誤,然後要求 ELMAH 錯誤報表。 如果您要部署至協力廠商主控提供者,您可能會發現報表是空的,原因與上一個教學課程中是空的相同原因。 您必須使用主控提供者的帳戶管理工具來設定資料夾許可權,讓 ELMAH 能夠寫入記錄檔資料夾。
您建立的應用程式現在會在 Web 應用程式中的雲端中執行,就像您將用於生產環境一樣。 由於一切都正常運作,下一個步驟是部署至生產環境。
部署到生產
建立生產 Web 應用程式和部署至生產環境的程式與預備環境相同,不同之處在于您需要排除 部署robots.txt 。 若要這樣做,您將編輯發佈設定檔檔。
建立生產環境和生產發佈設定檔
在 Azure 中建立生產 Web 應用程式和資料庫,遵循您用於預備的相同程式。
當您建立資料庫時,您可以選擇將它放在您稍早建立的相同伺服器上,或建立新的伺服器。
下載 .publishsettings 檔案。
藉由匯入生產 .publishsettings 檔案來建立發佈設定檔,遵循您用於預備的相同程式。
別忘了在 [設定] 索引標籤的 [資料庫] 區段中,于[DefaultConnection] 底下設定資料部署腳本。
將發佈設定檔重新命名為 生產環境。
遵循您用於預備的相同程式,設定環境指標的發佈設定檔轉換。
編輯 .pubxml 檔案以排除robots.txt
發行設定檔檔的名稱為 <profilename.pubxml> ,且位於PublishProfiles資料夾中。 PublishProfiles資料夾位於 C# Web 應用程式專案的Properties資料夾、VB Web 應用程式專案的 [我的專案] 資料夾底下,或位於 Web 應用程式專案中的 [App_Data] 資料夾底下。 每個 .pubxml 檔案都包含套用至一個發行設定檔的設定。 您在 [發佈 Web 精靈] 中輸入的值會儲存在這些檔案中,您可以編輯這些檔案,以建立或變更 Visual Studio UI 中未提供的設定。
根據預設,當您建立發行設定檔時,專案會包含 .pubxml 檔案,但您可以將檔案從專案排除,Visual Studio 仍會使用這些檔案。 Visual Studio 會尋找.pubxml檔案的PublishProfiles資料夾,不論它們是否包含在專案中。
每個 .pubxml 檔案都有 .pubxml.user 檔案。 如果您選取 [儲存密碼] 選項,.pubxml.user檔案會包含加密的密碼,而且預設會從專案排除該密碼。
.pubxml檔案包含與特定發行設定檔相關的設定。 如果您想要設定套用至所有設定檔的設定,您可以建立 .wpp.targets 檔案。 建置程式會將這些檔案匯入 .csproj 或 .vbproj 專案檔中,因此您可以在專案檔中設定的大部分設定都可以在這些檔案中設定。 如需 .pubxml 檔案和 .wpp.targets 檔案的詳細資訊,請參閱 How to: Edit Deployment Settings in Publish Profile (.pubxml) Files and the .wpp.targets File in Visual Studio Web Projects。
在方案總管中,依序展開[屬性] 和 [PublishProfiles]。
以滑鼠右鍵按一下 Production.pubxml ,然後按一下 [ 開啟]。
以滑鼠右鍵按一下 Production.pubxml ,然後按一下 [ 開啟]。
緊接在結尾
PropertyGroup
元素之前新增下列幾行:<ExcludeFilesFromDeployment> robots.txt </ExcludeFilesFromDeployment>
.pubxml 檔案現在看起來像下列範例:
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <WebPublishMethod>MSDeploy</WebPublishMethod> <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration> <LastUsedPlatform>Any CPU</LastUsedPlatform> <SiteUrlToLaunchAfterPublish>http://contosou-staging.azurewebsites.net</SiteUrlToLaunchAfterPublish> <ExcludeApp_Data>True</ExcludeApp_Data> <MSDeployServiceURL>waws-prod-bay-001.publish.azurewebsites.windows.net:443</MSDeployServiceURL> <DeployIisAppPath>contosou-staging</DeployIisAppPath> <RemoteSitePhysicalPath /> <SkipExtraFilesOnServer>True</SkipExtraFilesOnServer> <MSDeployPublishMethod>WMSVC</MSDeployPublishMethod> <UserName>[username]</UserName> <_SavePWD>True</_SavePWD> <PublishDatabaseSettings> <!-- database settings removed --> </PublishDatabaseSettings> <ExcludeFilesFromDeployment> robots.txt </ExcludeFilesFromDeployment> </PropertyGroup> <ItemGroup> <MSDeployParameterValue Include="$(DeployParameterPrefix)DefaultConnection-Web.config Connection String"> <ParameterValue>Data Source=tcp:sk0264hvc9.database.windows.net,1433;Initial Catalog=ContosoUniversity-staging;User Id=CU-staging-admin@sk0264hvc9;Password=</ParameterValue> </MSDeployParameterValue> <MSDeployParameterValue Include="$(DeployParameterPrefix)SchoolContext-Web.config Connection String"> <ParameterValue>Data Source=tcp:sk0264hvc9.database.windows.net,1433;Initial Catalog=ContosoUniversity-staging;User Id=CU-staging-admin@sk0264hvc9;Password=</ParameterValue> </MSDeployParameterValue> </ItemGroup> </Project>
如需如何排除檔案和資料夾的詳細資訊,請參閱MSDN 上的 Web 部署常見問題 ASP.NET 中的是否可以排除特定檔案或資料夾?。
部署到生產
開啟 [發佈 Web精靈],確定已選取[生產發佈設定檔],然後按一下 [預覽] 索引標籤上的 [開始預覽],確認不會將robots.txt檔案複製到生產應用程式。
檢閱將複製的檔案清單。 您會看到所有 .cs 檔案都已省略,包括 .aspx.cs、 .aspx.designer.cs、 Master.cs和 Master.designer.cs 檔案。 此程式碼全都已編譯成您可以在bin資料夾中找到的ContosoUniversity.dll和ContosoUniversity.pdb檔案。 因為只需要 .dll 才能執行應用程式,而且您稍早指定只應該部署執行應用程式所需的檔案,所以不會將 .cs 檔案複製到目的地環境。 因為相同原因,會省略 obj 資料夾和 ContosoUniversity.csproj 和 .csproj.user 檔案。
按一下 [發佈 ] 以部署至生產環境。
在生產環境中進行測試,遵循您用於預備的相同程式。
除了 URL 和缺少 robots.txt 檔案之外,所有專案都與暫存相同。
總結
您現在已成功部署及測試您的 Web 應用程式,而且它可透過網際網路公開使用。
在下一個教學課程中,您將更新應用程式程式碼,並將變更部署到測試、預備和生產環境。
注意
當您的應用程式在生產環境中使用時,您應該實作復原方案。 也就是說,您應該定期將資料庫從生產應用程式備份到安全的儲存位置,而且您應該保留數代這類備份。 當您更新資料庫時,應該在變更之前立即建立備份複本。 然後,如果您犯錯,而且在將它部署到生產環境之後才發現,您仍然可以將資料庫復原到資料庫損毀之前的狀態。 如需詳細資訊,請參閱Azure SQL資料庫備份和還原。
注意
在本教學課程中,您要部署至的 SQL Server 版本Azure SQL Database。 雖然部署程式與其他版本的SQL Server類似,但在某些情況下,實際生產應用程式可能需要Azure SQL資料庫的特殊程式碼。 如需詳細資訊,請參閱使用 Azure SQL 資料庫和選擇 SQL Server 與 Azure SQL 資料庫。