--- title: Fly.io description: Deploy ParadeDB on Fly.io using Fly Launch and the official Docker image canonical: https://www.paradedb.com/docs/deploy/cloud-platforms/fly --- Cloud platform deployments run ParadeDB Community, which do not support high availability or read replicas. If these matter to you, we recommend [ParadeDB Enterprise](/deploy/enterprise) deployed via [Kubernetes](/deploy/self-hosted/kubernetes) or [BYOC](/deploy/byoc). [Fly.io](https://fly.io) deploys Docker containers as apps close to your users. This guide uses [Fly Launch](https://fly.io/docs/reference/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`)](https://fly.io/docs/hands-on/install-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: ```bash fly launch \ --image paradedb/paradedb:latest \ --internal-port 5432 \ --no-deploy ``` `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](https://hub.docker.com/r/paradedb/paradedb/tags) for available `paradedb/paradedb` tags — pin one (for example `paradedb/paradedb:0.25.4-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: ```bash fly volumes create paradedb_data --region --size 10 ``` Replace `` with the region you chose during `fly launch` (see [Fly.io regions](https://fly.io/docs/reference/regions/)). ## Set the Postgres Password Set the `POSTGRES_PASSWORD` as a Fly.io secret so it is never committed to `fly.toml`: ```bash fly secrets set POSTGRES_PASSWORD= ``` ## 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`: ```toml [env] POSTGRES_USER = "postgres" POSTGRES_DB = "paradedb" PGDATA = "/var/lib/postgresql/data" [[mounts]] source = "paradedb_data" destination = "/var/lib/postgresql" ``` ## Deploy ```bash fly 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: ```bash fly proxy 5432 ``` Then connect with `psql` from another terminal: ```bash psql "postgres://postgres:@localhost:5432/paradedb" ``` To expose ParadeDB publicly, allocate a dedicated IPv4 address (the `[[services]]` block from `fly launch` already accepts external traffic on port 5432): ```bash fly ips allocate-v4 ``` 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](https://fly.io/docs/networking/services/).