apps/docs/content/docs.v6/postgres/integrations/flyio.mdx
Fly.io is a cloud application platform that lets you deploy full-stack applications globally. This guide shows you how to deploy a Node.js application using Prisma Postgres to Fly.io.
postinstallEnsure your package.json includes a postinstall script to generate Prisma Client during deployment:
{
// ...
"scripts": {
// ...
"postinstall": "prisma generate" // [!code ++]
}
}
From your project directory, run:
fly launch
Follow the prompts to configure your application. Fly.io will auto-detect your Node.js application and create the necessary configuration.
Add your Prisma Postgres DATABASE_URL as a secret in Fly.io:
fly secrets set DATABASE_URL="your-prisma-postgres-connection-string"
:::tip
You can find your DATABASE_URL in your .env file or in the Prisma Console.
:::
If not already deployed during fly launch, deploy your application:
fly deploy
Once the deployment completes, you'll see a success message with your app's URL:
š SUCCESS! Your app is live and ready to use! š
Visit: https://your-app-name.fly.dev/
:::note In the Fly.io dashboard, your app's status may show as "Pending" initially. It typically transitions to "Deployed" within a few minutes. :::
Ensure that the data source in your prisma.config.ts file is configured to use the DATABASE_URL environment variable:
import "dotenv/config";
import { defineConfig, env } from "prisma/config";
export default defineConfig({
datasource: {
url: env("DATABASE_URL"),
},
schema: "./prisma/schema.prisma",
});
To run migrations on your deployed Fly.io app, you can use:
fly ssh console -C "npx prisma migrate deploy"
Or add a release command to your fly.toml:
[deploy]
release_command = "npx prisma migrate deploy"
Fly.io lets you scale and place your application in multiple regions. For optimal performance, deploy your app in a region close to your Prisma Postgres database region.
fly scale count 2 --region iad
If you're using a custom Dockerfile and your build fails because the Prisma Client cannot be found, it's likely due to one of two reasons:
npm install (which runs postinstall) runs before the schema is copied.prisma folder.Solution: In your Dockerfile, copy the prisma/ directory to ./prisma before running npm install:
# ā Wrong order or path
COPY package*.json ./
COPY prisma . # Copies contents to root (wrong structure)
RUN npm install # postinstall runs but might fail or generate in wrong place
# ā
Correct order and path
COPY package*.json ./
COPY prisma ./prisma # Copies to ./prisma folder (preserves structure)
RUN npm install # postinstall finds schema in expected location
COPY . .