Skip to main content
Cloud platform deployments run ParadeDB Community, which do not support high availability or read replicas. If these matter to you, we recommend ParadeDB Enterprise deployed via Kubernetes or BYOC.
Fly.io deploys Docker containers as apps close to your users. This guide uses Fly Launch — Fly’s scaffolding flow — to deploy the official paradedb/paradedb Docker image with a persistent volume.

Prerequisites

  1. A Fly.io account
  2. The Fly.io CLI (flyctl) installed and authenticated with fly auth login

Launch the App

From an empty directory, run fly launch and point it at the ParadeDB Docker image. --no-deploy lets you edit the generated fly.toml before the first deploy so you can add the persistent volume and secrets:
fly launch prompts for an app name and a primary region, then writes a fly.toml in the current directory. See the Docker Hub page for available paradedb/paradedb tags — pin one (for example paradedb/paradedb:0.25.0-pg18) instead of latest for reproducible deploys.

Create a Persistent Volume

ParadeDB stores its data under /var/lib/postgresql. Create a Fly.io volume in the same region as the app so data survives restarts and redeploys:
Replace <REGION> with the region you chose during fly launch (see Fly.io regions).

Set the Postgres Password

Set the POSTGRES_PASSWORD as a Fly.io secret so it is never committed to fly.toml:

Finish fly.toml

Open the generated fly.toml and add the [env] block (Postgres init variables) and a [[mounts]] block that attaches the volume you just created. The [build], [[services]], and [[vm]] sections were written by fly launch:

Deploy

Fly.io pulls the ParadeDB image, mounts the volume, and starts the machine.

Connect to ParadeDB

Fly.io machines are only reachable via WireGuard or Fly’s proxy by default. Use fly proxy to open a local tunnel:
Then connect with psql from another terminal:
To expose ParadeDB publicly, allocate a dedicated IPv4 address (the [[services]] block from fly launch already accepts external traffic on port 5432):
Public exposure means anyone on the internet can attempt to reach port 5432 — make sure POSTGRES_PASSWORD is strong and consider adding Fly.io’s per-service firewall rules.