Deploying a Monorepo
Railway provides a few features to help improve support for deploying monorepos of various types:
- Isolated Monorepo → A repository that contains components that are completely isolated to the directory they are contained in (eg. JS frontend and Python backend)
- Shared Monorepo → A repository that contains components that share code or configuration from the root directory (eg. Yarn workspace or Lerna project)
Deploying an Isolated Monorepo
The simplest form of a monorepo is a repository that contains two completely isolated projects that do not share any code or configuration.
To deploy this type of monorepo on Railway, define a root directory for the service.
- Select the service within the project canvas to open up the service view.
- Click on the Settings tab.
- Set the root directory option. Setting this means that Railway will only pull down files from that directory when creating new deployments.
Deploying a Shared Monorepo
Popular in the JavaScript ecosystem, shared monorepos contain multiple components that all share a common root directory.
By default, all components are built with a single command from the root directory (e.g. npm run build
). However, if you are using Nixpacks, then you can override the build command in the service settings.
To deploy this type of monorepo in Railway, define a separate custom start command in Service Settings for each project that references the monorepo codebase.
- Select the service within the project canvas to open the service view.
- Click on the Settings tab.
- Set the start command, e.g.
npm run start:backend
andnpm run start:frontend
Watch paths
To prevent code changes in one service from triggering a rebuild of other services in your monorepo, you should configure watch paths.
Watch paths are gitignore-style patterns that can be used to trigger a new deployment based on what file paths have changed.
A monorepo might want to only trigger builds if files are changed in the /packages/backend
directory, for example.
Using the CLI
When interacting with your services deployed from a monorepo using the CLI, always ensure you are "linked" to the appropriate service when executing commands.
To link to a specific service from the CLI, use railway link
and follow the prompts.
Edit this file on GitHub