Skip to main content
설명서에 자주 업데이트를 게시하며 이 페이지의 번역이 계속 진행 중일 수 있습니다. 최신 정보는 영어 설명서를 참조하세요.

Azure App Service에 PHP 배포

CD(지속적인 배포) 워크플로의 일부로 Azure App Service에 PHP 프로젝트를 배포할 수 있습니다.

참고: GitHub 호스트 실행기는 현재 GitHub Enterprise Server에서 지원되지 않습니다. GitHub public roadmap에 예정된 향후 지원에 대해 자세히 알아볼 수 있습니다.

소개

이 가이드에서는 GitHub Actions를 사용하여 PHP 프로젝트를 Azure App Service 에 빌드하고 배포하는 방법에 대해 설명합니다.

참고: GitHub Actions 워크플로가 OIDC(OpenID Connect)를 지원하는 클라우드 공급자의 리소스에 액세스해야 하는 경우 클라우드 공급자에게 직접 인증하도록 워크플로를 구성할 수 있습니다. 이렇게 하면 이러한 자격 증명을 수명이 긴 비밀로 저장하지 않을 수 있고 다른 보안 이점을 제공할 수 있습니다. 자세한 내용은 “OpenID Connect 보안 강화 정보”를 참조하세요. 및 “Azure에서 OpenID Connect 구성.”

필수 조건

GitHub Actions 워크플로를 만들기 전에 먼저 다음 설정 단계를 완료해야 합니다.

  1. Azure App Service 요금제를 만듭니다.

    예를 들어 Azure CLI를 사용하여 새 App Service 요금제를 만들 수 있습니다.

    Shell
    az appservice plan create \
       --resource-group MY_RESOURCE_GROUP \
       --name MY_APP_SERVICE_PLAN \
       --is-linux

    위의 명령에서 MY_RESOURCE_GROUP을 기존 Azure 리소스 그룹으로 바꾸고 MY_APP_SERVICE_PLAN을 App Service 요금제의 새 이름으로 바꿉니다.

    Azure CLI 사용에 대한 자세한 내용은 Azure 설명서를 참조하세요.

  2. 웹앱 만들기

    예를 들어 Azure CLI를 사용하여 PHP 런타임으로 Azure App Service 웹앱을 만들 수 있습니다.

    Shell
    az webapp create \
        --name MY_WEBAPP_NAME \
        --plan MY_APP_SERVICE_PLAN \
        --resource-group MY_RESOURCE_GROUP \
        --runtime "php|7.4"

    위의 명령에서 매개 변수를 고유한 값으로 바꿉니다. 여기서 MY_WEBAPP_NAME은 웹앱의 새 이름입니다.

  3. Azure 게시 프로필을 구성하고 AZURE_WEBAPP_PUBLISH_PROFILE 비밀을 만듭니다.

    게시 프로필을 사용하여 Azure 배포 자격 증명을 생성합니다. 자세한 내용은 Azure 설명서의 “배포 자격 증명 생성”을 참조하세요.

    GitHub 리포지토리에서 게시 프로필의 콘텐츠가 포함된 AZURE_WEBAPP_PUBLISH_PROFILE이라는 비밀을 만듭니다. 비밀을 만드는 방법에 대한 자세한 내용은 “암호화된 암호”를 참조하세요.

  4. 필요에 따라 배포 환경을 구성합니다. 환경은 일반적인 배포 대상(예: production, staging 또는 development)을 설명하는 데 사용됩니다. GitHub Actions 워크플로가 환경에 배포되면 환경이 리포지토리의 기본 페이지에 표시됩니다. 환경을 사용하여 작업을 진행하기 위한 승인을 요구하거나, 워크플로를 트리거할 수 있는 분기를 제한하거나, 비밀에 대한 액세스를 제한할 수 있습니다. 환경 만들기에 대한 자세한 내용은 “배포에 환경 사용”을 참조하세요.

워크플로 만들기

필수 구성 요소를 완료한 후에는 워크플로 만들기를 진행할 수 있습니다.

다음 예제 워크플로는 main 분기에 푸시가 있을 때 PHP 프로젝트를 빌드하고 Azure App Service에 배포하는 방법을 보여 줍니다.

워크플로 env 키에서 AZURE_WEBAPP_NAME을 만든 웹앱의 이름으로 설정했는지 확인합니다. 프로젝트 경로가 리포지토리 루트가 아닌 경우 AZURE_WEBAPP_PACKAGE_PATH를 프로젝트로의 경로로 변경합니다. 8.x 이외의 PHP 버전을 사용하는 경우 PHP_VERSION을 사용 중인 버전으로 변경합니다.

배포 환경을 구성한 경우 환경의 이름으로 environment 값을 변경합니다. 환경을 구성하지 않은 경우 environment 키를 삭제합니다.

YAML
# <a name="this-workflow-uses-actions-that-are-not-certified-by-github"></a>이 워크플로는 GitHub에서 인증되지 않은 작업을 사용합니다.
# <a name="they-are-provided-by-a-third-party-and-are-governed-by"></a>작업은 타사에서 제공하며
# <a name="separate-terms-of-service-privacy-policy-and-support"></a>별도의 서비스 약관, 개인정보처리방침, 지원 설명서에서 규정됩니다.
# <a name="documentation"></a>참조하세요.

# <a name="github-recommends-pinning-actions-to-a-commit-sha"></a>커밋 SHA에 작업을 고정하는 것이 좋습니다.
# <a name="to-get-a-newer-version-you-will-need-to-update-the-sha"></a>최신 버전을 얻으려면 SHA를 업데이트해야 합니다.
# <a name="you-can-also-reference-a-tag-or-branch-but-the-action-may-change-without-warning"></a>태그 또는 분기를 참조할 수도 있지만 경고 없이 작업이 변경될 수 있습니다.

name: Build and deploy PHP app to Azure Web App

env:
  AZURE_WEBAPP_NAME: MY_WEBAPP_NAME   # set this to your application's name
  AZURE_WEBAPP_PACKAGE_PATH: '.'      # set this to the path to your web app project, defaults to the repository root
  PHP_VERSION: '8.x'                  # set this to the PHP version to use

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v3

      - name: Setup PHP
        uses: shivammathur/setup-php@v2
        with:
          php-version: ${{ env.PHP_VERSION }}

      - name: Check if composer.json exists
        id: check_files
        uses: andstor/file-existence-action@v1
        with:
          files: 'composer.json'

      - name: Get Composer Cache Directory
        id: composer-cache
        if: steps.check_files.outputs.files_exists == 'true'
        run: |
          echo "::set-output name=dir::$(composer config cache-files-dir)"

      - name: Set up dependency caching for faster installs
        uses: actions/cache@v3
        if: steps.check_files.outputs.files_exists == 'true'
        with:
          path: ${{ steps.composer-cache.outputs.dir }}
          key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
          restore-keys: |
            ${{ runner.os }}-composer-

      - name: Run composer install if composer.json exists
        if: steps.check_files.outputs.files_exists == 'true'
        run: composer validate --no-check-publish && composer install --prefer-dist --no-progress

      - name: Upload artifact for deployment job
        uses: actions/upload-artifact@v3
        with:
          name: php-app
          path: .

  deploy:
    runs-on: ubuntu-latest
    needs: build
    environment:
      name: 'production'
      url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}

    steps:
      - name: Download artifact from build job
        uses: actions/download-artifact@v3
        with:
          name: php-app

      - name: 'Deploy to Azure Web App'
        id: deploy-to-webapp
        uses: azure/webapps-deploy@0b651ed7546ecfc75024011f76944cb9b381ef1e
        with:
          app-name: ${{ env.AZURE_WEBAPP_NAME }}
          publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}
          package: .

추가 리소스

다음 리소스도 유용할 수 있습니다.

  • 원래의 시작 워크플로는 GitHub Actions starter-workflows 리포지토리의 azure-webapps-php.yml을 참조하세요.
  • 웹앱을 배포하는 데 사용되는 작업은 공식 Azure Azure/webapps-deploy 작업입니다.
  • Azure에 배포하는 GitHub Actions 워크플로에 대한 자세한 예제는 actions-workflow-samples 리포지토리를 참조하세요.