將檔案部署到 Azure App 服務

本文將說明如何將程式碼部署為 ZIP、WAR、JAR 或 EAR 套件至 Azure App 服務。 它也會示範如何將個別檔案部署至 App Service,與應用程式套件分開。

先決條件

若要完成本文中的步驟,請建立 App Service 應用程式,或使用您為另一個教學課程建立的應用程式。

如果你沒有Azure帳號,請在開始前先建立一個free帳號

建立專案 ZIP 檔案

重要事項

當您建立要用於部署的 ZIP 套件時,請勿包含根目錄。 只包括根目錄中的檔案和目錄。 如果你下載 GitHub 倉庫的 ZIP 檔,你無法將該檔案 as-is 部署到 App Service。 GitHub 在頂層加入巢狀目錄,這在 App Service 上無法使用。

在本機終端機視窗中,瀏覽至應用程式專案的根目錄。

此目錄應包含 Web 應用程式的項目檔,例如 index.htmlindex.phpapp.js。 它也可以包含封裝管理檔案,例如 project.jsoncomposer.jsonpackage.jsonbower.jsonrequirements.txt

如果您不想讓 App Service 為您執行部署自動化,請執行所有建置工作。 例如:npm、、bowergulpcomposer、 和 pip。 請確定您擁有執行應用程式所需的所有檔案。 如果您想要直接執行套件,則需要此步驟。

在專案中建立所有項目的 ZIP 封存。 對於 dotnet 專案,請在 dotnet publish 命令的輸出目錄中新增所有內容,但不包括輸出目錄本身。 例如,在您的終端機中輸入下列命令,以建立包含目前目錄內容的 ZIP 套件:

# Bash
zip -r <file-name>.zip .

# PowerShell
Compress-Archive -Path * -DestinationPath <file-name>.zip

部署 ZIP 套件

當你部署 ZIP 套件時,App Service 會將其內容解包到你的應用程式預設路徑中:Windows D:\home\site\wwwroot,Linux /home/site/wwwroot

此 ZIP 套件部署所使用的是支援持續整合式部署的同一個 Kudu 服務。 Kudu 為 ZIP 套件部署支援下列功能:

  • 刪除先前部署留下的檔案
  • 開啟預設建置程序的選項,其中包括套件還原
  • 部署自定義,包括執行部署腳本
  • 部署記錄
  • 套件大小限制為 2,048 MB

附註

只有當 ZIP 套件的時間戳記與已部署檔案不符時,檔案才會被複製。

使用 Kudu 中的 ZIP 部署介面進行部署

  1. 在Azure入口開啟你的應用程式,選擇 Development Tools>Advanced Tools,然後選擇 Go
  2. 在 Kudu 中,選取 [工具]>[Zip 推送部署]
  3. 上傳您在 建立專案 ZIP 套件中建立的 ZIP 套件。 將它拖曳到網頁上的檔案總管區域。

部署進行中時,右上角的圖示會顯示進度百分比。 此頁面也會在「File Explorer」區域下方顯示操作訊息。 部署完成時,最後一則訊息應該會顯示「部署成功」。

這個端點目前無法支援 Linux 上的 App Service。 請考慮改用 FTP 或 ZIP 部署 API

在 Kudu 中不使用 ZIP 部署 UI 進行部署

使用 az webapp deploy 命令將 ZIP 套件部署至 Web 應用程式。 此 CLI 命令會使用 Kudu 發佈 API 來部署檔案,並可完全自訂。

下列範例會將 ZIP 套件推送至您的網站。 針對 --src-path 指定您本機 ZIP 套件的路徑。

az webapp deploy --resource-group <group-name> --name <app-name> --src-path <zip-package-path>

此命令會在部署 ZIP 套件之後重新啟動應用程式。

啟用 ZIP 部署的組建自動化

根據預設,部署引擎會假設 ZIP 套件已準備好依現狀執行,而且不會執行任何建置自動化。 若要啟用 Git 部署中使用的相同組建自動化,請設定 SCM_DO_BUILD_DURING_DEPLOYMENT 應用程式設定。 請在 Azure Cloud Shell 執行以下指令:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings SCM_DO_BUILD_DURING_DEPLOYMENT=true

如需詳細資訊,請參閱 Kudu 文件

部署 WAR、JAR 或 EAR 套件

你可以將 WARJAREAR 套件部署到 App Service,透過 Azure CLI、PowerShell 或 Kudu 發佈 API 來執行你的 Java 網頁應用程式。

此處顯示的部署流程會將套件放在具有正確命名慣例和目錄結構的應用程式內容共用上。 如需詳細資訊,請參閱 Kudu 發佈 API 參考。 我們建議採用此方法。 如果您改用 FTP 或 Web Deploy 部署 WAR、JAR 或 EAR 套件,可能會因為命名或結構錯誤而看到未知的失敗。

使用 az webapp deploy 命令將 WAR 套件部署到 Tomcat 或 JBoss EAP。 針對 --src-path 指定您本機 Java 套件的路徑。

az webapp deploy --resource-group <group-name> --name <app-name> --src-path ./<package-name>.war

此 CLI 命令會使用 Kudu 發佈 API 來部署套件,並可完全自訂。

部署個別檔案

使用 az webapp deploy 命令搭配 --type 參數,將啟動腳本、連結庫和靜態檔案部署至 Web 應用程式。

如果您以這種方式部署啟動指令碼,App Service 會自動使用您的指令碼來啟動應用程式。

該 CLI 命令會使用 Kudu 發佈 API 來部署檔案。 該命令可以完全加以自訂。

部署啟動指令碼

az webapp deploy --resource-group <group-name> --name <app-name> --src-path scripts/startup.sh --type=startup

部署程式庫檔

az webapp deploy --resource-group <group-name> --name <app-name> --src-path driver.jar --type=lib

部署靜態檔案

az webapp deploy --resource-group <group-name> --name <app-name> --src-path config.json --type=static

部署至網路保護的應用程式

視 Web 應用程式的網路設定而定,可能會封鎖從開發環境直接存取應用程式。 (請參閱 部署至網路安全網站部署至網路安全網站,第2部分。您可以將其發佈至可從 Web 應用程式存取的記憶體系統,並觸發應用程式從儲存位置提取 ZIP,而不是將套件或檔案直接推送至 Web 應用程式。

遠端 URL 可以是任何可公開存取的位置,但最好使用具有共用存取簽章 (SAS) 金鑰的 Blob 記憶體容器來保護它。

使用 az webapp deploy 命令,就如同您在其他區段中一樣,但使用 --src-url,而不是 --src-path。 以下範例使用 --src-url 參數來指定託管於 Azure 儲存體 帳號中的 ZIP 檔案 URL。

az webapp deploy --resource-group <group-name> --name <app-name> --src-url "https://storagesample.blob.core.windows.net/sample-container/myapp.zip?sv=2021-10-01&sb&sig=slk22f3UrS823n4kSh8Skjpa7Naj4CG3 --type zip

Kudu 發佈 API 參考

publish Kudu API 可讓您從 CLI 命令指定相同的參數作為 URL 查詢參數。 若要使用 Kudu REST API 進行驗證,建議您使用權杖驗證,但您也可以使用基本驗證搭配應用程式的部署認證

下表顯示可用的查詢參數、其允許的值和描述。

Key 允許的值 描述 必要 類型
type war|jar|ear|lib|startup|static|zip 這是正在部署的成品類型。 它會設定預設的目標路徑,並通知 Web 應用程式應該如何處理部署。

type=zip:將內容解壓縮至 /home/site/wwwroot,以部署 ZIP 套件。 path 參數是選用的。

type=war:部署 WAR 套件。 根據預設,WAR 套件會部署到 /home/site/wwwroot/app.war。 您可以使用 path 來指定目標路徑。

type=jar:將 JAR 套件部署至 /home/site/wwwroot/app.jarpath 參數會被忽略。

type=ear:將 EAR 套件部署至 /home/site/wwwroot/app.earpath 參數會被忽略。

type=lib:部署 JAR 連結庫檔案。 根據預設,此套件會部署到 /home/site/libs。 您可以使用 path 來指定目標路徑。

type=static:部署靜態檔案,例如腳本。 根據預設,此套件會部署到 /home/site/wwwroot

type=startup:部署一個腳本,讓 App Service 自動用作應用程式的啟動腳本。 預設情況下,腳本部署於 D:\home\site\scripts\<name-of-source> 用於 Windows,以及 home/site/wwwroot/startup.sh 用於 Linux。 您可以使用 path 來指定目標路徑。
是的 繩子
restart true|false 根據預設,此 API 會在部署作業之後重新啟動應用程式 (restart=true)。 當您部署多個工件時,您可以藉由設定 restart=false 來防止除最後一次部署以外的所有重新啟動。 布林值
clean true|false 指定在該處部署成品之前,是否要清除 (刪除) 目標部署。 布林值
ignorestack true|false 此發佈 API 使用 WEBSITE_STACK 環境變數,根據您網站的語言堆疊來選擇安全預設值。 將此參數設定為 false 會停用任何特定語言的預設值。 布林值
path 絕對路徑 要部署成品的目標絕對路徑。 例如,/home/site/deployments/tools/driver.jar/home/site/scripts/helper.sh 繩子

如果是更進階的部署情境,可以試試使用 Git 部署到 Azure。 基於 Git 部署到 Azure 可支援版本控制、套件還原、MSBuild 等功能。