My previous Brut apps are deployed to Heroku, since that’s what I know and is super easy to use. A dyno + DB + Redis ends up being around $30/month, so for the app I’m working on now, I’m using Hetzner.
I’m running everything on one box and did manual setup, nothing scripted. The opposite of what you are supposed to do ![]()
I was pleasantly surprised how easy it has been - basically apt install stuff and it tends to be set up correctly. certbot just handled the SSL cert and seems set up to update it as needed.
This setup will cost me around $10/month. It’s obviously not a great practice to have all app, DB, and Redis all on one box, but until this app is used my someone other than me, that’s probably fine.
Brut includes support for Docker-based deployments to Heroku, where the generated Dockerfile could probably be used more generally. I opted to not use Docker for this, just to see what it was like. Not wanting an ancient Ruby, I first tried mise, however it required me to somehow know some system packages to install to make things work since it wanted to build Ruby. Doing this as a non-root user I didn’t want to deal with that.
I ended up using rv - it was super fast, did not require installing anything via apt and so far has just worked. To install a few RubyGems I had to install build-essential and libyaml.
rv is still new, and the docs aren’t super clear, but basically:
curl -LsSf https://rv.dev/install | shrv ruby install 3.4.9- Add whatever it said to the
.bashrc ruby --versionjust works!
All that took a matter of minutes to achieve.
YOLO’ing it on a VPS still is missing a lot of stuff from Heroku, like log access, metrics, console, deployments, etc. But, since this app is just me, I am just going to script stuff specific to the app and see how far that gets me.