Azure App Service에서 PHP 웹앱 만들기

Azure App Service는 확장성 높은 자체 패치 웹 호스팅 서비스를 제공합니다. 이 빠른 시작 자습서에서는 PHP 앱을 Windows의 Azure App Service에 배포하는 방법을 보여줍니다.

Cloud Shell에서 Azure CLI를 사용하여 웹앱을 만들고 Git을 사용하여 웹앱에 샘플 PHP 코드를 배포합니다.

Sample app running in Azure

Mac, Windows 또는 Linux 컴퓨터를 사용하여 여기서 설명하는 단계를 수행하면 됩니다. 필수 구성 요소가 설치된 후 단계를 완료하는 데는 약 5분 정도 걸립니다.

Azure를 구독하고 있지 않다면 시작하기 전에 Azure 체험 계정을 만듭니다.

필수 조건

이 빠른 시작을 완료하려면 다음이 필요합니다.

로컬로 샘플 다운로드

  1. 터미널 창에서 다음 명령을 실행합니다. 그러면 샘플 애플리케이션이 로컬 머신에 복제되고 샘플 코드가 들어 있는 디렉터리로 이동합니다.

    git clone https://github.com/Azure-Samples/php-docs-hello-world
    cd php-docs-hello-world
    
  2. 기본 분기가 main인지 확인합니다.

    git branch -m main
    

    App Service에는 분기 이름 변경이 필요하지 않습니다. 그러나 많은 리포지토리가 기본 분기를 main으로 변경하고 있으므로 이 빠른 시작에서는 main에서 리포지토리를 배포하는 방법도 보여 줍니다.

로컬에서 앱 실행하기

  1. 애플리케이션을 로컬로 실행하여 Azure에 애플리케이션을 배포할 때 표시되는 모양을 확인합니다. 터미널 창을 열고 php 명령을 사용하여 기본 제공 PHP 웹 서버를 시작합니다.

    php -S localhost:8080
    
  2. 웹 브라우저를 열고 http://localhost:8080의 샘플 앱으로 이동합니다.

    이 페이지에 표시된 샘플 앱에서 Hello World! 메시지가 표시됩니다.

    Sample app running locally

  3. 터미널 창에서 Ctrl+C를 눌러 웹 서버를 종료합니다.

Azure Cloud Shell

Azure는 브라우저를 통해 사용할 수 있는 대화형 셸 환경인 Azure Cloud Shell을 호스트합니다. Cloud Shell에서 Bash 또는 PowerShell을 사용하여 Azure 서비스 작업을 수행할 수 있습니다. 로컬 환경에 아무 것도 설치할 필요 없이 Azure Cloud Shell의 미리 설치된 명령을 사용하여 이 문서의 코드를 실행할 수 있습니다.

Azure Cloud Shell을 시작하려면 다음을 수행합니다.

옵션 예제/링크
코드 또는 명령 블록의 오른쪽 상단에서 시도를 선택합니다. 시도를 선택해도 코드 또는 명령이 Cloud Shell에 자동으로 복사되지 않습니다. Screenshot that shows an example of Try It for Azure Cloud Shell.
https://shell.azure.com으로 이동하거나 Cloud Shell 시작 단추를 선택하여 브라우저에서 Cloud Shell을 엽니다. Button to launch Azure Cloud Shell.
Azure Portal의 오른쪽 위에 있는 메뉴 모음에서 Cloud Shell 단추를 선택합니다. Screenshot that shows the Cloud Shell button in the Azure portal

Azure Cloud Shell을 사용하려면:

  1. Cloud Shell을 시작합니다.

  2. 코드 블록(또는 명령 블록)에서 복사 단추를 선택하여 코드 또는 명령을 복사합니다.

  3. Windows 및 Linux에서 Ctrl+Shift+V를 선택하거나 macOS에서 Cmd+Shift+V를 선택하여 코드 또는 명령을 Cloud Shell 세션에 붙여넣습니다.

  4. Enter를 선택하여 코드 또는 명령을 실행합니다.

배포 사용자 구성

FTP 및 로컬 Git는 배포 사용자를 통해 Azure 웹앱에 배포할 수 있습니다. 일단 배포 사용자를 구성하면 모든 Azure 배포에 사용할 수 있습니다. 계정 수준 배포 사용자 이름 및 암호는 Azure 구독 자격 증명과 다릅니다.

배포 사용자를 구성하려면 Azure Cloud Shell에서 az webapp deployment user set 명령을 실행합니다. <사용자 이름> 및 <암호>를 배포 사용자 이름 및 암호로 바꿉니다.

  • 사용자 이름은 Azure 내에서 고유해야 하고, 로컬 Git 푸시의경우 ' @' 기호를 포함하면 안 됩니다.
  • 암호는 글자, 숫자, 기호의 세 가지 요소 중 두 가지를 사용하고 8자 이상이어야 합니다.
az webapp deployment user set --user-name <username> --password <password>

JSON 출력에는 암호가 null로 나옵니다. 'Conflict'. Details: 409 오류가 발생하면 사용자 이름을 변경합니다. 'Bad Request'. Details: 400 오류가 발생하면 더 강력한 암호를 사용합니다.

웹앱을 배포할 때 사용할 수 있도록 사용자 이름 및 암호를 기록해 둡니다.

리소스 그룹 만들기

리소스 그룹은 웹앱, 데이터베이스, 스토리지 계정과 같은 Azure 리소스가 배포되고 관리되는 논리적 컨테이너입니다. 예를 들어 나중에 간단한 단계 하나만으로 전체 리소스 그룹을 삭제하도록 선택할 수 있습니다.

Cloud Shell에서 az group create 명령을 사용하여 리소스 그룹을 만듭니다. 다음 예제에서는 서유럽 위치에 myResourceGroup이라는 리소스 그룹을 만듭니다. 체험 계층에서 App Service에 지원되는 모든 위치를 확인하려면 az appservice list-locations --sku FREE 명령을 실행합니다.

az group create --name myResourceGroup --location "West Europe"

일반적으로 사용자와 가까운 지역에서 리소스 그룹 및 리소스를 만듭니다.

명령이 완료되면 JSON 출력이 리소스 그룹 속성을 보여줍니다.

Azure App Service 계획 만들기

Cloud Shell에서 az appservice plan create 명령을 사용하여 App Service 계획을 만듭니다.

다음 예에서는 체험 가격 책정 계층에서 myAppServicePlan이라는 App Service 계획을 만듭니다.

az appservice plan create --name myAppServicePlan --resource-group myResourceGroup --sku FREE --is-linux

App Service 계획을 만든 경우 Azure CLI는 다음 예제와 비슷한 정보를 표시합니다.

{ 
  "freeOfferExpirationTime": null,
  "geoRegion": "West Europe",
  "hostingEnvironmentProfile": null,
  "id": "/subscriptions/0000-0000/resourceGroups/myResourceGroup/providers/Microsoft.Web/serverfarms/myAppServicePlan",
  "kind": "linux",
  "location": "West Europe",
  "maximumNumberOfWorkers": 1,
  "name": "myAppServicePlan",
  < JSON data removed for brevity. >
  "targetWorkerSizeId": 0,
  "type": "Microsoft.Web/serverfarms",
  "workerTierName": null
} 

웹앱 만들기

  1. Cloud Shell에서 az webapp create 명령을 사용하여 myAppServicePlan App Service 계획에 웹앱을 만듭니다.

    다음 예에서 <app-name>을 전역적으로 고유한 앱 이름으로 바꿉니다(유효한 문자는 a-z, 0-9-). 런타임은 PHP|7.4으로 설정됩니다. 지원되는 모든 런타임을 보려면 az webapp list-runtimes를 실행합니다.

    az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name <app-name> --runtime 'PHP|8.1' --deployment-local-git
    

    웹앱이 만들어지면 Azure CLI는 다음 예제와 비슷한 출력을 표시합니다.

     Local git is configured with url of 'https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git'
     {
       "availabilityState": "Normal",
       "clientAffinityEnabled": true,
       "clientCertEnabled": false,
       "cloningInfo": null,
       "containerSize": 0,
       "dailyMemoryTimeQuota": 0,
       "defaultHostName": "<app-name>.azurewebsites.net",
       "enabled": true,
       < JSON data removed for brevity. >
     }
     

    git 배포를 활성화하여 새 빈 웹앱을 만들었습니다.

    참고 항목

    Git 원격의 URL은 https://<username>@<app-name>.scm.azurewebsites.net/<app-name>.git 형식으로 deploymentLocalGitUrl 속성에 표시됩니다. 나중에 필요하므로 이 URL을 저장합니다.

  2. 새로 만든 웹앱으로 이동합니다. <app-name>을 이전 단계에서 만든 고유한 앱 이름으로 바꿉니다.

    http://<app-name>.azurewebsites.net
    

    새로운 웹앱은 다음과 같아야 합니다.

    Empty web app page

Git에서 Azure에 푸시

  1. main 분기를 배포하고 있으므로 App Service 앱의 기본 배포 분기를 main로 설정해야 합니다(배포 분기 변경 참조). Cloud Shell에서 az webapp config appsettings set 명령으로 DEPLOYMENT_BRANCH 앱 설정을 지정합니다.

    az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings DEPLOYMENT_BRANCH='main'
    
  2. 로컬 터미널 창으로 돌아와서 로컬 Git 리포지토리에 Azure 원격을 추가합니다. <deploymentLocalGitUrl-from-create-step>웹앱 만들기에서 저장한 Git 원격의 URL로 바꿉니다.

    git remote add azure <deploymentLocalGitUrl-from-create-step>
    
  3. 다음 명령을 사용하여 Azure 원격에 푸시하여 앱을 배포합니다. Git Credential Manager에서 자격 증명을 묻는 메시지가 표시되면 Azure Portal에 로그인하는 데 사용하는 자격 증명이 아니라 배포 사용자 구성에서 만든 자격 증명을 입력해야 합니다.

    git push azure main
    

    이 명령을 실행하는 데 몇 분 정도 걸릴 수 있습니다. 실행 시 다음 예와 유사한 정보를 출력합니다.

  Counting objects: 2, done.
  Delta compression using up to 4 threads.
  Compressing objects: 100% (2/2), done.
  Writing objects: 100% (2/2), 352 bytes | 0 bytes/s, done.
  Total 2 (delta 1), reused 0 (delta 0)
  remote: Updating branch 'main'.
  remote: Updating submodules.
  remote: Preparing deployment for commit id '25f18051e9'.
  remote: Generating deployment script.
  remote: Running deployment command...
  remote: Handling Basic Web Site deployment.
  remote: Kudu sync from: '/home/site/repository' to: '/home/site/wwwroot'
  remote: Copying file: '.gitignore'
  remote: Copying file: 'LICENSE'
  remote: Copying file: 'README.md'
  remote: Copying file: 'index.php'
  remote: Ignoring: .git
  remote: Finished successfully.
  remote: Running post deployment command(s)...
  remote: Deployment successful.
  To https://<app-name>.scm.azurewebsites.net/<app-name>.git
      cc39b1e..25f1805  main -> main
  

앱으로 이동

웹 브라우저를 사용하여 배포된 애플리케이션으로 이동합니다.

http://<app-name>.azurewebsites.net

PHP 샘플 코드는 Azure App Service 웹앱에서 실행 중입니다.

Sample app running in Azure

축하합니다! App Service에 첫 번째 PHP 앱을 배포했습니다.

로컬로 코드 업데이트 및 다시 배포

  1. 로컬 텍스트 편집기를 사용하여 PHP 앱 내에서 index.php 파일을 열고 echo 옆에 있는 문자열 내의 텍스트를 약간 변경합니다.

    echo "Hello Azure!";
    
  2. 로컬 터미널 창에서 Git의 변경 내용을 커밋한 다음 Azure에 코드 변경 내용을 푸시합니다.

    git commit -am "updated output"
    git push azure main
    
  3. 배포가 완료되면 앱으로 이동 단계 중 열린 브라우저 창으로 돌아가서 페이지를 새로 고칩니다.

    Updated sample app running in Azure

새 Azure 앱 관리

  1. 만든 웹앱을 관리하려면 Azure Portal로 이동합니다. App Services를 검색하여 선택합니다.

    Search for App Services, Azure portal, create PHP web app

  2. Azure 앱의 이름을 선택합니다.

    Portal navigation to Azure app

    웹앱의 개요 페이지가 표시됩니다. 여기에서 찾아보기, 중지, 다시 시작삭제와 같은 기본 관리 작업을 수행할 수 있습니다.

    App Service page in Azure portal

    웹앱 메뉴는 앱 구성을 위한 서로 다른 옵션을 제공합니다.

리소스 정리

이전 단계에서는 리소스 그룹에서 Azure 리소스를 만들었습니다. 나중에 이러한 리소스가 필요하지 않을 것 같으면 Cloud Shell에서 다음 명령을 실행하여 리소스 그룹을 삭제합니다.

az group delete --name myResourceGroup

이 명령을 실행하는 데 1분 정도 걸릴 수 있습니다.

Azure App Service는 확장성 높은 자체 패치 웹 호스팅 서비스를 제공합니다. 이 빠른 시작에서는 PHP 앱을 Linux의 Azure App Service에 배포하는 방법을 보여 줍니다.

Screenshot of the sample app running in Azure.

Mac, Windows 또는 Linux 컴퓨터를 사용하여 여기서 설명하는 단계를 수행하면 됩니다. 필수 구성 요소가 설치된 후 단계를 완료하는 데는 약 5분 정도 걸립니다.

이 빠른 시작을 완료하려면 다음이 필요합니다.

1 - 샘플 리포지토리 가져오기

Cloud Shell에서 Azure CLI를 사용하여 웹앱을 만들고 Git을 사용하여 웹앱에 샘플 PHP 코드를 배포할 수 있습니다.

  1. 터미널 창에서 다음 명령을 실행하여, 샘플 애플리케이션을 로컬 머신에 복제하고 프로젝트 루트로 이동합니다.

    git clone https://github.com/Azure-Samples/php-docs-hello-world
    cd php-docs-hello-world
    
  2. 애플리케이션을 로컬로 실행하려면 php 명령을 사용하여 기본 제공 PHP 웹 서버를 시작합니다.

    php -S localhost:8080
    
  3. 웹 브라우저에서 http://localhost:8080에 있는 샘플 애플리케이션을 찾습니다.

    Screenshot of the sample app running locally.

  4. 터미널 창에서 Ctrl+C를 눌러 웹 서버를 종료합니다.

2 - Azure에 애플리케이션 코드 배포

Azure CLI에는 필요한 리소스를 만들고 한 단계로 애플리케이션을 배포하는 az webapp up 명령이 있습니다.

터미널에서 az webapp up 명령을 사용하여 로컬 폴더에 코드를 배포합니다.

az webapp up --runtime "PHP:8.2" --os-type=linux
  • az 명령이 인식되지 않을 경우 Azure CLI가 설치되어 있어야 합니다.
  • --runtime "PHP:8.2" 인수는 PHP 버전 8.2를 사용하여 웹앱을 만듭니다.
  • --os-type=linux 인수는 App Service on Linux에서 웹앱을 만듭니다.
  • 필요에 따라 인수 --name <app-name>을 사용하여 이름을 지정할 수 있습니다. 이름을 제공하지 않으면 이름이 자동으로 생성됩니다.
  • 선택적으로 인수 --location <location-name>을 포함할 수 있습니다. 여기서 <location_name>은 사용 가능한 Azure 지역입니다. Azure 계정에 허용되는 지역 목록은 az account list-locations 명령을 실행하여 검색할 수 있습니다.
  • "앱의 런타임 스택을 자동으로 검색할 수 없습니다" 오류가 표시되면 코드 디렉터리에서 명령을 실행하고 있는지 확인합니다(az webapp up으로 자동 검색 문제 해결 참조).

명령을 완료하는 데 몇 분이 걸릴 수 있습니다. 이 명령이 실행되는 동안 리소스 그룹, App Service 플랜 및 앱 리소스 만들기, 로깅 구성, ZIP 배포 수행에 대한 메시지가 제공됩니다. 그런 다음, "http://<app-name>.azurewebsites.net에서 앱을 시작할 수 있습니다."라는 메시지를 제공합니다. 이 메시지는 Azure에서 앱의 URL입니다.

The webapp '<app-name>' doesn't exist
Creating Resource group '<group-name>' ...
Resource group creation complete
Creating AppServicePlan '<app-service-plan-name>' ...
Creating webapp '<app-name>' ...
Configuring default logging for the app, if not already enabled
Creating zip with contents of dir /home/msangapu/myPhpApp ...
Getting scm site credentials for zip deployment
Starting zip deployment. This operation can take a while to complete ...
Deployment endpoint responded with status code 202
You can launch the app at http://<app-name>.azurewebsites.net
{
  "URL": "http://<app-name>.azurewebsites.net",
  "appserviceplan": "<app-service-plan-name>",
  "location": "centralus",
  "name": "<app-name>",
  "os": "linux",
  "resourcegroup": "<group-name>",
  "runtime_version": "php|8.2",
  "runtime_version_detected": "0.0",
  "sku": "FREE",
  "src_path": "//home//msangapu//myPhpApp"
}

참고 항목

az webapp up 명령에는 다음 작업이 포함됩니다.

  • 기본 리소스 그룹을 만듭니다.

  • 기본 App Service 계획을 만듭니다.

  • 지정된 이름으로 앱을 만듭니다.

  • Zip빌드 자동화가 활성화된 현재 작업 디렉터리의 모든 파일을 배포합니다.

  • az webapp up 또는 프로젝트 폴더의 다른 az webapp 명령을 사용하여 나중에 배포할 때 다시 지정할 필요가 없도록 azure/config 파일에서 매개 변수를 로컬로 캐시합니다. 캐시된 값은 기본적으로 자동으로 사용됩니다.

웹 브라우저에서 배포된 애플리케이션(URL: http://<app-name>.azurewebsites.net)으로 이동합니다.

PHP 샘플 코드는 Azure App Service에서 실행 중입니다.

Screenshot of the sample app running in Azure, showing 'Hello World!'.

축하합니다! Azure Portal을 사용하여 App Service에 첫 번째 PHP 앱을 배포했습니다.

3 - 앱 업데이트 및 다시 배포

  1. 로컬 텍스트 편집기를 사용하여 PHP 앱 내에서 index.php 파일을 열고 echo 옆에 있는 문자열 내의 텍스트를 약간 변경합니다.

    echo "Hello Azure!";
    
  2. 변경 내용을 저장한 다음, 다음 인수로 az webapp up 명령을 사용하여 앱을 다시 배포합니다.

    az webapp up --runtime "PHP:8.2" --os-type=linux
    
  3. 배포가 완료되면 앱으로 이동 단계 중 열린 브라우저 창으로 돌아가서 페이지를 새로 고칩니다.

    Screenshot of the updated sample app running in Azure.

4 - 새 Azure 앱 관리

  1. 만든 웹앱을 관리하려면 Azure Portal로 이동합니다. App Services를 검색하여 선택합니다.

    Screenshot of the Azure portal with 'app services' typed in the search text box. In the results, the App Services option under Services is highlighted.

  2. Azure 앱의 이름을 선택합니다.

    Screenshot of the App Services list in Azure. The name of the demo app service is highlighted.

    웹앱의 개요 페이지가 표시됩니다. 여기에서 찾아보기, 중지, 다시 시작삭제와 같은 기본 관리 작업을 수행할 수 있습니다.

    Screenshot of the App Service overview page in Azure portal. In the action bar, the Browse, Stop, Swap (disabled), Restart, and Delete button group is highlighted.

    웹앱 메뉴는 앱 구성을 위한 서로 다른 옵션을 제공합니다.

5 - 리소스 정리

샘플 앱을 마쳤으면 Azure에서 앱에 대한 모든 리소스를 제거해도 됩니다. 추가 요금을 방지하고 Azure 구독을 깔끔하게 유지하는 데 도움이 됩니다. 리소스 그룹을 제거하면 리소스 그룹의 모든 리소스도 제거되며 이것이 앱에 대한 모든 Azure 리소스를 제거하는 가장 빠른 방법입니다.

az group delete 명령을 사용하여 리소스 그룹을 삭제합니다.

az group delete --name myResourceGroup

이 명령을 실행하는 데 1분이 걸립니다.

다음 단계