Dokploy installs a Docker Swarm plus Traefik stack on your server and gives you a dashboard for deploying applications from git, running managed Postgres, MySQL, MongoDB, MariaDB and Redis instances, and issuing TLS certificates. It aims at the Vercel and Heroku workflow on hardware you own.
Our verdict on Dokploy#
Dokploy is the leanest of the self-hosted PaaS options: the install script initializes Docker Swarm, creates an overlay network, starts a Postgres 16 service, the Dokploy service on port 3000, and a Traefik container on 80 and 443. Three containers, not five. The Swarm dependency is the thing to weigh, because it means your single-node PaaS is running an orchestrator most people no longer use, and it is also how multi-node scaling works. Be clear-eyed about maturity: the repository was created in April 2024 and the current release is v0.30.5 (September 2026), still 0.x, shipping multiple releases some weeks. A v0.29.13 release fixed roughly sixteen command-injection and authorization-bypass issues, which tells you both that the project takes reports seriously and that the code is young. The licence is Apache-2.0 today, with a Dokploy Source Available License reserved for a future /proprietary directory that does not yet exist at the repo root.
Who Dokploy is for#
Choose it if
- A developer deploying a handful of Node, Python or Go apps to one VPS who wants push-to-deploy and automatic TLS
- Someone who already knows Docker Swarm and wants a UI over it rather than a new orchestrator
- A small agency hosting client sites who needs per-project isolation, managed databases and scheduled backups in one dashboard
Look elsewhere if
- You want the dashboard behind your company identity provider, since there is no OIDC login
- You need a stable API and upgrade contract; a 0.x line moving this fast will break something within a year
- You are on a 1 GB VPS, because Postgres plus Traefik plus the app itself will not fit under the documented 2 GB minimum
What running it actually looks like#
One command: curl -sSL https://dokploy.com/install.sh | sh on a fresh Ubuntu or Debian box with 2 GB RAM and 30 GB disk. It checks that port 3000 is free, installs Docker if missing, runs docker swarm init against your advertise address, creates the attachable overlay network dokploy-network, generates Postgres and auth secrets as Docker secrets, then starts three things: dokploy-postgres (postgres:16), the dokploy service published on 3000 in host mode with the Docker socket mounted, and a dokploy-traefik container binding 80 and 443. You then open port 3000, create the first admin, point a domain at the box and let Traefik issue certificates. Adding a second server means joining it as a Swarm worker, not installing Dokploy again.
Resource profile#
- Memory
- 900 MB idle, around 2048 MB in ordinary use. The docs state a 2 GB minimum for the server; Dokploy plus Postgres plus Traefik consume most of the first gigabyte before you deploy anything.
- CPU and acceleration
- Idle between deploys, then a build spike that runs on the same box as your production containers unless you configure a dedicated build server.
- Storage growth
- The docs ask for 30 GB free; build layers and old images are the growth, and `/etc/dokploy` holds Traefik config, deployment logs and application volumes.
- Operational load
- 3 of 5, Moderate. A real Postgres, a Swarm you did not ask for, and a 0.x release line shipping several versions a month. Upgrades usually work, but you should read release notes before running them, which is rubric level 3.
Figures describe a small single-household install and are the working assumptions behind our stack planner. Your numbers will differ with library size, user count and hardware. See methodology.
Data and backup surface#
Two locations. /etc/dokploy on the host holds Traefik static and dynamic configuration, SSH keys, per-application volumes and deployment logs; it is a plain directory and copies fine. The dokploy-postgres Docker volume holds every project, environment variable, domain and user, and needs a pg_dump rather than a file copy while it is running. Managed database instances you create through the UI are separate volumes with their own lifecycle, and Dokploy's scheduled backup feature can push them to S3, which is the right answer. Built images and cloned repositories are regenerable. Also record your Swarm join tokens; without them a rebuilt manager cannot readopt workers.
Derived backup shape
Postgres dump. pg_dump (or pg_dumpall) into a file, then snapshot that file plus the app's data volume.
Traps and surprises#
The installer initializes Docker Swarm on your host
docker swarm init runs as part of installation and picks an advertise address. If the box has multiple interfaces, or you later change its IP, Swarm keeps advertising the old address and services fail to schedule. Set --advertise-addr deliberately on a multi-homed machine, and remember that leaving Swarm later (docker swarm leave --force) removes every Dokploy service along with it.
Port 3000 must be free before you install
The install script explicitly checks for a listener on port 3000 and aborts with an error if it finds one. Grafana, a Node dev server or another dashboard on that port will stop the install cold. There is no prompt to pick a different port during installation, so free the port first or plan to run Dokploy on a dedicated host.
Still 0.x, with security fixes landing in patch releases
Release v0.29.13 fixed around sixteen command-injection and authorization-bypass issues in one go. That is a young codebase with an active security process, not an abandoned one, but it means you should not run an old pinned version and you should not expose the dashboard on 3000 to the internet. Put it behind a VPN or a reverse proxy with authentication, and keep up with releases.
The licence reserves room for paid-only code
LICENSE.MD splits the repository: anything under a /proprietary directory falls under the Dokploy Source Available License, which forbids production use without a commercial agreement, and everything else is Apache-2.0. No such directory exists at the repository root today, so what you install is Apache-2.0. Treat this as a signal about where the project is heading rather than a current restriction.
Specifications#
- Category
- Platforms and container management
- Licence
- Apache-2.0, with DSAL 1.0 reserved for a /proprietary path (Permissive)
- Written in
- TypeScript
- First release
- 2024
- Maturity
- Young
- Datastore
- PostgreSQL 16 (Docker Swarm service, dokploy-postgres volume)
- Default ports
80,443,3000- Ships as
- install script (initializes Docker Swarm), multi-node via Swarm workers
- arm64 builds
- Yes
- Identity
- Local accounts only. Local accounts with two-factor and invitations; there is no OIDC login for the dashboard itself.
- Replaces
- Vercel, Heroku, Netlify, Render
- Project site
- dokploy.com
- Source
- github.com/Dokploy/dokploy
- Documentation
- docs.dokploy.com
Alternatives to Dokploy#
Everything else in platforms and container management, closest in operational weight first.
| Tool | Ops load | Idle RAM | Licence |
|---|---|---|---|
| Coolify | 3, Moderate | 1200 MB | Apache-2.0 |
| Komodo | 3, Moderate | 250 MB | GPL-3.0 |
| TrueNAS Community Edition | 3, Moderate | 8192 MB | LGPL-3.0 (middleware) |
| CasaOS | 2, Light | 300 MB | Apache-2.0 |
| Docker Engine | 2, Light | 120 MB | Apache-2.0 (Engine and Compose); Docker Desktop is proprietary |
| Podman | 2, Light | 40 MB | Apache-2.0 |
Where Dokploy comes up elsewhere#
Head to head
Sources#
Facts on this page were checked against the project's own material. Where a number is our own estimate rather than a published figure, the text says so.
Published . Last reviewed . Found something out of date? Tell us and we will fix it and log the change.