Quick and Cheap Deployments with Dokku
2024-04-23
Est. 2m readJuggling Deployments
A couple months ago I was hosting a Discord bot1 and a DB on a PaaS (Platform as a Service) and the platform gave me $5 to host my first app, but for every app after was another $5 per month and that’s not accounting for persistent volume costs… seems expensive.
My first thought was to buy a second PC and just host everything on a shelf in my bedroom, but this comes with its own costs and concerns.
After some tinkering with a VPS, I’ve got a solution I’m happy with: $5 VPS + Dokku = Personal PaaS
Dokku Perks
- Has Redis, MongoDB, RabbitMQ plugins (and many more)
- You can find all of their plugins here: https://github.com/orgs/dokku/repositories
- These plugins make it super simple to attach services to your apps (e.g. DBs, queues, file storage)
- Has domain and subdomain support out-of-the-box
- Supports Heroku-style deployments, Docker-style deployments, and a few other styles
The Setup
Getting started was as simple as setting up Dokku once and then just pushing code. I create an app with dokku apps:create app-name, add a new remote with git remote add dokku dokku@ip-addr, and git push dokku branch. It shows the deployment log in the git push command and will let me know if it successfully deployed.
So no more renting multiple servers or wasting $5 more for one more app. With Dokku, I could host at least 10 applications on a low-spec VPS.
Takes Some Effort
Dokku is not too complicated. I’ve got 3 Redis instances, 2 MongoDBs and ~3 apps running in one VPS without any fuss. Some are using Dockerfiles to deploy, others are using “Herokuish buildpacks” which require only a Procfile with a single line for startup. Herokuish is my preferred builder, I’ll only use Docker if the startup command requires more than a single line.
Quick Reference
Switching to Dockerfile deployment
$ dokku builder:set <my-app> selected dockerfile