Files

Configure Service Nginx

A GitHub Action that pushes a Magento-aware nginx configuration into an already-running nginx service container, reloads it, and waits for the container's healthcheck to pass.

The action does not start nginx. It assumes the calling workflow declared nginx as a services: container (typically alongside php-fpm, and other mandatory Magento services).

The shipped default.conf is a thin outer wrapper that defines a fastcgi_backend upstream pointing at php-fpm:9000, sets $MAGE_ROOT, and includes Magento's own nginx.conf.sample from your own Magento install. All real routing rules come from Magento's bundled file.

When to use this

Use this action when you have a workflow that:

  1. Boots nginx as services: containers with the workspace bind-mounted at /var/www/html, and
  2. Wants those containers to actually serve a Magento store you've already installed into the workspace (e.g. for end-to-end smoke tests, integration tests, or any HTTP-driven check).

You do not need this action if:

  • You're not running nginx at all (unit tests, coding standards, static analysis).
  • nginx is started by something other than a GitHub Actions services: block
  • You've already configured nginx some other way and don't need a Magento-ready outer config.

Prerequisites

  • An nginx service container is running on the same Docker host as the runner, with an image matching the image input.
  • A php-fpm container, the included default.conf will set up a fast-cgi backend to php-fpm:9000.
  • The runner's workspace ($GITHUB_WORKSPACE) is bind-mounted into the nginx container at /var/www/html.
  • A Magento install exists at ${{ inputs.magento_path }} relative to the workspace, with nginx.conf.sample present (it ships with Magento by default after composer install).

Inputs

Input Required Default Description
container_id Yes The ID of the running nginx service container. Pass ${{ job.services.nginx.id }} (replace nginx with whatever you named the service).
magento_path No . Path to the Magento store, relative to the GitHub workspace. Combined with the /var/www/html mount prefix to compute the in-container MAGE_ROOT.
health_timeout_seconds No 10 How long to wait for nginx to report healthy after the config is pushed and the container restarts.

Usage

jobs:
  smoke-test:
    runs-on: ubuntu-latest
    services:
      ## There are other service requirements for Magento, but this is just for the explanation of this service
      nginx:
        image: nginx:1.27-alpine
        ports: ["80:80"]
        volumes:
          - ${{ github.workspace }}:/var/www/html
        options: --health-cmd "nginx -t" --health-interval=10s --health-retries=3
    steps:
      - uses: actions/checkout@v6
      - uses: graycoreio/github-actions-magento2/setup-magento@main
        id: setup-magento
        with:
          mode: store
      - run: composer install
        working-directory: ${{ steps.setup-magento.outputs.path }}
      - uses: graycoreio/github-actions-magento2/setup-install@main
        with:
          services: ${{ toJSON(matrix.services) }}
          path: ${{ steps.setup-magento.outputs.path }}
          container_id: ${{ job.services['php-fpm'].id }}
      - uses: graycoreio/github-actions-magento2/configure-service-nginx@main
        with:
          container_id: ${{ job.services.nginx.id }}
          magento_path: ${{ inputs.path }}
      - uses: graycoreio/github-actions-magento2/smoke-test@main
        with:
          kind: page