Monorepo and Multi-Environment Deployments

By default, flyctl deploy builds and deploys a fly.toml file, a Dockerfile, and source code from the current working directory. This is sufficient for deploying a single app, but you can also configure flyctl to build and deploy multiple apps from a monorepo or deploy an app to multiple targets.

Paths


Working Directory

The first argument to flyctl deploy is the path to the working directory for your app’s source code. For Dockerfile and Buildpack builds, this is the build context sent to the Docker daemon. It defaults to the current working directory.

You can override this by providing a path:

flyctl deploy ./path/to/app

fly.toml path

By default, flyctl deploy will look for a fly.toml in the working directory. You can override this using the --config flag.

flyctl deploy --config ./path/to/fly.toml

Dockerfile path

By default, flyctl deploy will look for a Dockerfile in the working directory. You can override this using the --dockerfile flag.

flyctl deploy --dockerfile ./path/to/Dockerfile

Multi-stage Build Target


By default, the final stage of a multi-stage dockerfile is exported as the deployed image. You can stop at a specific stage by using the --build-target flag

flyctl deploy --build-target web
flyctl deploy --build-target api
flyctl deploy --build-target worker

Examples


Use a different fly.toml file per environment

flyctl deploy --config ./fly.production.toml
flyctl deploy --config ./fly.staging.toml

Use a different Dockerfile per environment

flyctl deploy --dockerfile ./Dockerfile.production
flyctl deploy --dockerfile ./Dockerfile.staging

Deploy a subdirectory

flyctl deploy ./apps/api

Share a multi-stage Dockerfile with several fly apps

flyctl deploy --config fly.api.toml --build-target api