Skip to content

Dokploy is amazing!

Author's photo
4 min read ยท

Last weekend I've migrated my website infrastructure to Dokploy. And it's fucking amazing!

Looking back to the times when I've just started my webdev journey: we've been uploading files and folders to shared hosting over ftp. Later we've been pushing code over SSH + rsync to a VPS, then Heroku made deployments as easy as git push. Then came Docker and changed everything (for good!). But deploys were still mostly CLI-based in the free open-source software world.

Now we have Dokploy. It's free. It's open-source. It looks and works like a million-dollar product. It's just crazy how good it is.

I'm comparing to its predecessors: Dokku (CLI-based PaaS) even with its paid $849 Dokku Pro UI, and CapRover. Both are amazing tools, but now in 2025 they look obsolete next to Dokploy.

Pitfall 01: DNS propagation

Before migrating to Dokploy I've been hosting this blog and its Plausible analytics backend on Dokku.

Converting the static website build from buildpacks to a Docker image was easy.

But I've rushed moving the domain to the new IP, making the website inaccessible in some regions during DNS propagation -- Dokploy couldn't request a Let's Encrypt certificate until the DNS update propagated, and I was too lazy to find a way to transfer the certificate from the old server to the new one.

If I had to do this again (still being lazy :D) I'd change TTL on the A record to 300 (5 minutes is the shortest it can get) to reduce the time window overlap between the old and then new DNS, and only after that I'd switch it to the new IP address.

It's still not ideal but sufficient for my low-load low-traffic personal blog and feels much better than stretching it up to 60 minutes.

Pitfall 02: Let's Encrypt certificates

Another thing that made me scratch my head was requesting new Let's Encrypt certificates.

  • The problem was tough to debug or even notice, as there was absolutely no visual feedback in the UI indicating the progress and status of the certificate issuance. You tick a checkbox and hope it works, while it does not, without any visual clue.

  • The actual problem was me adding the domain to Dokploy before switching it to the new IP (of course, I had to test it before going all-in).

The troubleshooting guide mentions it, but who reads docs in advance anyway? :)

Restarting Traefik once the new DNS records propagated (as the documentation suggests) has fixed the issue.

Note on performance

Dokku seems to be a more resource-efficient solution.
It has zero runtime overhead, as it's basically just a set of CLI tools: no webserver, no resource usage when idle. Deployments work by pushing code to a git remote, which triggers an SSH command on the server on-demand.

I'm curious to try running Dokploy on a separate dedicated machine (or maybe even on my localhost?) and use it to deploy my apps to remote servers by adding their SSH keys to Dokploy. From what I've seen in the UI, this seems to be supported out-of-the box.

Another observation is that Dokku database plugins use a shared database server for multiple apps (by using isolated schemas and user credentials). Dokploy, on the other hand, uses the share nothing approach when every app is supposed to have its own database instance. Which is a benefit for isolation but takes its toll on the lower tier servers running multiple db-enabled apps.

Don't be afraid of running your own server!

Running your own servers and self-hosting your apps has never been easier and more user-friendly. Dokploy erases the line between paid server-management and app deployment services, making it a no-brainer go-to solution for small teams and almost any solo developer.

I absolutely love the trend of self-hosting slowly becoming a norm again. And I support DHH in promoting it:

Let me know what you think by pinging me on socials or emailing me.

Cheers! ๐Ÿ––

End of article
Got any comments?