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.
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)
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.
Dokku supports a number of methods to deploy apps:
- Docker images [1]: via `git:from-image`
- Tarballs [2] (extracting into a heroku-like env): via `git:from-archive`
- Dockerfile [3]: autodetected using our builder-dockerfile plugin (or selectable via builder:set)
- Heroku Buildpacks [4]: autodetected using our builder-herokuish plugin (or selectable via builder:set)
- Cloud Native Buildpacks [5]: autodetected using our builder-nix plugin (or selectable via builder:set)
Someone in the community hated these options and wrote one for nix[6]. Others are free to do so as well (or even customize our built-in ones through settings or forks).
Finally, I've also got two builders in the works:
- lambda: builds a lambda-compatible docker image (and an optional zipball of the code in case you want to deploy that on their official runtimes)
- compose: builds using docker-compose (for usage with a compose scheduler)
Dokku has been built with extensibility in mind, so if it doesn't do what you think it should do out of the box, overriding that functionality is fairly straightforward (plugins can be in any language, so feel free to drop golang/shell and use something else if that floats your boat).
- [1] Build from a docker image: https://dokku.com/docs/deployment/methods/git/#initializing-an-app-repository-from-a-docker-image
- [2] Build from a tarball or zipball: https://dokku.com/docs/deployment/methods/git/#initializing-an-app-repository-from-an-archive-file
- [3] Dockerfile support: https://dokku.com/docs/deployment/builders/dockerfiles/
- [4] Heroku buildpack support: https://dokku.com/docs/deployment/builders/herokuish-buildpacks/
- [5] Cloud Native Buildpacks support: https://dokku.com/docs/deployment/builders/cloud-native-buildpacks/
- [6] Build via nix-build: https://github.com/jameysharp/dokku-builder-nix
I guess it comes down do your preference, it's just a GUI for Docker you can do the same Docker commands and container manipulation with or without it.