Skip to content(if available)orjump to list(if available)

Dokku – Free Heroku Alternative

Dokku – Free Heroku Alternative

112 comments

·May 14, 2022

joshstrange

Dokku is nice and I used it for a while but recently I've been using CapRover [0] and been pretty happy with it. I only use it on 1 host but it supports multiple. It also has 1-click installs for the usual suspects (drupal/wordpress/etc) and things like spinning up a DB is easy. You can also define a docker file in your repo that you instruct it to build and use. HTTPS is a button click and it automatically sets up virtual hosts for you `<your app name>.<base url you configured>`. It's great for quick prototyping and to get a personal project online.

[0] https://caprover.com/

999900000999

Absolutely love Caprover, used it when it was CapDuckDuck.

I basically just lost interest, Firebase does everything I need ultimately. But I'd still argue it's the easiest way to deploy a side project!

sbecker

Caprover is nice and convenient but security wise, only a single password field is required on the admin console. (See demo here: https://captain.server.demo.caprover.com/#/login) Given this it would be nice to at least make the web admin console only accessible via an IP whitelist, but last time I used it I did not find an easy way to do that.

indigodaddy

Can you not firewall the relevant admin webui port?

wilsonfiifi

The admin webui runs on the captain sub-domain so i'm not too sure if that can be firewalled.

jtsiskin

Make a 256 bit password. Problem solved?

conradfr

I use it and am globally happy with it, the biggest downside being the non-zero downtime deployment.

They say it's because it uses Docker Swarm, I don't know if that's true.

hippich

Nice find! What is your impression on reliability? I ended up using dokku in production, but I really like what caprover offers.

joshstrange

It's been pretty reliable for me but I've never used it in production. It's more of a testing grounds-type tool for me or a way to see my work online at a stable URL (which helps motivate me to continue working on something). That's not to say it can't handle production (the multiple hosts aspect certainly indicates it means to support that use-case), just that I can't speak on it.

On thing that's cool (to me) is that I once borked an update of the CapRover admin and while I couldn't get into the dashboard all my projects kept humming along without a care in the world because they were all in their own docker containers. I thought that was pretty neat (all of CapRover runs inside of containers as well and seems to be independent of apps it manages/monitors.

sureglymop

Tried both and like Dokku more. Might make a nice web interface for it for myself.

josegonzalez

Dokku Maintainer here:

We have an official (paid, one-time fee) web ui here: https://pro.dokku.com/ . It's under active development.

There are others (ledokku, wharf, bullet, etc.) that folks in the community have developed/maintained, though I cannot comment on them as I haven't used them for more than 5 minutes.

tough

Checkout ledokku, I still prefer caprover seems more robust at this point. But dokku+ledokku are cool too for self-hosting needs

AndrewOMartin

I came to the comments first to answer "what's the catch?". There were no comments at the time so I went to the website. This line near the top seems particularly fair and believable.

> Own your own PAAS. Infrastructure at a fraction of the cost. Powered by Docker, you can install Dokku on any hardware. Use it on inexpensive cloud providers. Use the extra cash to buy a pony or feed kittens. You'll save tens of dollars a year on your dog photo sharing website.

mdasen

For me, one of the big catches is that you have a single point of failure. Dokku doesn't run over multiple VMs you have. It's on a VM. If that VM goes down, you're down.

I think one of the selling points of Heroku is that if the box you're running on goes down, your service will just be started on another box and traffic will be routed there and you don't need to do anything.

wilsonfiifi

One way to overcome that might be to use ansible to automate:

  1. Dokku setup on a new server 
  
  2. Deploy your app from a git repository

  3. Restore your database from backup
If you aren't comfortable with ansible you can use Fabric [0] or Sup [1]. I think there's even an ansible guide for Dokku deployment on their blog [2].

[0] https://www.fabfile.org/

[1] https://github.com/pressly/sup

[2] https://dokku.github.io/general/automating-dokku-setup

ukoki

If you want a much more highly available open source Heroku, there is Cloud Foundry which is used as the basis for a few public PaaS like IBM Bluemix and SAP Cloud Platform. The smallest HA set up is about 50 VMs though, and it's complicated to deploy so not really worth it if you have fewer than 1,000 or so developers to support.

Bombthecat

Super complicated, tried it several times over the years.

One would think it will get better in newer versions.

But nope..

Didn't try it the last 2 or 3 years though

jeremyjh

If the box you are running in is a VM, the VM host is already providing hardware redundancy. It’s not full redundancy but in practice it’s sufficient for dog photo sharing sites.

judge2020

As far as I know only Google Cloud does ‘hardware redundancy’[0]. I’ve had single-instance outages in AWS and they don’t seem to really care if something goes wrong with your instance, although maybe they have more maintenance events than they let on and they might happen transparently to the user thanks to some form of live migration.

0: https://cloud.google.com/compute/docs/instances/live-migrati...

zrail

Dokku has official support for k8s and Nomad if you want multiple-host support. The caveat, of course, is that you have to run the cluster.

mr_luc

Oh, hey! I used Dokku back in the ... I want to say 2012-2013 ? and missed multi-node stuff a bit (nothing that couldn't be scripted around) so this looks cool.

I do see that it shouts 'EXPERIMENTAL!', so I guess it's 'experimental, but official'.

josegonzalez

Dokku maintainer here.

The catch you mentioned has a few caveats:

    - You can host the data for the install on a mounted volume, and replace the underlying instance at will (if you're using something like AWS or GCP).
    - We support alternative schedulers (Kubernetes and Nomad, with others like Compose, Lambda, and Swarm coming soon). In the case of using an alternate scheduler, your apps won't go down if the build server goes down.
    - Since it is self-hosted, your Dokku install's uptime is pegged to your infrastructure's uptime. So yeah, if you are installing it on a Raspberry PI whose uptime is decided by a light switch that is next to your kitchen and you accidentally switch it off every once in a while due to not being able to see the switch at night (very specific example, I know), then yeah, you'll be down for a little while.

vagrantJin

Redundancy is kinda your responsibility...

I may have read your comment wrong but it would be wholly unfair to expect Dokku to provide everything and the kitchen sink gratis.

drusepth

If a service is marketed as an "alternative" to any competitor, I think it's generally reasonable to assume that service covers most of the basic features offered by that competitor.

I've seen tons of "Heroku alternatives" pop up over the past couple months, but they all seem to have (rather large, IMO) downsides of "it does A and B like Heroku, but not X, Y, and Z" (where again, IMO, X, Y, and Z are typically rather core features like redundancy/failover). I know everyone uses services for different reasons, but the general appeal of Heroku that I've seen has been the basically-zero-devops-ever-necessary-for-anything approach they've taken.

evoxmusic

If you are looking for a HA alternative, Qovery is the one. It's a Heroku like platform running on AWS built for running production workload. It's multi AZ by design.

(I am co-founder)

Nextgrid

Can it be licensed and run on bare-metal?

viraptor

I've used it on and off. It's ok and I was happy. But it's a fairly thin layer and a leaky abstraction, so I ended up looking at docker logs and firewall rules more times than needed. Unfortunately when things were down, noting the context was not a priority, so I don't have specific issues raised to show.

josegonzalez

Dokku Maintainer here:

While in some cases it is a quite thin layer - some commands just proxy along to the underlying Docker command + some flags - I'd love to hear more about places where Dokku itself wasn't useful for debugging your deployed system. Please feel more than free to reach out via Discord/IRC/Slack[1] (all three are synced) with more info if filing an issue is a big reach. I'm more than happy to help folks debug live/file issues as a result, as it makes the project much better.

[1] https://dokku.com/docs/getting-started/where-to-get-help/

greysonp

Can't recommend Dokku enough. I've been using it for years on a $20 DigitalOcean box. I have a lot of random web projects/tools, most of which I'm the only user, and it's great to have a super simple way to get them online. Enabling HTTPS and assigning a domain are each just a single command.

punnerud

The same here, and that I can host multiple projects on the same server without any additional cost. If I get enough traffic I can always move it to a new server and redirect the DNS (cloudflair)

thebiglebrewski

lol are you me?! exactly the same setup over here

zwarag

How does it differ from portainer?

wilsonfiifi

Portainer is more of a UI for docker and docker containers. But dokku is and actual platform similar to heroku that helps you deploy your apps.

dopamean

Last I used dokku my understanding was that it used Heroku's open source build packs. So it was very much your own hosted heroku. This was at least 7 years ago though.

toomuchtodo

Would portainer be a good fit for adhoc manual execution of Docker containers on a remote host if a UI would be helpful?

jbothma

Specifically, dokku provides

- configuration management as env vars

- reverse proxy routing traffic for a given hostname to the correct container, swapping to the new container upon deploy

- plugin for tls cert generation using letsencrypt

- zero downtime deploys - it starts and smoke tests a new container before taking down the old one on deploy

- plugins for running databases and connecting your apps to them

tomatowurst

Is there proper tutorial for people who have never used heroku? I just don't know how to use this because i dont have any experience with heroku.

I'm interesting in self-hosted AWS api compatible solutions.

Parse is also interesting. In fact I discovered that there is a whole new world outside AWS and DO. It no longer makes sense for me to run weekend projects on AWS outright, thats really for large enterprise applications.

What I would love is to be able to deploy my docker images on my "own"cloud running on a dozen droplets/VPS around the world and bill my users at the same rate that AWS is charging. I figure I would be able to undercut AWS significantly with this method.

Storing 2TB on AWS was price shock for me, makes no sense when there are dedicated servers with a ton of storage and bandwidth that I could just use instead of being "serverless".

However, I find it to be a hall of mirrors, wondering if anybody on HN has been in my shoes and how they are handling it. I guess my biggest concerns:

- uptime availability (can I promise close to AWS?)

- security (how do i harden my box/selfcloud and have peace of mind?)

- IAM type of roles/permissions (how do i emulate something like IAM for my team?)

Like the billing from AWS is getting to a point where I feel like we can use bunch of droplets behind some "selfcloud" that manages all these things for me. I'm sure a solution exists, I just often have trouble recalling their names. Dokku makes it easy to remember because it sorta rhymes with Heroku.

nickstinemates

Just use railway.app - free tier just works and you can deploy a sample app on a free account in seconds. It will give you a general idea of how Heroku works.

> It no longer makes sense for me to run weekend projects on AWS outright, thats really for large enterprise applications.

depending on the type of site, cf workers is ridiculous value. single button availability of your content in every corner of the world and you wont pay a dime

tomatowurst

not sure I quite understand railway, what are they offering? Another AWS on Digitalocean? Would be nice to see exactly what the cpu core/memory/price is.

aren't cf workers very constrained? like your call has to finish within a second or two for it to make sense and I think AWS Lambda matched their price? I could be confused here.

nickstinemates

> not sure I quite understand railway, what are they offering? Another AWS on Digitalocean?

they're offering a heroku experience.

`git push` deploys your code.

small edit: i added this in a dokku thread(which is amazing, btw) because there is zero setup time. just point to your github repo and it just works.

elondaits

S3 promises 99.999999999% durability and 99.99% availability... I'm not sure regular VPS's give any assurance that your data won't be lost. I assume in case of HDD failure it's up to you to restore data.

josegonzalez

Dokku maintainer here:

There is a tutorial for using it. It's linked to after you install it for the first time, and is available here[1]. It goes through a few common tasks, though by no means is a "kitchen sink" tutorial.

In regards to your specific questions:

    - I've answered this elsewhere, but your uptime is defined by your host uptime (and any mechanisms for backup/restore you have setup). Some hosting providers (AWS/GCP) provide migration of hosts that die, some have block storage (Azure/AWS/DO/GCP), while others (Rackspace) provide backups of specific directories. As with anything you run and maintain, very heavy YMMV here, but I'm happy to answer questions[2] specific to your needs.
    - Dokku runs very few/no persistent binaries (atm only an optional event-listener that restarts apps if it detects a web container has changed it's IP address), so the attack vectors are your app and anything else you are running that exposes ports externally (SSH is the big one). I defer to others on container security, but our default Herokuish (and Pack) images are built to run processes as non-root users, so that should provide _some_ level of isolation. Container security is a big space, so I don't want to write something here that will be outdated in three seconds or is just plain wrong. If you have concerns about specific things in the project, please get in touch[2].
    - I've used metadataproxy[3] to lock down IAM roles on a per-app basis (with a custom plugin injecting the correct container env var for each app). If you need to lock apps to specific users, there is the community dokku-acl[4] plugin. I'm also working on team management support in Dokku Pro[5] which will be a bit more familiar to users of Heroku.
    - I know of a few users using our kubernetes plugin[6] (automated via terraform) against mostly default Kubernetes clusters in Digitalocean and AWS. If the Dokku host dies, they just lose the ability to deploy, but can restore access fairly quickly. Everything else just kinda lives out there on their cluster.
Feel free to reach out[1] and I'll try and answer any specific concerns :)

    - [1] Official tutorial: https://dokku.com/docs/deployment/application-deployment/
    - [2] Ways to get in touch: https://dokku.com/docs/getting-started/where-to-get-help/
    - [3] metadataproxy: https://github.com/lyft/metadataproxy
    - [4] dokku-acl: https://github.com/dokku-community/dokku-acl
    - [5] Dokku Pro: https://pro.dokku.com/
    - [6] Kubernetes Scheduler plugin: https://github.com/dokku/dokku-scheduler-kubernetes

pixelmonkey

Also check out piku, especially if you are hosting Python or Node apps:

https://github.com/piku/webapp-tutorial/blob/master/README.m...

It is a way to get the same sort of developer experience benefit as dokku, but without dockers and containers, using plain UNIXy tools on a single Linux node. The above link explains how it works.

yebyen

There's also Deis Workflow (Hephy Workflow)

https://web.teamhephy.com

For those worried about a Single Point of Failure, you can't have your cake and eat it too. Docker and Dokku is a single point of failure when you build directly on it, I guess. Kubernetes mitigates that.

We're still here, keeping the tires on. I haven't personally tested K8s 1.24 with Workflow yet, but we are actively seeking maintainers on all of the cloud vendors.

If you find that something is broken and want to see it fixed, talk to me on Slack. I'm aware of at least Azure that has broken their Bucket Storage API since Workflow was originally published by Deis, and it hasn't been quite fixed yet.

Documented support for Google Cloud and AWS are both extant as well, although I've heard one person call into question whether Google Cloud storage will work out of the box, or if it still needs upgrades. We'd like to add DigitalOcean support as well, I already know it basically works, we just need to add documentation and probably also give it a quick spit-shine and polish.

Dokku on the other hand is less heavyweight and does not require as much work for maintenance, since it does not have to be decentralized or protect against any SPOF. It's a wonder that more people do not want to use this. I've heard of at least one more Deis Workflow fork in the wild, possibly in better or worse states of maintenance than Team Hephy, but if you are looking to get off of Heroku then you could certainly do much worse.

We do need volunteers as we do not have time to maintain everything by ourselves, (come talk to us on the Slack if you're interested in joining the fun!)

You-Are-Right

404 on docs: monitoring and auto failover might be something you should look into.

yebyen

Thank you. The docs all work, but some paths through the docs do not work on certain form factors (I think this is a mobile issue)

Well, the docs did work, (they're 100% down now...)

block_dagger

I’ve run high-ish traffic production sites on Dokku for years. If you need just one server, it’s a dream for Rails/PG/Redis setup. Amazing what reliability it provides. Almost completely written in bash!

RileyJames

Awesome. I’ve always worried what it can handle, and therefore only run projects on it until they were more serious. But in that context, I’ve never had a problem (and run them longer than that anyway). To around the 50-100k user per month. Mostly reads tho.

Keen to hear what you’re running.

juanse

Could you share more, please? I use the very same stack and I think with the biggest VPS available right now I will have more than enough. It is basically a simple CRUD application.

Could you share how big the VPS yo used is (cores/Ram) and what traffic you got to manage with that?

Thanks.

chasd00

Not the parent but to me dokku shines when putting multiple apps on a single server and the fact that deploying is a git push. Letsencrypt and other plugins are icing on the cake.

If you have one app then dedicate a server to it and run it right on the operating system. Maybe have 2 and a load balancer so you can do prod deployments with no downtime. The point is get dokku, docker, and all that abstraction between the network card and your app out of the way.

Gys

Yes, I love Dokku and like to use it as an alternative for some of my Heroku apps. However, the thing I miss most is Heroku including a nice dashboard showing several metrics for my Golang apps (memory usage, go-routines, etc) over time. Heroku has that out of the box and that makes it very convenient.

striking

The Pro version appears to offer, or may eventually offer (?), this set of features https://pro.dokku.com/

sureglymop

I just deployed netdata also in Dokku.

claudiug

how difficult will be to build a basic tool for this case?

viraptor

Not connected to dokku, but you can construct this from:

telegraf - report the host / process metrics

opentracing - instrument the application itself with tracing, with some pre-built libs like https://github.com/opentracing-contrib/go-stdlib

tempo - collect the traces

Loki - collect the logs

influxdb - collect the metrics

grafana - display it all

It's not too hard once you set it up... but as you see there's a lot of elements to it.

yebyen

Congratulations, you all just suggested re-inventing Deis workflow (with a few additional pieces) :)

There are a lot of elements indeed, https://docs.teamhephy.com/understanding-workflow/components...

This is classic literature: https://docs.teamhephy.com/understanding-workflow/architectu...

It is much easier to just use it than to try and re-invent your own: https://docs.teamhephy.com/quickstart/

I cannot guarantee the cloud provider bits all work, I don't use them so I don't maintain them, but if you have Kubernetes with persistent disk provided, which any managed Kubernetes can most certainly do, it's easy enough to hook up generic Minio (which has the added benefit of working just as well on bare metal hosts), and I'm certain that does work as I use it.

Gys

A golang app exposes several metrics by default already. A common way is using Prometheus to collect the data and use Grafana to create a graphic dashboard. But it takes some configuration and needs those services running somewhere. Not something I want to spend much time on.

mardix

Similar to Heroku deploy flow, checkout Sailor, a tiny PaaS to install on your servers/VPS that uses git push to deploy micro-apps, micro-services, sites with SSL, on your own servers or VPS.

https://github.com/mardix/sailor

skyfaller

I see it's a fork of piku, but I don't see an explanation of why they bothered to fork. Do you know what the difference is? https://github.com/piku/piku

wilsonfiifi

Dokku is an excellent Heroku alternative. If you have the means, please support the project by paying for Dokku Pro [0]

[0] https://pro.dokku.com/

chasd00

I didn’t know this existed (probably because my dokku setip had been running for years and I haven’t been back to the website). I will be throwing some bread your way:)

emehex

I’ve been running https://scrape.world on dokku + DigitalOcean for two years, zero issues!

eric4smith

Dokku is amazing.

The single point of failure though, is something people worry too much about. If you are serious about what you host, you do need to have another host ready to go.

Majority of workloads can be down for a few hours without customers worrying anyway.

We actually use it for hosting quite large workloads, but we do have a few bar e metal hosts we manually provision different services across. At a moment's notice we can quickly push the app to a different server and would be down for a few tens of minutes at most, minutes normally.

I just don't get the expense of Heroku just because your (in reality) non-essential workload can't be down for a few seconds.