--- title: Deploying PHP to Azure App Service intro: You can deploy your PHP project to Azure App Service as part of your continuous deployment (CD) workflows. versions: fpt: '*' ghes: '*' ghec: '*' type: tutorial topics: - CD - Azure App Service redirect_from: - /actions/deployment/deploying-to-your-cloud-provider/deploying-to-azure/deploying-php-to-azure-app-service --- {% data reusables.actions.enterprise-github-hosted-runners %} ## Introduction This guide explains how to use {% data variables.product.prodname_actions %} to build and deploy a PHP project to [Azure App Service](https://azure.microsoft.com/services/app-service/). > [!NOTE] > {% data reusables.actions.about-oidc-short-overview %} and [AUTOTITLE](/actions/deployment/security-hardening-your-deployments/configuring-openid-connect-in-azure). ## Prerequisites Before creating your {% data variables.product.prodname_actions %} workflow, you will first need to complete the following setup steps: {% data reusables.actions.create-azure-app-plan %} 1. Create a web app. For example, you can use the Azure CLI to create an Azure App Service web app with a PHP runtime: ```bash copy az webapp create \ --name MY_WEBAPP_NAME \ --plan MY_APP_SERVICE_PLAN \ --resource-group MY_RESOURCE_GROUP \ --runtime "php|7.4" ``` In the command above, replace the parameters with your own values, where `MY_WEBAPP_NAME` is a new name for the web app. {% data reusables.actions.create-azure-publish-profile %} 1. Optionally, configure a deployment environment. {% data reusables.actions.about-environments %} ## Creating the workflow Once you've completed the prerequisites, you can proceed with creating the workflow. The following example workflow demonstrates how to build and deploy a PHP project to Azure App Service when there is a push to the `main` branch. Ensure that you set `AZURE_WEBAPP_NAME` in the workflow `env` key to the name of the web app you created. If the path to your project is not the repository root, change `AZURE_WEBAPP_PACKAGE_PATH` to the path to your project. If you use a version of PHP other than `8.x`, change`PHP_VERSION` to the version that you use. {% data reusables.actions.delete-env-key %} ```yaml copy {% data reusables.actions.actions-not-certified-by-github-comment %} {% data reusables.actions.actions-use-sha-pinning-comment %} 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: {% data reusables.actions.action-checkout %} - name: Setup PHP uses: shivammathur/setup-php@1f2e3d4c5b6a7f8e9d0c1b2a3e4f5d6c7b8a9e0f with: php-version: {% raw %}${{ env.PHP_VERSION }}{% endraw %} - name: Check if composer.json exists id: check_files uses: andstor/file-existence-action@2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b with: files: 'composer.json' - name: Get Composer Cache Directory id: composer-cache if: steps.check_files.outputs.files_exists == 'true' run: | echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT - name: Set up dependency caching for faster installs uses: {% data reusables.actions.action-cache %} if: steps.check_files.outputs.files_exists == 'true' with: path: {% raw %}${{ steps.composer-cache.outputs.dir }}{% endraw %} key: {% raw %}${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}{% endraw %} restore-keys: | {% raw %}${{ runner.os }}-composer-{% endraw %} - 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: {% data reusables.actions.action-upload-artifact %} with: name: php-app path: . deploy: runs-on: ubuntu-latest needs: build environment: name: 'production' url: {% raw %}${{ steps.deploy-to-webapp.outputs.webapp-url }}{% endraw %} steps: - name: Download artifact from build job uses: {% data reusables.actions.action-download-artifact %} with: name: php-app - name: 'Deploy to Azure Web App' id: deploy-to-webapp uses: azure/webapps-deploy@85270a1854658d167ab239bce43949edb336fa7c with: app-name: {% raw %}${{ env.AZURE_WEBAPP_NAME }}{% endraw %} publish-profile: {% raw %}${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }}{% endraw %} package: . ``` ## Additional resources The following resources may also be useful: * For the original workflow template, see [`azure-webapps-php.yml`](https://github.com/actions/starter-workflows/blob/main/deployments/azure-webapps-php.yml) in the {% data variables.product.prodname_actions %} `starter-workflows` repository. * The action used to deploy the web app is the official Azure [`Azure/webapps-deploy`](https://github.com/Azure/webapps-deploy) action. * For more examples of GitHub Action workflows that deploy to Azure, see the [actions-workflow-samples](https://github.com/Azure/actions-workflow-samples) repository.