Run a Laravel App

Getting an application running on Fly is essentially working out how to package it as a deployable image. Once packaged it can be deployed to the Fly infrastructure to run on the global application platform.

In this guide we'll learn how to deploy a Laravel application on Fly.

Prepare a Laravel App

Bring your own Laravel app, or create a new one!

If you want to start fresh, here's how to set up a new application. You'll need PHP 8+ and composer installed locally. You can check your PHP version using php --version.

composer create-project laravel/laravel fly-laravel
cd fly-laravel
php artisan serve

You should be able to visit http://localhost:8000 and see the home page.

Deploy to Fly.io

Install Fly

First, install flyctl, your Fly app command center, and sign up to Fly if you haven't already.

Launch

Next, we'll use the launch command to automagically configure your app for Fly.

The launch command adds a few files to your code base. Don't worry, it will ask before overwriting anything.

If you haven't already, go ahead and run fly launch!

fly launch

When asked if you want to deploy now, say No.

If you have other environment variables to set, you can edit the fly.toml file and add them.

[env]
# Set any env vars you want here
# Caution: Don't add secrets here
APP_URL = "https://fly-hello-laravel.fly.dev"

Replace this with the URL your app will be served on (by default, "https://<your-app-name>.fly.dev").

For sensitive data, you can set secrets with the fly secrets set command:

fly secrets set SOME_SECRET_KEY=<the-value-from-your-env-file>
The fly launch command will generate a secret with a valid, random value for APP_KEY.

Deploy

Finally, run fly deploy to build and deploy your application!

You should be able to visit https://your-app-name.fly.dev and see the Laravel demo home page.

That's it! Run fly open to see your deployed app in action.

Try a few other commands:

  • fly logs - Tail your application logs
  • fly ssh console - Open a terminal on your VM

Some Notes

The fly launch adds some files to your code base.

Here is what gets added:

  1. Dockerfile - Used to build a container image that is run in fly
  2. .dockerignore - Used to ensure certain files don't make its way into your repository
  3. fly.toml - Configuration specific to hosting on Fly
  4. docker - A directory containing configuration files for running Nginx/PHP in a container

Running fly launch (and later fly deploy) uses the Dockerfile to build a container image, copying your application files into the resulting image.

Fly doesn't care about the state of your git repository - it copies whatever files are present (except for files ignored by .dockerignore).