Heroku cost vs self-hosted Dokku

Heroku bills per dyno, database and add-on, while Dokku is free to run on servers you rent but moves patching, backups and on-call work to your team. The comparison turns on those labor and data costs as much as on the license line.

On this page

Does Dokku cost less than Heroku once you count the people who run it?

A Heroku renewal or pricing change usually forces the question, and the short answer is that Dokku has no license fee, but it moves server, backup, patching and on-call costs onto your team. Dokku is MIT licensed, so the software itself costs nothing to run. Heroku bills each dyno, instance and database per month, so its cost grows with app count and database size. With Dokku, the cost depends on how many apps you run, how much data they hold and how much engineering time it takes to keep the host patched, backed up and monitored. Coolify is also free to self-host with all features, so the same reasoning applies if you are comparing the two. Heroku announced on February 6, 2026 that it is moving to a sustaining engineering model, so a renewal decision may also need a timeline for when you move, not only a comparison of monthly figures.

The business case therefore has to price the operator work, which is a recurring cost that a managed bill hides. Ask who will be paid to run each component: the rented server, the operating system and Docker updates, the database backups and restore tests for each Postgres plugin instance, the TLS and proxy configuration, and the alerts that wake someone at night. Dokku runs on a single server and needs at least 1 GB of RAM for its default Docker scheduler, so that host is one component you size and pay for. Write down the hours each month for each app and database, then multiply by the loaded cost of your engineers. Compare that total with the Heroku invoice for the same workload, and include the one-time effort of the migration itself.

Before you ask for a quote from an implementation partner, confirm the line items in writing: server count and size, backup storage and retention, patching windows, on-call coverage, and who restores a database after an incident. A paragraph in the quote should name the rollback limits too, because a redeployed image does not restore databases or persistent files. If your team already runs servers and monitoring well, the operator cost may be small. If it does not, the saving may disappear, so run the comparison on your own app count and data volume before you decide.

Which cost components move when you replace Heroku with Dokku

This table sets each Heroku cost component against its Dokku counterpart and marks whether it recurs or is paid once. Read the commercial and self-hosted columns together, since most savings or added costs come from who now carries patching, backups and on-call time. Use the drivers column to decide which lines to price in your own quote.

Cost componentCommercial side (Heroku)Self-hosted side (Dokku)One-time or recurring
Compute for appsDynos and Private Space fees, billed per dyno per month as listed on Heroku's pricing pageServers you rent or own, plus Dokku itself, which is MIT licensed and free to runRecurring. Driven by server count, size and how many app processes share each host
Managed Postgres and add-onsHeroku Postgres plans and add-on fees, billed per database per monthdokku-postgres plugin and PostgreSQL on your server, with the database storage and memory on that hostRecurring. Driven by database size, plan tier and the number of databases you host
Dokku softwareIncluded in the Heroku subscriptionNo license fee for the open-source edition. Dokku Pro is an optional paid edition, so confirm its terms with the vendorRecurring if Dokku Pro is chosen, otherwise none
Rented serversNot applicable, since Heroku runs the infrastructureCloud or data center servers billed by the provider, sized for the single-server Dokku hostRecurring. Driven by instance size, region and backup storage
Coolify Cloud (alternative)Not applicableCoolify Cloud is billed per connected server with a discount for annual billing, while your servers stay under your control. Check current rates on Coolify's pricing pageRecurring. Driven by the number of connected servers and billing term
Migration project workNot applicableRecreating apps, moving buildpacks, Procfiles and config vars, loading the database and cutting over DNSOne-time. Driven by app count, database size and how many integrations need rework
Backups and storageIncluded in Heroku Postgres plans, with backup retention set by the planOff-host backup storage and retention you configure, such as S3-compatible storage through the Postgres pluginRecurring. Driven by database size, retention period and backup frequency
Upgrades, patching and on-call timeLargely handled by Heroku under the managed contractYour staff or partner patch the OS, Dokku, plugins and proxy, and respond to outagesRecurring. Driven by release cadence, host count and how often incidents page your team
Internal skills and external supportSupport plan fees, where contractedTraining for operators, plus any fixed-scope implementation or retainer support you buyOne-time for training and setup, recurring for retainers. Confirm scope in writing before work starts

What moves the Heroku versus Dokku comparison

Heroku bills by dyno, database and add-on, so the size of your process model and data drives the invoice. Dokku moves those same decisions onto servers you rent and the people who run them, so the cards below show which cost line each choice changes.

Process count and scaling

Heroku bills each dyno per process type, so every extra worker or web process adds a recurring line item. Dokku scales process types with ps:scale on the host it runs on, so the cost shifts to server capacity instead of per-process fees. Count your Procfile process types and their peak concurrency, then check whether one server has the CPU and memory to carry them. Illustrative example: a web process plus two workers on one host adds no dyno fee, but it does need headroom on that host.

Database size and backup retention

Heroku Postgres charges by plan tier, and its retention and backup features sit inside that fee. With the dokku-postgres plugin, you pay for disk, backup storage in S3-compatible buckets and the time to test restores. Ask how large the database will grow, how long you must keep backups, and where they are stored. Restore testing is the cost most often left out of a comparison.

Availability and multi-server designs

A single Dokku host is one failure domain, so a team that needs failover must plan for more servers. The k3s scheduler builds a multi-server K3s cluster but requires a Docker registry, and only the initial Dokku server is the git push target. Each added node, registry and load balancer is a recurring cost, and it adds operator time. Ask whether downtime on one host is acceptable before you size the design.

Edition choice: Dokku Pro or free Dokku

Free Dokku is MIT licensed and carries no license fee, so its costs are servers, staff time and support you buy elsewhere. Dokku Pro is an optional paid edition with its own terms. Before you compare totals, confirm in writing what Dokku Pro includes, its price and renewal terms, and whether the features you need sit in the free edition. Do not assume the paid tier is required for production use.

Team skills and on-call time

Heroku's managed platform absorbs patching, routing and host failures, while Dokku puts those tasks on your team. Coolify's guide for teams leaving managed platforms notes that a rollback can redeploy an application image but does not restore databases or persistent files. Estimate who will patch the OS, update Dokku and plugins, and respond at night. That staff time is usually the largest line in a self-hosted total.

Where a single Dokku server stops being the cheaper option

Dokku is cheapest while one server can carry the whole workload. Dokku's documentation describes it as an extensible open source platform that runs on a single server, and the default docker-local scheduler runs containers directly on that host. The minimum published requirement for the default Docker scheduler is 1 GB of RAM, but that figure covers Dokku itself, not your apps, databases or backups. Before you add a second machine, confirm with your team the peak memory and CPU of each process type, the size of the Postgres plugin's data and the headroom you need for deploys, since a single host shared by app containers and a database fails as one unit.

Going multi-server with Dokku means choosing the k3s scheduler, and that choice adds components you must run. The k3s scheduler, introduced in Dokku 0.33.0, builds a multi-server K3s cluster, but it requires a Docker registry to distribute images, and only the initial Dokku server is configured as the git push target. Each added node, the registry, the cluster's control plane and a monitoring and logging stack are recurring infrastructure you pay for, and each needs patching, certificate renewal and storage management. Ask who will own the registry's backups and access control, who responds when a node drops out of the cluster, and whether the team has Kubernetes skills in-house or will need an outside retainer.

Compare the monthly bill for the extra servers with the engineering hours they consume. A managed platform charges per dyno, instance or database, so adding capacity there is a line item. With self-hosting, the infrastructure line is only part of the cost: the engineering time for upgrades, incident response and on-call rotation is usually the larger, recurring share. In a quote or internal estimate, ask for separate lines for server rental per node, registry storage and bandwidth, monitoring, backup storage for each database, and the hours needed for upgrades and on-call. If that total approaches what your current managed plan costs for the same workload, a single-server Dokku deployment or a move to a different platform may be the better fit.

How to build the Heroku and Dokku cost model with your own numbers

This sequence turns your Heroku invoices, workload profile and migration quotes into a three-year cost comparison that shows which line items move, which disappear and which new ones you take on. The result is a model you can defend in a renewal or budget discussion.

  1. Export current Heroku invoices by line item

    Pull the last 12 months of Heroku invoices from the billing section of your account or through your Salesforce billing contact, and sort every charge into dynos, Postgres, add-ons, Private Space and support. Finance or the account owner does this, and the check is that the monthly totals reconcile to what was paid. Keep the invoice PDFs with the spreadsheet so the baseline can be audited later. Ask Heroku to confirm any charge you cannot map to a product line before you rely on it.

  2. List every dyno, Postgres plan and add-on

    Build an inventory with one row per app and process type, recording dyno size, quantity, whether it runs 24 hours, the Postgres plan and its storage, and each add-on with its plan. Platform engineering does this from the Heroku CLI and the Platform API, and it should include Scheduler jobs, review apps and staging environments that are easy to forget. The check is that the inventory's monthly total matches the invoice baseline within an amount you have agreed to accept. Mark any app that is scheduled for retirement so it does not inflate the model.

  3. Size servers from your own load tests

    Run load tests against a representative build of each app, recording peak CPU, memory, connection counts and disk growth for the database. Compare those measurements with the minimums in the Dokku installation guide, which call for 1 GB of RAM for the default Docker scheduler, and with the Coolify installation requirements of at least 2 CPU cores, 2 GB RAM and 10 GB of free disk. Engineering owns the tests, and the output is a server plan with headroom you choose and document. Treat the minimums as floors, since the Coolify host also runs its own containers and the proxy.

  4. Price rented servers and backup storage

    Request written monthly prices from your hosting provider for the server sizes in the plan, in the region your data must stay in, and for object storage used by database backups. Include bandwidth allowances, snapshot or backup options, and any charges for IP addresses and load balancers. Procurement or finance collects the quotes, and the check is a single monthly figure per environment with the assumptions listed beside it. If you run Coolify Cloud or Dokku Pro as an optional paid layer, add those fees as separate lines and confirm them on the vendor's pricing page.

  5. Estimate patching and on-call hours from incident history

    Review the last 12 months of tickets and incidents to count hours spent on Heroku-related issues, such as dyno restarts, add-on problems and deploy failures, and set a rate per hour from your own salary bands. Then estimate the recurring work that moves to your team: operating system and Docker patches, Dokku or Coolify upgrades, proxy and certificate checks, database upgrades and restore tests. Platform engineering owns the estimate, and it is done when each hour figure has a named source in your ticket system. Note that Coolify's guide for managed platforms says a rollback does not restore databases or persistent files, so budget time for restore testing.

  6. Add migration and implementation fees from written quotes

    Collect written quotes for migration work, including app porting, database moves, DNS cutover, security hardening and any retainer for ongoing support, using a scope document that lists the same apps and databases as your inventory. Each quote should show one-time fees separately from recurring fees and state what is excluded. The check is that every app in the inventory is either in a quote or marked as handled internally with a named owner. Do not accept an estimate that cannot be traced to a scope line.

  7. Compare the options over a three-year horizon

    Build a spreadsheet with one-time costs in the first period and monthly recurring costs for 36 months, showing the Heroku baseline next to the self-hosted option, with each assumption linked to its source. Include a sensitivity line for server price, labor rate and migration overrun so the decision does not depend on one number. Finance and the platform lead review the model together, and it is complete when the three-year totals and the assumptions are signed off in writing. Document the renewal date and any Heroku contract terms that change the timing.

Dokku, Coolify and Heroku cost profiles side by side

Heroku is a proprietary managed platform, so you pay Salesforce for the platform and the resources it runs. Dynos, Heroku Postgres plans and Private Spaces are billed as recurring fees per resource, and the bill grows as you add process types, instances or database tiers. Heroku's own platform upgrades, runtime maintenance and infrastructure patching sit with the vendor, while your team still owns application dependencies, database schema changes and config vars.

  • Licence and subscription: Proprietary service billed per resource each month, with no open-source code to run.
  • Metered or fixed: Dynos, database plans and add-ons are fixed monthly line items, and Private Spaces add a separate fee.
  • Upgrades: Heroku handles the platform and stack, but Heroku announced in February 2026 a move to a sustaining engineering model, so check the roadmap and Enterprise Account terms before renewal.
  • Data exit: Backups and exports are a cost and planning item in their own right, since moving data out relies on tooling you must run.

Ask your Heroku account team to itemize every dyno type, add-on and Private Space in the renewal quote.

Costs teams forget on each side of the comparison

The sticker price of a dyno or a server rarely decides this move. The costs that surprise teams sit in add-ons, regional fees, backups that must be proven to restore, and the security work that a managed platform used to absorb. Check each line below in both the Heroku estimate and the self-hosted plan before comparing totals.

Add-on sprawl on Heroku

Each Heroku add-on is billed on its own plan, so a typical app accumulates Postgres, Redis, logging, monitoring and email services that are invoiced separately from dynos. Before you compare totals, list every add-on attached to each app, its plan tier and its renewal path. On the self-hosted side, each of those services becomes a container, a volume and a backup job you must size and watch.

Private Space and region fees

Heroku Private Spaces and region choices add cost on top of the Common Runtime rate, and they may be needed for network isolation or data location rules. Ask Heroku for the exact Space and region line items in writing for your app count. Dokku or Coolify on servers you rent is priced by the machine and the region you pick, so compare the same network and location requirements on both sides.

Heroku pg:backups dependence

Heroku Postgres recovery depends on pg:backups snapshots and plan-specific retention, which you may need to export or copy for your own exit or audit trail. Ask Heroku which retention and export options apply to your plan and where snapshots are stored. On Dokku or Coolify, you must set up your own dump schedule and off-host storage before the move, so the cost includes that storage and the time to configure it.

Rollback does not restore data

Coolify's guidance for teams coming from managed platforms says a rollback can redeploy a retained application image but does not restore databases or persistent files. Heroku's release rollback is easy to assume works the same way, so budget separately for database and file recovery. Plan a restore procedure and test it before cutover, because a failed rollback without a tested database restore becomes an outage.

Backup restore testing time

A backup that has never been restored is an assumption, not a control. Budget engineering time for restore drills into a separate server, including checking row counts, application startup and time to recover. Coolify's PostgreSQL backups use the pg_dump custom format and can upload to S3-compatible storage, but the restore path must still be exercised. Ask your team or partner to name who runs these drills and how often.

Certificates and wildcard DNS

Preview deployments in Coolify use a default pattern that needs wildcard DNS, and HTTPS for every preview host depends on the proxy and certificate setup you choose. Heroku Review Apps hid this work behind the platform. Budget time for DNS zone changes, the proxy configuration, and the ongoing renewal checks, and confirm which certificate option your proxy uses before you promise preview URLs to developers.

Security hardening and patching

On Heroku, the provider operates the underlying platform, while on a self-hosted server you own host hardening, SSH access control, firewall rules, OS patching and Docker updates. Estimate the hours to build a hardening baseline, document it, and keep it current, and decide who is on call for security alerts. Confirm the scope of that work in your written quote, because it recurs every month rather than once.

Who pays for Postgres backups and restores after the move

On Heroku, backups of Heroku Postgres are part of the database service you pay for, so the cost sits in the plan and the team's job is mostly to confirm retention and restore steps. After a move to Dokku, the dokku-postgres plugin takes over that role. The plugin installs PostgreSQL 18.6 by default and can run one-off or scheduled backups to S3-compatible storage, so you now pay for the bucket, its egress and its growth, and your own staff own the schedule, the retention rules and the restore runbook. Confirm the current backup and restore behavior in the plugin's README before you size anything, because plugin behavior changes between releases.

Budget for three recurring line items. The first is object storage, which grows with every scheduled dump and every retained copy, so retention settings drive the bill more than the first backup does. The second is restore testing: a backup that has never been restored into a scratch database is an unverified backup, and someone has to schedule that work each quarter or after each major upgrade. The third is the engineer time to watch failed jobs and respond when a dump is incomplete. Ask your provider whether restore drills are inside the fixed scope or a separate retainer, and ask who holds the S3 credentials and where the encryption keys live.

Ask the platform team to write down a restore target before cutover, such as the maximum data loss and time to recover the business can accept, and test a restore from the S3-compatible copy against that target. Record the result as evidence for your own change and risk reviews. If the database is a Heroku Postgres plan with a point-in-time or snapshot history you rely on, confirm that your Dokku backup schedule covers the same window, because a daily dump does not give the same recovery point as continuous archiving.

Questions buyers ask before comparing Heroku and Dokku costs

Is Dokku free to use?

Yes, the Dokku software itself is free. Dokku is MIT licensed, so you can run it on your own servers without a license fee. The costs that remain are the servers you rent or own, the time your team spends installing, patching and running the platform, and any plugins or external services you add, such as off-site backup storage. If you want paid features, Dokku Pro is a separate optional product. Ask your team to list every recurring line item, not only the software license, before comparing totals with Heroku's per-dyno and per-database billing.

How long does a move from Heroku to Dokku take?

The length depends on the number of apps, how many use Heroku Postgres or other add-ons, how much of the build setup needs changes, and how much DNS and cutover planning is required. Dokku deploys with a git push, so the platform setup is usually the smaller part. Database migration, config var re-creation and testing with real traffic tend to take the longest. Ask any provider for a written timeline that breaks the work into apps, datastores, DNS cutover and rollback steps, and check it against your renewal date.

What work must our team do itself after a move to Dokku?

Your team owns the server, the operating system, security updates, Dokku upgrades, the reverse proxy and TLS configuration, and the database backups you choose to schedule. Dokku runs on a single server by default and provides no datastores until you install plugins, so each datastore becomes something you operate. The dokku-postgres plugin can run scheduled backups to S3-compatible storage, but restore testing, retention decisions and monitoring remain your responsibility. Ask for a responsibility matrix that assigns each of these tasks to a named person.

Is an outside partner worth the fee for a Dokku move?

A partner is worth considering when the internal team lacks time, Linux or database operations experience, or a documented process for backups and recovery. DeployOpen plans, implements, integrates, hardens, backs up, upgrades and documents self-hosted platforms inside your own infrastructure, and most engagements are fixed-scope with scope, deliverables and timelines agreed in writing first. Compare the quote against the internal hours you would otherwise spend, plus the cost of a failed cutover. DeployOpen does not publish prices, so request a written scope and quote.

How do Dokku Pro and Coolify Cloud compare on cost?

They are optional paid products that address different gaps, so compare them by what they replace. Coolify Cloud is a hosted control plane that costs $5 per month for 2 connected servers plus $3 per month for each additional server, with a 20% discount for annual billing, according to Coolify's pricing page, while you still bring and pay for your own servers. Dokku Pro's pricing is not supplied here, so check its page and ask for its written terms. Also ask who holds the control plane, where data flows and what happens to your setup if you stop paying.

What changes for Heroku customers after the sustaining engineering announcement?

Heroku announced on February 6, 2026 that it is moving to a sustaining engineering model focused on stability, security, reliability and support rather than new features, and that Enterprise Account contracts will no longer be offered to new customers. The announcement does not set a shutdown date in the sources we reviewed, so existing customers should confirm their contract terms and renewal dates in writing with Heroku. Plan the move around those dates, and build the migration timeline so that a Dokku cutover does not depend on a renewal deadline you cannot meet.

How does on-call cost change when we run Dokku ourselves?

On Heroku, the platform team is paid for dyno and database billing, while Heroku handles the underlying platform. On Dokku, the on-call load moves to your team for host outages, disk full events, failed upgrades, certificate renewals and database restores. The cost drivers are the number of servers, how well monitoring and alerts are set up, how many people are trained to restore a database, and how often you upgrade. Ask a provider to show who receives alerts, what the escalation path is and how restores are tested, so you can price the rotation rather than guess it.

How DeployOpen scopes a fixed-price Dokku cost and migration plan

DeployOpen is a Chainscore Labs company that plans, implements, hardens, backs up and documents self-hosted open-source platforms inside your own infrastructure. For Heroku cost versus Dokku, we start from a written scope that compares your current Heroku line items with the components you would run yourself, then agree deliverables before any work begins.

How we scope

  • Inventory your dynos, Postgres plans, Private Space fees and add-ons so each line item has a named self-hosted equivalent.
  • Define which servers, data center or cloud account, backup target and DNS setup the Dokku host will use.
  • Agree in writing which cost components are in scope, including patching, backups and on-call time, before quoting.

How we build

  • Install and configure Dokku on the agreed servers, with the builder chosen for each app (herokuish, Cloud Native Buildpacks, Dockerfile or Nixpacks).
  • Set up the dokku-postgres plugin, test pg:export and scheduled backups to S3-compatible storage, and run a restore test.
  • Test app.json compatibility, Procfile process types, the release process and healthchecks against each app before cutover.

How we hand over

  • Document the deployed architecture, server build, proxy choice, backup schedules and the restore runbook for your operators.
  • Provide a cost model that lists recurring server, storage, backup and staff items, so your finance and platform teams can compare it with the Heroku invoice.
  • Walk your team through git push deploys, config variable handling and rollback limits, including that rollbacks do not restore databases or persistent files.

How we support

  • Ongoing support, upgrades and continuous testing are available as retainers after handover, scoped separately from the fixed project.
  • Upgrade Dokku, the operating system and the Postgres plugin on a schedule you approve, with a tested rollback path.
  • Confirm with your team which on-call and patching responsibilities stay internal and which move to a retainer.

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.