Skip to main content

Implantando o PHP no Azure App Service

Você pode fazer a implantação do seu projeto PHP no Azure App Service como parte de seus fluxos de trabalho de implantação contínua (CD).

Observação: Executores hospedados em GitHub não são atualmente compatíveis com GitHub Enterprise Server. Você pode ver mais informações sobre suporte futuro planejado no Itinerário público do GitHub.

Introdução

Este guia explica como usar GitHub Actions para criar e implantar um projeto PHP no Azure App Service.

Observação: Se os seus fluxos de trabalho de GitHub Actions tiverem de acessar recursos de um provedor de nuvem compatível com o OpenID Connect (OIDC), você poderá configurar seus fluxos de trabalho para efetuar a autenticção diretamente no provedor de nuvem. Isso permitirá que você pare de armazenar essas credenciais como segredos de longa duração e proporcione outros benefícios de segurança. Para obter mais informações, consulteSobre segurança fortalecida com OpenID Connect" e "Configurando OpenID Connect no Azure."

Pré-requisitos

Antes de criar seu fluxo de trabalho de GitHub Actions, primeiro você precisa concluir as etapas de configuração a seguir:

  1. Crie um plano do Azure App Service.

    Por exemplo, você pode usar o CLI do Azure para criar um novo plano de App Service:

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

    No comando acima, substitua MY_RESOURCE_GROUP pelo seu Grupo de Recursos do Azure pré-existente, e MY_APP_SERVICE_PLAN por um novo nome para o plano do App Service.

    Para obter mais informações, consulte a documentação do Azure usando o CLI do Azure:

  2. Crie um aplicativo web.

    Por exemplo, você pode usar o CLI do Azure para criar um aplicativo web do com o tempo de execução do PHP:

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

    No comando acima, substitua os parâmetros pelos seus próprios valores, em que MY_WEBAPP_NAME é um novo nome para o aplicativo web.

  3. Configure um perfil de publicação do Azure e crie um segredo de AZURE_WEBAPP_PUBLISH_PROFILE.

    Gere suas credenciais de implantação do Azure usando um perfil de publicação. Para obter mais informações, consulte "Gerar credenciais de implantação" na documentação do Azure.

    No seu repositório GitHub, crie um segredo denominado AZURE_WEBAPP_PUBLISH_PROFILE que contém o conteúdo do perfil de publicação. Para obter mais informações sobre a criação de segredos, consulte "Segredos criptografados".

  4. Opcionalmente, configure um ambiente de implantação. Os ambientes são usados para descrever um alvo geral de implantação como produção, preparo ou desenvolvimento. Quando um fluxo de trabalho de GitHub Actions é implantado em um ambiente, o ambiente é exibido na página principal do repositório. Você pode usar ambientes para exigir aprovação para um trabalho para prosseguir, restringir quais branches podem acionar um fluxo de trabalho ou limitar o acesso a segredos. Para obter mais informações sobre criar ambientes, consulte "Usando ambientes para implantação".

Criar o fluxo de trabalho

Depois de preencher os pré-requisitos, você pode prosseguir com a criação do fluxo de trabalho.

O exemplo a seguir de fluxo de trabalho demonstra como construir e implantar um projeto PHP para o Azure App Service quando há um push para o branch principal.

Certifique-se de definir AZURE_WEBAPP_NAME na chave de fluxo de trabalho env como o nome do aplicativo web que você criou. Se o caminho para o seu projeto não for a raiz do repositório, mude AZURE_WEBAPP_PACKAGE_PATH para o caminho do seu projeto. Se você usar uma versão de PHP diferente do 8.x, mude PHP_VERSION para a versão que você usa.

Se você configurou um ambiente de implementação, altere o valor do ambiente para o nome do seu ambiente. Se você não configurou um ambiente, exclua a chave ambiente.

YAML
# This workflow uses actions that are not certified by GitHub.
# São fornecidas por terceiros e regidas por
# termos de serviço, política de privacidade e suporte separados
# documentação.

# GitHub recommends pinning actions to a commit SHA.
# To get a newer version, you will need to update the SHA.
# You can also reference a tag or branch, but the action may change without warning.

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: .

Recursos adicionais

Os seguintes recursos também podem ser úteis:

  • Para o fluxo de trabalho inicial original, consulte azure-webapps-php.yml no repositório starter-workflows de GitHub Actions.
  • A ação usada para fazer a implantação do aplicativo web é a ação oficial Azure/webapps-deploy do Azure.
  • Para obter mais exemplos de fluxos de trabalho do GitHub Action que fazem a implantação no Azure, consulte o repositório actions-workflow-samples.