App Service에 파일 배포
참고 항목
2024년 6월 1일부터, 새로 만들어진 모든 App Service 앱에는 명명 규칙 <app-name>-<random-hash>.<region>.azurewebsites.net
을 사용하여 고유한 기본 호스트 이름을 생성할 수 있는 옵션이 제공됩니다. 기존 앱 이름은 변경되지 않은 상태로 유지됩니다.
예: myapp-ds27dh7271aah175.westus-01.azurewebsites.net
자세한 내용은 App Service 리소스의 고유 기본 호스트 이름을 참조하세요.
이 문서에서는 코드를 ZIP, WAR, JAR 또는 EAR 패키지로서 Azure App Service에 배포하는 방법을 보여 줍니다. 애플리케이션 패키지와 별도로 개별 파일을 App Service에 배포하는 방법도 확인할 수 있습니다.
필수 조건
이 문서의 단계를 완료하려면 App Service 앱을 만들거나다른 자습서에 대해 만든 앱을 사용합니다.
Azure를 구독하고 있지 않다면 시작하기 전에 Azure 체험 계정을 만듭니다.
프로젝트 ZIP 패키지 만들기
Important
배포를 위해 ZIP 패키지를 만들 때 루트 디렉터리가 아니라 파일 및 디렉터리만 포함합니다. GitHub 리포지토리를 ZIP 파일로 다운로드하는 경우 해당 파일을 그대로 App Service에 배포할 수 없습니다. GitHub는 App Service에서 작동하지 않는 최상위 수준에 중첩된 디렉터리를 추가합니다.
로컬 터미널 창에서 앱 프로젝트의 루트 디렉터리로 이동합니다.
이 디렉터리는 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는 콘텐츠를 앱의 기본 경로(Windows에서는 D:\home\site\wwwroot
, Linux에서는 /home/site/wwwroot
)에 풉니다.
이 ZIP 패키지는 지속적인 통합 기반 배포를 지원하는 동일한 Kudu 서비스를 사용합니다. Kudu는 ZIP 패키지 배포에 대해 다음 기능을 지원합니다.
- 이전 배포의 남은 파일 삭제.
- 패키지 복원을 포함하는 기본 빌드 프로세스를 켜는 옵션.
- 배포 스크립트 실행을 포함한 배포 사용자 지정.
- 배포 로그.
- 패키지 크기 제한은 2048MB입니다.
참고 항목
ZIP 패키지에 있는 파일은 타임스탬프가 이미 배포된 파일의 타임스탬프와 일치하지 않는 경우에만 복사됩니다.
Kudu에서 zip 배포 UI 사용
브라우저에서 https://<app_name>.scm.azurewebsites.net/ZipDeployUI
로 이동합니다(상단 참고 참조).
웹 페이지의 파일 탐색기 영역으로 끌어서 프로젝트 ZIP 패키지 만들기에서 만든 ZIP 패키지를 업로드합니다.
배포가 진행 중일 때 오른쪽 위 모서리의 아이콘에서는 진행률을 백분율로 보여줍니다. 페이지도 탐색기 영역 아래에서 작업에 대한 자세한 정보 메시지를 표시합니다. 배포가 완료되면 마지막 메시지에 Deployment successful
이 표시되어야 합니다.
현재 Linux App Services에서는 위의 엔드포인트가 작동하지 않습니다. 대신 FTP 또는 ZIP 배포 API를 사용하는 것이 좋습니다.
Kudu에서 zip 배포 UI가 없는 경우
az webapp deploy 명령을 사용하여 ZIP 패키지를 웹앱에 배포합니다. 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 배포와 동일한 빌드 자동화를 사용하도록 하려면 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 패키지 배포
WAR, JAR 또는 EAR 패키지를 App Service에 배포하여 Azure CLI, PowerShell 또는 Kudu 게시 API를 사용해 Java 웹앱을 실행할 수 있습니다.
여기에 표시된 배포 프로세스는 올바른 명명 규칙 및 디렉터리 구조(Kudu 게시 API 참조 참조)를 사용하여 앱의 콘텐츠 공유에 패키지를 배치하며, 권장되는 방법입니다. 대신 FTP 또는 WebDeploy를 사용하여 WAR/JAR/EAR 패키지를 배포하는 경우 명명 또는 구조의 실수로 인해 알 수 없는 오류가 발생할 수 있습니다.
az webapp deploy 명령을 사용하여 Tomcat 또는 JBoss EAP에 WAR 패키지를 배포합니다. --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
매개 변수를 사용하여 시작 스크립트, 라이브러리, 정적 파일을 웹앱에 배포합니다.
이러한 방식으로 시작 스크립트를 배포하는 경우 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
네트워크 보안 앱에 배포
웹앱의 네트워킹 구성에 따라 개발 환경에서 앱에 대한 직접 액세스가 차단될 수 있습니다(네트워크 보안 사이트에 배포 및 네트워크 보안 사이트에 배포 2부 참조). 패키지 또는 파일을 웹앱에 직접 푸시하는 대신 웹앱에서 액세스할 수 있는 스토리지 시스템에 게시하고 앱을 트리거하여 스토리지 위치에서 ZIP을 끌어올 수 있습니다.
원격 URL은 공개적으로 액세스할 수 있는 위치일 수 있지만 SAS 키가 있는 Blob Storage 컨테이너를 사용하여 보호하는 것이 가장 좋습니다.
다른 섹션에서와 마찬가지로 az webapp deploy
명령을 사용하되 --src-path
대신 --src-url
을 사용합니다. 다음 예제에서는 --src-url
매개 변수를 사용하여 Azure Storage 계정에서 호스트되는 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 |
---|---|---|---|---|
type |
war |jar |ear |lib |startup |static |zip |
배포되는 아티팩트의 형식입니다. 기본 대상 경로를 설정하고, 배포를 처리하는 방법을 웹앱에 알리는 역할을 합니다. - 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에서 자동으로 사용자 앱의 시작 스크립트로 사용할 스크립트를 배포합니다. 기본적으로 스크립트는 Windows에서는 D:\home\site\scripts\<name-of-source> 에, Linux에서는 home/site/wwwroot/startup.sh 에 배포됩니다. 대상 경로는 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에 배포를 시도하세요. Azure로의 Git 기반 배포를 수행하면 버전 제어, 패키지 복원, MSBuild 등을 수행할 수 있습니다.