本文說明如何將您的程式碼以 ZIP、WAR、JAR 或 EAR 套件形式部署到 Azure App Service。 它也會示範如何將個別檔案部署至 App Service,與應用程式套件分開。
必要條件
若要完成本文中的步驟,請建立 App Service 應用程式,或使用您為另一個教學課程建立的應用程式。
如果您沒有 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 為您執行部署自動化,請執行所有建置工作。 例如:npm
、、bower
gulp
、composer
、 和 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 部署介面進行部署
- 在 Azure 入口網站中開啟您的應用程式,然後選取 [開發工具>],然後選取 [移至]。
- 在 Kudu 中,選取 工具>Zip 推送部署。
- 上傳您在 建立專案 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 套件
您可以將 WAR、 JAR 或 EAR 套件部署到 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.jar 。
target-path 參數會被忽略。 type=ear :將 EAR 套件部署至 /home/site/wwwroot/app.ear 。
target-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 等等。