Mastering Environment Management in Laravel Vapor

The Vapor Configuration Foundation

Every project using

relies on a central source of truth: the vapor.yml file. This YAML configuration resides at your project root and defines how your serverless infrastructure behaves across different stages. Vapor treats environments as distinct entities, meaning your staging, production, and QA setups can have entirely different PHP versions, memory limits, and vanity domains. This isolation ensures that a change in one environment never accidentally ripples into another.

Upgrading PHP Versions with Zero Downtime

One of the most powerful features of Vapor is its ability to handle runtime upgrades without interrupting user sessions. If you need to migrate from

to
PHP 8.0
, you simply update the environment key in your configuration file:

staging:
    runtime: "php-8.0"
    build:
        - 'composer install --no-dev'

After updating the file, trigger a deployment via the

. Vapor uses a rolling update mechanism. It spins up new
AWS Lambda
instances with the new runtime while the old ones continue to serve traffic. Once the new versions are ready, Vapor switches the traffic over instantly. This safety net allows you to verify the upgrade on a staging vanity domain before touching your production environment.

Creating and Provisioning New Environments

Scaling your team often requires new sandboxes for testing. You can create a dedicated environment for a QA team by running a single command in your terminal:

vapor env q-a

This command registers the environment in the Vapor dashboard and adds a new entry to your vapor.yml. To get the environment running, copy the configuration options from an existing environment—like production—to ensure parity. This consistency prevents the "it works on my machine" syndrome by ensuring the QA team tests on infrastructure identical to what your customers use.

Syntax Notes and Best Practices

When editing vapor.yml, indentation is critical. Each environment name serves as a top-level key under which you define specific options. Always use the vapor deploy [environment] command to push changes. Remember that while basic environments share configuration patterns, advanced setups often involve unique databases and customized deployment scripts to handle migrations or cache clearing specifically for that stage.

2 min read