This project was born out of boredom during the Covid epedemic, when I wanted to replace my already existing Docker homelab with something more advanced. After playing around with k8s for a bit, I decided that Nomad is a great fit for a hobby project, compared to k8s which felt more like something you would do for a job.
With k8s, it felt to me like I was reciting the rotes of the church of Helm, without really understanding what I was doing or why. With Nomad and Consul, I could "grok" the concepts without making it a job and find solutions to the specific issues I was facing.
My main goals for my new homelab were the following
- High-Availablity - I want to shut down or lose any node, and my cluster should heal itself. With all services being available again after a couple of seconds.
- Observability - I'm a sucker for graph p*rn, and want to have as much insight as possible into what my homelab is currently doing.
- Scratch my technical itch. Since I move into a sales position right before Covid, I needed some tech stuff to do.
To keep the jobs manageable, I've split them into three repositories
- hashilab-core: Basic infrastructure which contains load-balancing, reverse proxy, DNS and ingress management.
- hashilab-support: Additional operational stuff like metrics management, Cloudflare tunnel, maintenance tasks and much more stuff to run the cluster more effienctly.
- hashilab-apps: End-user apps like Vaultwarden or Immich.
The "apps" repository defines end-user applications running on the cluster. Used by me and my family to manage our home automations, photos on our mobile phones and family passwords.
- adguard - DNS filering to make sure that tracking and ads are limited to a minimum on our home network. Some magic is involved in core-dns to make sure that DNS still works if the adguard service is down.
- bookstack - My internal wiki where I keep all the notes for my setup.
- gitea - Local git which keeps all my IaC code.
- grafana - Fancy dashboards for all your graph-p*rn needs.
- home-assistant - Mainly used to bridge my IoT hardware and OpenWeatherMap to Homekit.
- immich - Awesome image management tool which handles image backup and management for the family. Great example how to scale a complex application in a Nomad/Consul cluster.
- nginx-web - Static web page if you should happen to stumble across my domain.
- node-red - More home automation.
- unifi-network - Controller application for the Unifi network stack from Ubiquiti Networks. Was quite tricky to set up in a HA environment, please check consul-ingress for UDP ingress management.
- vaultwarden - Password management for the family.
Before deploying a job file, you should set the following environment variable on the deploying machine
- NOMAD_VAR_base_domain=domain.tld
where 'domain.tld' is the domain you are using.
In addition, quite a few sensitive settings like passwords and email are stored in Nomad variables. Search for "nomadVar" to find the relevant locations.