共用方式為


將檔案部署至 Azure App Service

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

必要條件

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

如果您沒有 Azure 帳戶,請在開始之前建立 免費帳戶

建立專案 ZIP 檔案

重要

當您建立要部署的 ZIP 套件時,請勿包含根目錄。 只包含根目錄中的檔案和目錄。 如果您將 GitHub 存放庫下載為 ZIP 檔案,則無法將該檔案依目前部署至 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 會在應用程式的預設路徑中解除封裝其內容: D:\home\site\wwwroot 適用於 Windows 和 /home/site/wwwroot Linux。

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

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

注意

ZIP 套件中的檔案只有在其時間戳記與已部署的檔案不符時,才會予以複製。

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

  1. 在 Azure 入口網站中開啟您的應用程式,然後選取 [開發工具>],然後選取 [移至]。
  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 Web 應用程式。

此處顯示的部署程式會將套件放在應用程式的內容共用上,並具有正確的命名慣例和目錄結構。 如需詳細資訊,請參閱 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 進行驗證,建議您進行令牌驗證,但您也可以使用基本身份驗證搭配應用程式的 部署認證

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

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

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

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

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

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

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

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

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

如需更多的進階部署案例,請嘗試使用 Git 部署至 Azure 。 Git 型部署至 Azure 可啟用版本控制、封裝還原、MSBuild 等等。