This recipe guides you through deploying your Nx based Node backend application to Fly.io.
If you don't have an Nx powered Node project already, you can create a new one
npx create-nx-workspace@latest my-api \ --preset=node-standalone \ --framework=fastify \ --docker
This example uses Fastify but you can equally use Express, Koa or NestJS by selecting those frameworks during project creation.
You can also install the @nx/node
package into an existing Nx monorepo and generate a new Node application.
Setup Docker
Section titled “Setup Docker”If you don't have a Docker setup already, you can leverage the setup-docker
generator from the @nx/node
package to create one:
npx nx g @nx/node:setup-docker
Deploying the Server to Fly.io
Section titled “Deploying the Server to Fly.io”Now, all we need to do is set up Fly.io and deploy! If you haven't used Fly.io before, you need to install the CLI and create an account. It'll only take a couple of minutes.
- Install flyctl - This is the Fly.io CLI.
- Create an account with
fly auth signup
orfly auth login
.
If you run into any issues, please refer to their getting started guide.
Once you have authenticated using fly
, we are ready to launch our project.
fly launch --generate-name --no-deploy
Once the setup completes, update the fly.toml
file and make sure it uses the correct port:
[[services]]http_checks = []internal_port = 3000 # Make sure this matches the port in Dockerfile
Now we can build and deploy the server.
nx buildfly deploy
Fly.io will log out the monitoring link when the server is successfully deployed. You can open the server in a browser using the fly open
command.
That's is! Our server is now deployed for the world to use.
Optional: Adding a Deploy Target
Section titled “Optional: Adding a Deploy Target”You can also automate the deployment by adding a target to your project. In addition, that allows us to leverage the Nx task pipeline to make sure we first run the build
and then the deploy
.
By using Nx run-commands, you can add a deploy
target to the project. Go to the project's project.json
file (under targets
) and add the following:
"deploy": { "dependsOn": [ "build" ], "command": "fly deploy"}
Then you can run nx deploy
, which will run the build (if necessary) before deploying. If the build ran before, it would be cached.