Render vs Dokku

Render runs your services, workers, cron jobs and Postgres as a managed platform with managed scaling. Dokku runs the same kinds of workloads on a server you control, with Procfile process types, app.json cron and plugin-based datastores. The choice turns on who operates the platform and where the data lives.

On this page

Render vs Dokku: when each fits a team

Choose Dokku over Render when the workload fits on one server and your team can operate that server. Render fits teams that want managed scaling, managed Postgres and Key Value, and very little platform operation. Teams usually start looking at Dokku when a Render workspace is growing in cost, when a data location requirement rules out where their services run, or when they want more control over the stack. Those reasons are legitimate, but they point toward different tradeoffs, so the decision should start from your actual constraints rather than from the price line on an invoice.

Dokku is a good fit when your web services, workers and cron jobs need roughly one server's worth of capacity, your team wants the git push workflow that Render users already know, and someone is willing to own upgrades, backups, monitoring and security patches on that host. Dokku runs on a single server by design, with the default docker-local scheduler placing containers on the Dokku host. Procfile process types and app.json cron tasks replace Render service types, and the official Postgres plugin covers database backups to S3-compatible storage. Confirm the current supported operating systems and RAM requirements in the Dokku installation docs before you size a host.

Four questions settle most of the decision: traffic shape, failover needs, data residency and who will be on call. Spiky or unpredictable traffic that needs automatic scaling is a weak match for a single host. A requirement for database failover or point-in-time recovery needs a plan beyond a single Postgres container. A residency rule may favor infrastructure you choose, but Dokku only helps if you can place that server where the rule requires. Finally, ask who gets paged at 2 a.m. If no one on the team can restore a database or recover a host, the lower hosting bill will not offset the operating risk.

Which platform fits which scenario

This table compares Render and Dokku across common Render workloads, naming the better fit and the reason in terms of managed scaling, operating effort and single-server scope. Read each row as a conditional: the answer changes if your traffic pattern, data location or team capacity changes. Dokku usually fits when one server is enough and someone on the team is comfortable operating it.

ScenarioBetter fitReason
A few web services and one Postgres databaseDepends on operating capacityRender handles the server, TLS and database backups for you. Dokku on one server is viable if you accept patching, monitoring and restore testing yourself.
Background workers and scheduled jobsDokku, if one host has capacityProcfile process types and app.json cron tasks map closely to Render services. Confirm the cron and worker behavior you rely on against Dokku's documented feature set.
Workload that must scale horizontally across machinesRenderDokku's default docker-local scheduler runs on one host. Multi-server scheduling via k3s needs a Docker registry and adds cluster operations work.
Data must stay on servers you controlDokkuDokku runs on infrastructure you choose, so data placement follows your server location. Confirm your residency and compliance rules with your auditor or counsel.
Team has no one to operate a serverRenderRender removes host patching, reverse proxy upkeep and backup scheduling from your team. Dokku moves those tasks to whoever is on call.
Small internal tools with predictable trafficDokkuA single server sized for steady load can run several apps. Ask for the current cost of your Render plans and compare it with your server and staff time.
Need for managed backups with point-in-time recoveryRenderRender provides managed Postgres backup options. Dokku's Postgres plugin supports exports and S3-compatible scheduled backups, but you own recovery testing.
Frequent deploys from Git with custom build stepsDokku, if buildpacks or a Dockerfile cover your buildGit push deploys work on Dokku with herokuish, Cloud Native Buildpacks, Nixpacks, Railpack or a Dockerfile. Verify your language and build chain first.

How Procfile process types and app.json cron replace Render service types

Dokku does not have Render's service types. Instead, every workload is a process type declared in a Procfile at the root of the repository, and each type is a line such as web: or worker:. A Render web service maps to the web process, which is the only type Dokku routes HTTP traffic to. Background workers from Render map to additional process types, and you scale each one with dokku ps:scale using the process name. Dokku reads the Procfile under procfile-util strict mode rules, so check that each line is well formed before the first deploy. The first deploy scales web to 1 automatically, but every other type starts at zero, so a worker will not run until you scale it up.

Pre-deploy work, such as database migrations, belongs in a release process type. Dokku runs it during deployment in a way that works like the Heroku Release Phase, which is the closest equivalent to a Render pre-deploy command. Scheduled jobs from Render cron services are declared in app.json under cron tasks, following the format Heroku uses. Dokku documents that not all Heroku functionality is supported, so compare each field you use against the Dokku app.json reference, and do not assume a Render Blueprint field has an equivalent. A render.yaml Blueprint is a different file in a different format, so you will rewrite its service definitions rather than copy them. Confirm how cron tasks are scheduled and logged in your Dokku version before you retire the Render cron job.

Capabilities side by side: Render and Dokku

This table sets Render's managed service types against Dokku's self-run model on a single server, row by row. Read the Dokku column as what you install and operate yourself, and confirm each Render cell on render.com/pricing or in Render's documentation before you rely on it for a decision.

CapabilityRenderDokku
Web servicesManaged web services deployed from Git or images, confirm current runtime and plan options in Render's documentationWeb process from a Procfile, scaled with ps:scale; the first deploy scales web to 1
Workers and background processesBackground worker service type, confirm sizing and plan limits on render.com/pricingAdditional process types declared in a Procfile and scaled with ps:scale
Cron jobsScheduled job service type, confirm execution limits and history in Render's documentationCron tasks defined in app.json, based on Heroku's format; not all Heroku functions are supported
Static sitesManaged static site hosting, confirm bandwidth and build limits on render.com/pricingNot a dedicated static product; serve built assets through a web process or a proxy you configure
PostgresManaged Postgres with instance tiers, confirm current plans and backup retention in Render's documentationdokku-postgres plugin, PostgreSQL 18.6 by default, with export, import and scheduled backups to S3-compatible storage
Key Value or RedisManaged Redis-compatible Key Value service, confirm plans in Render's documentationRedis through an official datastore plugin; you size, back up and patch the instance
Build sourcesGit push and container image deploys, confirm supported build options in Render's documentationgit push to a dokku remote using herokuish, Cloud Native Buildpacks via pack, Dockerfile, Nixpacks or Railpack
Scaling and scopeManaged scaling across instance types, confirm autoscaling options in Render's documentationSingle server by default with the docker-local scheduler; k3s multi-server needs a Docker registry
Regions and licenseHosted in Render regions, confirm the list on render.com/pricing; proprietary serviceRuns in the server location you choose; MIT licensed, so the code is free to run and modify

How Dokku plugins replace Render Postgres and Key Value

Dokku provides no datastores by default. You add them with official plugins, and the dokku-postgres plugin is the one most teams evaluate first as a replacement for Render Postgres. Creating and linking a database is a short operator task, and linking sets the app's DATABASE_URL so your application code can stay largely unchanged. The plugin installs PostgreSQL 18.6 by default, so confirm that version matches the major version your application and extensions require before you plan the move.

  • Default install: The plugin installs PostgreSQL 18.6 unless you configure otherwise, so check extension and version compatibility first.
  • Link to the app: Linking a Postgres service sets DATABASE_URL on the app, replacing the Render connection string.
  • Logical export and import: Use postgres:export and postgres:import to move data in and out of the database during migration rehearsals.
  • Scheduled backups: The plugin can run one-off or scheduled backups to S3-compatible storage, which you must provision and pay for separately.
  • Scope limits: Confirm extensions, replicas, point-in-time recovery and connection pooling against your Render plan, since these are not equivalent by default.

Before cutover, ask your team to list every Render Postgres feature in use, then verify each one against the plugin documentation and a restore into a test server.

Who controls the data, the server and the access

Render runs your services in a managed workspace, while Dokku runs them on a single host that your team builds, patches and monitors. The cards below cover where data sits, who operates the host, how access is granted, what logs you can produce and what a compliance assessor will ask for in each model.

Data location and regions

On Render, you choose from the regions Render offers, and existing services cannot be moved between them, so confirm the region of every service and database before you migrate. On Dokku, the data lives wherever the single server is racked or rented, whether that is your data center, a cloud account you own or an EU provider. Write down the physical location and the backup destination together, because backups often leave the primary region.

Hosting model and patching duty

Render operates the underlying platform, hosts and runtime, so your team manages application code and configuration. Dokku moves that operating work to your team: the host OS, Docker, the Dokku release, the reverse proxy and each datastore plugin need patch windows and an owner. Name that person before cutover, since a single server has no failover partner.

Identity and access control

Render controls team membership and roles inside its workspace, and you should review those roles against your access policy and any SSO option on your plan. Dokku has no built-in multi-user console; access is SSH keys on the server and the git push path, so each deployer needs a documented key, offboarding removes that key and the host firewall limits who can reach the SSH port. Confirm how your identity provider integrates before you rely on it.

Logging and audit evidence

Render keeps platform and service logs in its dashboard, and the retention and export options depend on the plan, so check them against your evidence requirements. Dokku writes container and proxy output to the host, so you decide where logs go, how long they stay and who can read them. Ship logs off the server to storage the operator cannot quietly change, and keep records of who ran each deploy and each datastore restore.

Backups and recovery responsibility

Render's managed Postgres includes point-in-time recovery on paid plans, and you should confirm the window your plan provides. On Dokku, the dokku-postgres plugin runs one-off or scheduled backups to S3-compatible storage, but you must configure the bucket, the retention and periodic restore tests yourself. Backups stored on the same host as the database protect against code mistakes only, not against losing the server.

Compliance readiness and assessor evidence

Compliance frameworks ask you to show the controls, not only to have them, so map each control to an owner, a configuration and a record. Render's compliance statements and any HIPAA workspace terms are for you to verify on Render's own pages and in your contract. DeployOpen can plan, configure and document controls and prepare evidence for an assessment, but it does not issue audit reports, attestations or certifications; an independent auditor or certification body does that.

What Render and Dokku cost, component by component

Render bills per resource, so the monthly figure is a sum of line items: each web service, background worker, cron job, static site and database is priced on its own instance or plan, and a workspace fee and bandwidth overage may sit on top. Pull the current numbers from Render pricing rather than relying on figures from a blog or an old invoice, because plan names and tiers change. Before you compare, list every service and database in your current workspace, the plan of each, and your bandwidth use over the last three billing cycles. Those three inputs drive the Render side of any comparison.

On the Dokku side, the recurring costs are the server or cloud instance that runs Dokku, offsite backup storage for the Postgres plugin's S3-compatible backups, and any monitoring or log retention you add. The Dokku software carries no license fee under its MIT license. The larger recurring cost is people time for upgrades, security patching, monitoring and on-call, which an operator pays for even when nobody sends an invoice for it. One-time costs are the migration itself, including rebuilding services, moving data, testing the cutover and writing runbooks. Those costs scale with how many services you move and how much data each database holds.

Ask any implementation partner or internal team for a written quote that separates these lines: discovery and migration effort, server sizing and redundancy, backup storage and restore testing, monitoring setup, and a stated support period for upgrades and incidents. Ask what a restore test costs and how often it is repeated. Confirm the server size you need with a load test on your own workloads, since Dokku runs on a single server by default and a larger instance is the usual first lever. Ask whether the quote covers a rollback path if the cutover fails, because that work is often the first thing left out of a low estimate.

Where single-server Dokku stops and Render's managed scaling starts

Dokku's default model runs every app on one server that you operate, so the limits of that host become your limits. The four points below mark where that model stops fitting a workload that Render would otherwise scale and replace for you.

Scaling within one server

Dokku's documentation describes it as a platform that runs on a single server, and the default docker-local scheduler runs containers directly on that host. Scaling a process type with ps:scale adds containers on the same machine, so CPU, memory and disk are shared by every app and worker. This limit matters when traffic or background load grows past what one host can serve. Check peak CPU, memory and disk usage of your Render services, and size the Dokku host against that peak with headroom for deploys.

Multi-server k3s scheduler requirements

Dokku 0.33.0 introduced a k3s scheduler that builds a multi-server K3s cluster. It requires a Docker registry to distribute images to nodes, so you run and secure that registry as well. Teams that need instances on more than one machine should confirm that their workloads, storage and networking work under k3s before committing. Ask who will operate the cluster, registry and node upgrades once the first node is in place.

Single git push target

Only the initial Dokku server is configured as the git push target, so deploys from your CI or developers always go to one host even when the k3s scheduler spreads containers across several nodes. If that host is unavailable, you cannot push a new release through the normal path. Render's git-connected deploys do not depend on a single machine you maintain. Document a recovery path for the deploy host and confirm that your release process does not require the original server to be reachable.

High availability and failover

Render replaces failed instances and manages capacity on your behalf. A Dokku host is one machine, so a hardware fault, a failed kernel upgrade or a failed proxy change takes every app on it offline until you restore service. Zero-downtime server maintenance requires a second environment or a planned migration, which you design and run yourself. Ask whether your uptime target can tolerate a single host, and whether you need a tested restore procedure and a standby server.

What a move from Render to Dokku involves

The sequence runs from inventory to decommissioning, and it ends with Render services, workers, cron jobs and Postgres running on a Dokku server you control, with a rollback path until the cutover is confirmed. The effort in each step depends on how many services, workers and databases you run and how much of the configuration is already written down.

  1. Inventory services, workers and data

    List every Render web service, background worker, cron job, static site and Postgres database, along with its build method, start command, instance size, custom domains, environment values and any attached disks. Record which services depend on each other and which ones are internal only. The person who owns each application should confirm the list, because environment values and cron schedules are easy to miss in the Render dashboard. This step is done when every workload has one row in a shared inventory and each row names an owner.

  2. Prepare the Dokku server and proxy

    Install Dokku on a server you control, using a supported operating system and the RAM that Dokku's installation guide specifies for the default Docker scheduler. Choose the reverse proxy, which defaults to nginx and can be swapped for Caddy, HAProxy, OpenResty or Traefik, and confirm DNS records can point at the server. Set up backups for the host and plan where Postgres dumps will be stored. Done means a test app deploys with git push to the dokku remote and answers on a test domain over HTTPS.

  3. Rebuild each service on Dokku

    For each inventoried workload, choose a build path: a Procfile for process types, an app.json for deploy scripts, cron tasks and healthchecks, or a Dockerfile where the Render build is already containerized. Map Render web services to the web process type, workers to their own process types, and cron jobs to app.json cron entries, checking that Dokku's app.json support covers each feature you use. Set process counts with ps:scale. Done means each application builds and starts on Dokku with the same commands it used on Render.

  4. Export and restore Postgres

    Create a Postgres service with the dokku-postgres plugin, then take a logical dump from the Render database using pg_dump in a format your restore tooling supports. Restore it into the Dokku database and link the service to the app so DATABASE_URL is set. Compare table counts, row counts and a sample of critical records between source and target. Done means the restored database passes the application's own smoke tests and the team has a documented dump file and checksum.

  5. Re-enter environment values

    Copy environment values from Render into Dokku using its config commands, one application at a time. Treat secrets as sensitive: avoid pasting them into tickets or chat, and rotate any credential that has been shared outside the secret store. Update values that point at Render-hosted addresses, such as internal URLs or webhook endpoints. Done means each application's configuration matches the inventory, and the owner has signed off on the diff.

  6. Test before switching traffic

    Run functional tests, worker and cron checks, and load checks sized to your expected traffic against the Dokku copy. Verify that scheduled jobs run once at the right time, that background queues drain, and that logs reach the place your team reads them. Confirm that the Dokku copy can be rolled back to a previous release. Done means the test results are recorded and the owners accept the cutover plan in writing.

  7. Switch domains and certificates

    Lower DNS record time-to-live values ahead of the change, point each custom domain at the Dokku server, and issue or attach TLS certificates through the proxy. Confirm that HTTPS works for every hostname and that redirects behave as before. Keep Render running so traffic can return if a problem appears. Done means each public hostname resolves to Dokku and serves a valid certificate.

  8. Run in parallel and decommission Render

    Keep Render and Dokku running side by side for a period agreed by the team, watching errors, queue depth, database writes and cron output. Once the owners confirm stability, take a final export of Render Postgres and any files, then suspend and delete the Render services and databases. Ask Render how long data remains available after deletion before you remove the last copy. Done means Render resources are deleted, final exports are stored, and the runbook for the Dokku servers names the people responsible for upgrades, backups and monitoring.

Questions teams ask before switching from Render to Dokku

How much effort does a switch from Render to Dokku take?

The effort depends mostly on how many services, workers and cron jobs you run, how many Postgres databases need moving, and how much of your build already works with a Dockerfile or standard buildpacks. Dokku reads Procfiles and supports Cloud Native Buildpacks, so a conventional Node, Python or Ruby web service often needs few changes. The larger work is usually rebuilding Render service settings, re-entering environment values, moving the Postgres data, and switching domains and certificates. Ask any quote to list each service and database separately, with the build method for each.

What sets the timeline for moving off Render?

The timeline is set by the number of workloads, the size and write activity of each database, how many external systems point at the current domains, and how much testing the team requires before cutover. Databases with long-running write traffic need a planned cutover window and a tested restore, which takes more time than moving stateless web services. Ask the vendor or partner to show the sequence: staging, data copy, DNS change, verification and the rollback path, and to tie each step to a named owner.

Can a small team migrate from Render to Dokku alone?

A small team with Linux and Docker experience can often do a simple migration alone, especially for a few stateless services and one database. The harder parts are server hardening, TLS renewal, backup verification and restore testing, which are easy to skip under deadline pressure. If nobody on the team has run a production server before, or if compliance evidence is required, a fixed-scope engagement that covers planning, implementation and handover may be the more predictable route. Confirm internal skills and on-call coverage before deciding.

What does running Dokku require from our operations team?

Dokku moves operating work from Render to your server. Your team takes on operating system patching, Dokku upgrades, Docker maintenance, reverse proxy configuration, certificate handling, monitoring, log retention and disk capacity. Dokku runs on a single server by default, so you also need a plan for host failure, including off-server backups and a tested rebuild procedure. Ask for a written runbook covering who patches the host, how upgrades are tested, and how alerts reach an on-call person.

Do cron jobs and background workers carry over from Render to Dokku?

Usually yes, with translation. Dokku uses Procfile process types for workers and scales them with its process commands, and it reads an app.json manifest for cron tasks. Dokku's documentation notes that not all Heroku app.json functionality is supported, so each Render cron job should be checked against the target format. Confirm how each job handles overlapping runs, timezone settings, failure alerts and secrets, because these details are often configured differently on Render and may need rebuilding.

How do backups and rollbacks differ between Render and Dokku?

On Render, the platform manages database backups and infrastructure recovery for paid plans. On Dokku, you own those tasks. The official dokku-postgres plugin supports exports, imports and scheduled backups to S3-compatible storage, but you must configure retention, store copies off the server and test restores. Application rollbacks depend on retained images and releases, and they do not restore database contents or persistent files. Ask for a documented recovery test that restores a database into a clean environment and records the time it took.

When should we hire a partner for the Render to Dokku move?

Consider a partner when the migration includes regulated data, several databases with tight downtime limits, or a team that cannot staff on-call rotation for the new server. A partner is also useful when you need security testing or evidence prepared for a compliance assessment, which DeployOpen supports but does not certify, since independent auditors issue those reports. DeployOpen works on fixed-scope engagements with scope, deliverables and timelines agreed in writing before work starts, and it offers retainers for ongoing support. Ask for a written scope that names what is excluded.

How DeployOpen works on this

DeployOpen plans, implements, hardens, backs up and documents self-hosted open-source platforms inside your own infrastructure, including Dokku on servers you control. We start with a written scope that maps your Render services, workers, cron jobs and Postgres to Dokku, then build, test and hand over the result.

How we scope

  • Inventory every Render web service, background worker, cron job, static site and Postgres database with its size and dependencies
  • Decide which apps build from Procfile buildpacks and which need a Dockerfile, and record the Dokku builder for each
  • Agree in writing whether the single-server scope fits your traffic and failover needs, or whether a different platform is the better match

How we build

  • Install and configure Dokku on the servers you choose, with the reverse proxy, domains and certificates set up for each app
  • Map Render process types to Procfile entries and app.json cron tasks, then test scaling and release steps before cutover
  • Set up the dokku-postgres plugin, restore exported Render data, and configure scheduled backups to S3-compatible storage

How we hand over

  • Deliver runbooks for deploys, rollbacks, database restores and environment variable changes, written for your own engineers
  • Document what a rollback does and does not restore, so the team knows that databases and persistent files need their own recovery steps
  • Provide a cutover plan and checklist covering DNS changes, certificate renewal and the retirement of Render resources

How we support

  • Ongoing support, upgrades and continuous security testing are available as retainers after handover
  • Scope upgrades for Dokku releases and plugin versions, with testing before each change reaches production
  • Ask any firm you evaluate to confirm in writing who owns patching, backups, monitoring and on-call after go-live

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.