Skip to main content

Introduction

Deployments in Laravel Cloud happen whenever you have new code to release, new resources to attach, or environment settings that you want to update. When a new deployment is triggered, Laravel Cloud will take your code and environment settings, build an image configured for your application’s runtime and version, and then run your build and deploy commands. Once your build completes successfully, the existing deployment will be gracefully terminated (allowing any running processes to complete) and the new deployment will be brought online with zero downtime.

Deploy options

Push to deploy

Every time you push new code to your remote Git branch, a new deploy is automatically triggered. Push to deploy is enabled by default on all environments. To change this setting, go to Settings > Deployments.

Deploy hooks

If you prefer to trigger a deployment via an HTTP endpoint, you can enable the “Deploy hook” option in Settings > Deployments. When enabled, you will be provided a URL that you can make a POST request to as part of your CI/CD flow. You can refresh your URL anytime from the Deployments settings. You can also deploy a specific commit by passing a commit_hash query parameter to the deploy hook URL. The commit hash should belong to the branch configured for the environment.
If no commit hash is provided, the latest commit from the environment’s branch will be deployed.

Example using GitHub Actions

Deploy hooks are perfect for integrating Laravel Cloud with your CI / CD pipeline. Here’s a complete example using GitHub Actions:
  1. First, add your deploy hook URL as a secret in your GitHub repository:
    • Go to your GitHub repository settings
    • Navigate to Secrets and variables → Actions
    • Add a new secret named LARAVEL_CLOUD_DEPLOY_HOOK with your deploy hook URL
  2. Create a .github/workflows/deploy.yml file in your repository:
  1. Commit and push the workflow file to trigger your first deployment.
Unlike traditional deployment processes that require installing dependencies and running build commands in CI, Laravel Cloud handles all of this for you. The deploy hook simply triggers Laravel Cloud to:
  • Pull your code from the specified commit
  • Run your configured build commands
  • Run your configured deploy commands
  • Deploy your application with zero downtime

Manual

You can trigger a deployment from the Laravel Cloud dashboard anytime by clicking the “Deploy” button from the Environment overview page or Deployments page. After updating environment settings, your changes are staged until you deploy them. Review everything that is pending and deploy the batch from the staged changes banner, or use the “Deploy” button at any time.

Troubleshooting

Framework or runtime version not supported

Laravel Cloud requires Laravel 9 or greater. In addition, you should be using the latest minor version of the laravel/framework Composer package. The minimum minor versions required are:
  • Laravel 11: v11.41.3
  • Laravel 10: v10.48.28
  • Laravel 9: v9.52.20
Watch this video to learn more about fixing this framework error.
If you receive an error during a deployment that “The [laravel/framework] package was found in the [composer.lock] file, but the version is not supported. Upgrade Laravel to the latest minor version” then you can update by running the following command:

Deployment succeeds but serves no traffic

Laravel Cloud’s proxy, which runs alongside your application in each instance, routes traffic to your application on the port set by the PORT environment variable (3000 by default, or the port you chose when creating the application). Ensure that your Express, Hono, or other JavaScript application reads PORT rather than listening on a hardcoded port.

Build or start command not configured

Go applications require an explicit build command, since Laravel Cloud has no default way to compile a Go module on your behalf. Go, Python, and JavaScript applications require an explicit start command, since Laravel Cloud has no framework-provided way to run them. Laravel Cloud pre-fills a sensible default for each of these when it first detects your application, so this typically only surfaces if you’ve since cleared the field. If a required command is blank, the deployment fails immediately with “The environment has no build command configured” or “The environment has no start command configured.” For a Go application, restore a build command such as:

Django start command still has the <project> placeholder

Laravel Cloud discovers your Django project’s WSGI module from your repository and pre-fills the start command with it. When the module can’t be discovered, the start command falls back to a <project> placeholder:
Replace <project> with your Django project’s settings module name (the directory containing wsgi.py) before deploying. If the placeholder is still there when you deploy, the deployment fails with “The start command still contains the <project> placeholder. Replace <project> with your Django project’s module name.”