Django hosting, at server prices.

Push to GitHub and your Gunicorn web, Celery worker, Celery beat, Postgres and Redis deploy to a server you rent. Migrations run before every deploy, and every pull request gets its own preview.

One Django app, five bills.

A small Django app (one Gunicorn web process, a Celery worker, Celery beat, Postgres and a small Redis) costs $33 a month on Heroku and Railway, $53 on Fly.io and $66 on Render. The same app runs on a rented server for $16, including $9 for custom domains on Ployz Cloud. At a medium size (two 1 GB web processes, 4 GB Postgres, 256 MB Redis) it's $108 to $318 on the platforms and $28 on a server. Move the sliders to match your app.

RAM the stack needs
3.27 GB
  • Heroku$33/mo

    Smallest dyno with that RAM (Basic allows one per process type), a Basic dyno for beat, Essential or Standard Postgres by size, Key-Value Store Mini, Premium-2 or Premium-5.

  • Render (Hobby)$66/mo

    Smallest plan with that RAM, a $7 worker for beat, Postgres storage $0.30/GB, Key Value from $10, traffic past 5 GB at $0.15/GB. Full-stack previews need Pro, $25 more.

  • Railway$33/mo

    $10/GB RAM and $20/vCPU a month, assuming the RAM is in use all month and 0.1 vCPU per GB. Egress $0.05/GB, volume $0.15/GB. Pro once the volume passes 5 GB.

  • Fly.io (iad)$53/mo

    Shared Machines at $6/GB RAM, a 256 MB Machine for beat, Managed Postgres Basic, Starter or Launch (no 4 GB plan) plus $0.28/GB, Redis on its own Machine, egress $0.02/GB.

  • Your own server + Ployz$16/mo

    Smallest Hetzner CX23/CX33/CX43/CX53 with that RAM (1 GB added for the OS) and twice the database on disk, $0.60 IPv4, $9 for Ployz custom domains.

Prices checked 2026-10-01. Move the sliders to match your app.

The per-platform maths, with every source, is in Heroku pricing, Render pricing, Railway pricing and Fly.io pricing. Server prices are Hetzner's in Europe. In the US, a DigitalOcean Droplet or Netcup's Manassas datacenter is the cheap option; see Hetzner vs DigitalOcean.

Everything a Django app needs, on one server.

A Django app is four or five processes that all want memory: Gunicorn, Celery, beat, Postgres and Redis. Platforms price each one separately. On a server they share the RAM.

What you needHeroku, Render, Railway, Fly.ioPloyz on your server
BuildsBuildpacks, Railpack or your Dockerfile, depending on the platformNo Dockerfile needed for Python (Railpack finds manage.py and starts Gunicorn; pip, Poetry, uv, PDM and Pipenv), or bring your own Dockerfile
Web and workerA dyno, service or Machine per process, each with its own priceOne service for Gunicorn, one for `celery -A proj worker`, sharing the server's RAM
Celery beatAnother dyno, worker or MachineIts own service running `celery -A proj beat`, with one replica
Postgres and RedisManaged add-ons, from $5 to $38 for the smallest PostgresOne-click Postgres and Redis on your server (plain services with a volume)
MigrationsRelease phase, pre-deploy or release commandA pre-deploy command, `python manage.py migrate --noinput`, runs before each deploy
Previews per PRReview apps or PR environments, billed per service; Render needs Pro, Fly has none built inA preview environment for every pull request, with its own HTTPS address, on your servers
Zero-downtime deploysYes, on most plansWith a health check set, the new version must pass it before the old one stops. Postgres and Redis have a short gap instead
PricePer process, per add-on, per GBYour server, plus $9 a month for custom domains. Free on your own servers

Static files. Django's deployment checklist says that in production you set STATIC_ROOT, where collectstatic copies your files. Run python manage.py collectstatic --noinput in the build, in your Dockerfile, so the files ship inside the image, and serve them with WhiteNoise. Don't put it in the pre-deploy command: that's for work against the database. While you're there, run python manage.py check --deploy against your production settings; it catches DEBUG = True, a missing ALLOWED_HOSTS and an insecure SECRET_KEY.

Why beat gets its own service. Ployz has no cron, so Celery beat is your scheduler. Celery's docs say only one beat may run per schedule, "otherwise you'd end up with duplicate tasks", and they don't recommend embedding it in a worker with -B for production. So run beat as its own service with one replica, and scale the workers freely.

What you give up.

Leaving a managed platform means taking some jobs back. These are the ones that matter, stated plainly:

  • Backups. Managed Postgres backs itself up. Ployz doesn't back up databases yet, so you run a pg_dump on a schedule from another machine (how, in the docs). The Postgres hosting guide has the script.
  • Scheduled jobs. Ployz has no built-in cron. Celery beat covers it, as above; without Celery, use an external cron.
  • Failover. One server is one server. Ployz runs replicas across servers, but a database volume lives on one machine.
  • OS updates. The server's operating system is yours to keep patched.
  • Team roles. Ployz is built for one operator today.
  • GitHub only. Ployz deploys from GitHub or any Docker image, not GitLab or Bitbucket.

If those are dealbreakers, stay on a managed platform. Railway alternatives, ranked by price compares the hosted options.

From repo to running app.

Run this from your Django project's directory, the one with manage.py. Ployz installs itself on the server, builds the app and gives it an HTTPS address.

your django project

$ curl -fsSL https://ployz.sh | sh

Installs the ployz CLI on macOS or Linux.

$ ployz login

Signs in to Ployz Cloud in your browser.

$ ployz up --server root@your-server

Installs Ployz on the server, builds this directory and gives it an HTTPS address.

Then add Postgres and Redis from the dashboard, set DATABASE_URL (as a reference to Postgres), SECRET_KEY and ALLOWED_HOSTS as variables and secrets, add the migrate pre-deploy command, and add services for the Celery worker and beat. Coming from Heroku, the migration steps cover copying the database.

Questions

Where is the best place to host a Django app?

For the lowest bill, a server you rent: a 4 GB server runs Gunicorn, Celery, Postgres and Redis for about $7 a month at Hetzner (Europe) or €8.26 incl. VAT at Netcup. If you never want to touch a server, Render or Railway are the closest to Heroku.

How do I deploy Django to a VPS?

Run Gunicorn behind a reverse proxy with HTTPS, Postgres next to it, migrations before each deploy and collectstatic in the build. With Ployz, ployz up --server root@your-server does the server setup, build and HTTPS; you add Postgres and the pre-deploy command.

Is there a free way to host Django?

Not for production. Heroku ended free plans in 2022, Render's free Postgres expires after 30 days, and Fly.io has no free tier. Ployz is free on your own servers, so the cheapest real option is a server for about $7 a month.

How do I run Celery on my own server?

Add Redis as the broker, then one service for the worker (celery -A proj worker) and one for beat (celery -A proj beat) if you have periodic tasks. Keep beat at one replica; workers can scale.

How do I run scheduled tasks for Django on Ployz?

Ployz has no cron. Use Celery beat as its own service, or an external cron that calls a management command.

What does Ployz cost?

Ployz is free on your own servers, with unlimited servers, projects and preview environments. Custom domains on Ployz Cloud are $9 a month. You pay your server provider for the servers.

Your servers. The whole platform. Free on your own servers.

Deploy your app

Facts checked 2026-10-02.