Skip to content
inetGeek

Django on Fly.io

Fly.io publishes its own guide for deploying Django.

Compare Fly.io with

Python web framework with an ORM, admin interface and long-running server process.

01.

What Django needs.

Every host claims to run Django, so the claim on its own decides nothing. These are the things Django actually requires from the platform underneath it, and what Fly.io publishes about each. Fly.io documents 4 of the 4.

Persistent processes

Supported — A stopped or suspended Machine still bills for its root filesystem at $0.15 per GB per month.

Django is served by a WSGI or ASGI worker that stays up. Celery workers are a second long-running process alongside it.

Sources (1) →
  • Billing - Fly.io Documentation ↗

    “If you provision Machines and leave them running all month, we'll charge you a predictable amount for that Machine. [...] Stopped and suspended Machines are billed based on their root file system (rootfs) usage per second (the time they spend in the stopped or suspended state) by $0.15 per GB per month.”

    Read 2026-09-27 · official docs

Managed databases

Supported

Django's ORM, migrations and admin all assume a real relational database. Postgres is the default assumption in its own documentation.

Sources (1) →
  • Pricing - Fly.io Documentation ↗

    “The price of running Fly.io Managed Postgres depends on your selected Managed Postgres Plan and the amount of storage your databases use.”

    Read 2026-09-27 · official docs

Managed connection pooling

Supported

Django opens a database connection per worker. Without pooling, a modest traffic spike exhausts Postgres connection slots long before it exhausts CPU.

Sources (1) →
  • Cluster configuration options ↗

    “All Managed Postgres clusters come with PGBouncer for connection pooling, which helps manage database connections efficiently. You can configure how PGBouncer assigns connections to clients by changing the pool mode.”

    Read 2026-09-05 · official docs

Scheduled jobs

Limited

Management commands are how Django does recurring work. With no scheduler you need a second service whose only job is to trigger them.

Sources (1) →
  • fly machine run · Fly Docs ↗

    “Use the --schedule flag to set the Machine's config.schedule property, which starts the Machine on a fuzzy hourly, daily, weekly, or monthly cycle.”

    Read 2026-09-05 · official docs

The requirement and the reason it matters are ours. Every value beside them was read from Fly.io's own pages — expand a source to see the sentence it came from.

02.

What Fly.io documents.

Fly.io publishes its own guide for deploying Django.

Fly.io is a great place to run your Django application. fly launch can detect, configure and deploy Django apps.

Sources (1) →
  • Django on Fly.io · Fly Docs ↗

    “Fly.io is a great place to run your Django application. fly launch can detect, configure and deploy Django apps.”

    Read 2026-09-05 · official docs

Django features on Fly.io

Capabilities Fly.io documents specifically for Django, with the constraint it documents alongside each.

background_workers

Supported

Process groups are a way to configure a single Fly App to run multiple different programs. [...] Every defined process runs in its own Fly Machine(s) within the app, which means they don't compete for resources, and they can be scaled by process group.

scheduled_jobs

Limited

--schedule string Schedule a Machine run at hourly, daily, weekly and monthly intervals

persistent_disk

Supported

The root file systems of a Fly Machine are ephemeral and should only be used for temporary data, application code, and runtime files that can be rebuilt from scratch during deployments or restarts. [...] Use volumes to store your database files, to save your app's state, such as configuration and session or user data, or for any information that needs to persist after deploy or restart.

connection_pooling

Supported

Your MPG plan determines the CPU and Memory configuration for your cluster. All plans include high availability, backups, and connection pooling.

one_off_commands

Supported

To SSH into your hosted Django application use the command fly ssh console. [...] The --pty flag tells the SSH server to run the command in a pseudo-terminal, which createsuperuser requires.

Sources (5) →
  • Run multiple process groups in an app · Fly Docs ↗

    “Process groups are a way to configure a single Fly App to run multiple different programs. [...] Every defined process runs in its own Fly Machine(s) within the app, which means they don't compete for resources, and they can be scaled by process group.”

    Read 2026-09-13 · official docs

  • fly machine run · Fly Docs ↗

    “--schedule string Schedule a Machine run at hourly, daily, weekly and monthly intervals”

    Read 2026-09-13 · official docs

  • Fly Volumes overview · Fly Docs ↗

    “The root file systems of a Fly Machine are ephemeral and should only be used for temporary data, application code, and runtime files that can be rebuilt from scratch during deployments or restarts. [...] Use volumes to store your database files, to save your app's state, such as configuration and session or user data, or for any information that needs to persist after deploy or restart.”

    Read 2026-09-13 · official docs

  • Managed Postgres · Fly Docs ↗

    “Your MPG plan determines the CPU and Memory configuration for your cluster. All plans include high availability, backups, and connection pooling.”

    Read 2026-09-13 · official docs

  • Existing Django Apps · Fly Docs ↗

    “To SSH into your hosted Django application use the command fly ssh console. [...] The --pty flag tells the SSH server to run the command in a pseudo-terminal, which createsuperuser requires.”

    Read 2026-09-13 · official docs

03.

What it costs to run there.

Pricing model
Usage-based, no compute plan tiers; billing is pro-rated for the time resources are provisioned.
When you exceed a cap
No plan cap to exceed — Fly bills per second for provisioned resources. The only documented enforcement is unspecified automated scaling limits, which surface as an error message (platform-wide, all plans)
Regions
17 regions
Sources (2) →
  • Pricing — Fly.io Docs ↗

    “Plans get complicated, so we just charge based on usage. Pick and choose which pieces you need for your application; that's all you'll see on your invoice.”

    Read 2026-09-14 · official docs

  • Regions - Fly.io Documentation ↗

    “You can host your apps in any of the following regions. Region ID Region Location Gateway MPG ams Amsterdam, Netherlands ✓ ✓ arn Stockholm, Sweden ✓ cdg Paris, France ✓ dfw Dallas, Texas (US) ✓ ✓ ewr Secaucus, NJ (US) ✓ fra Frankfurt, Germany ✓ ✓ gru Sao Paulo, Brazil ✓ iad Ashburn, Virginia (US) ✓ ✓ jnb Johannesburg, South Africa lax Los Angeles, California (US) ✓ ✓ lhr London, United Kingdom ✓ ✓ nrt Tokyo, Japan ✓ ✓ ord Chicago, Illinois (US) ✓ ✓ sin Singapore, Singapore ✓ ✓ sjc San Jose, California (US) ✓ ✓ syd Sydney, Australia ✓ ✓ yyz Toronto, Canada ✓ ✓”

    Read 2026-09-27 · official docs

04.

Whether it suits you.

Workloads that ship as Docker images and need placement in particular regions. Billing is purely usage-based with no plan tiers, which suits spiky or region-pinned traffic better than a flat monthly fee.

Consider something else if…

You want a predictable flat bill rather than charges that track the resources provisioned for each app.

Written by Palash Bagchi on 2026-09-05. This is a recommendation, not a sourced fact — it carries no citation because it is an opinion.

Visit Fly.io documentation

When these numbers change, hear about it. Sources are re-checked monthly; a repricing goes out as a short note.

Confirm by email; unsubscribe from any issue. Your address goes to Kit and nowhere else — what we do with it.

Every page here is sourced and dated.