將檔案部署到 App Service

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

必要條件

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

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

建立專案 ZIP 檔案

重要

建立用於部署的 ZIP 套件時,請勿包含根目錄,但只包含其中的檔案和目錄。 如果您將 GitHub 存放庫下載為 ZIP 檔案,就無法依原樣將該檔案部署至 App Service。 GitHub 會在最上層新增其他巢狀目錄,其不適用於 App Service。

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

此目錄應該包含您的 web 應用程式的項目檔案,例如 index.html、index.php 和 app.js。 也可以包含套件管理檔案,像是 project.json、composer.json、package.json、bower.json 和 requirements.txt

除非您想要 App Service 執行部署自動化,否則,請執行所有建置工作 (例如,npmbowergulpcomposerpip),並確定您擁有執行應用程式所需的所有檔案。 如果您想要直接執行套件,則需要此步驟。

在專案中建立所有項目的 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 套件部署支援下列功能:

  • 刪除先前部署所留下的檔案。
  • 用來開啟預設建置程序的選項,其中包含套件還原。
  • 部署自訂,包括執行中的部署指令碼。
  • 部署記錄。
  • 套件大小限制為 2048 MB。

注意

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

在 Kudu 中使用 zip deploy UI

在瀏覽器中,瀏覽至 https://<app_name>.scm.azurewebsites.net/ZipDeployUI

上傳您在建立專案 ZIP 套件中建立的 ZIP 套件,方法是將其拖曳到網頁上的檔案總管區域。

正在進行部署時,右上角的圖示會顯示進度百分比。 此頁面也會在總管區域下方顯示作業的詳細資訊訊息。 部署完成時,最後一則訊息應該會顯示 Deployment successful

上述端點目前不適用於 Linux App Service。 請考慮改用 FTP 或 ZIP 部署 API

在 Kudu 中不使用 zip deploy 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 deploy 啟用建置自動化

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

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 或 WebDeploy 部署 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 應用程式,而是可以將其發佈至可從 Web 應用程式存取的儲存體系統,並觸發應用程式從儲存位置提取 ZIP。

遠端 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 來指定目標路徑。
Yes String
restart true|false 根據預設,此 API 會在部署作業之後重新啟動應用程式 (restart=true)。 若要部署多個成品,請設定 restart=false 只在最終部署時重新啟動。 No 布林值
clean true|false 指定在該處部署成品之前,是否要清除 (刪除) 目標部署。 No 布林值
ignorestack true|false 此發佈 API 使用 WEBSITE_STACK 環境變數,根據您網站的語言堆疊來選擇安全預設值。 將此參數設定為 false 會停用任何特定語言的預設值。 No 布林值
target-path 絕對路徑 要部署成品的目標絕對路徑。 例如,"/home/site/deployments/tools/driver.jar""/home/site/scripts/helper.sh" No String

下一步

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

更多資源