Skip to content

Latest commit

 

History

History
44 lines (30 loc) · 3.36 KB

README.md

File metadata and controls

44 lines (30 loc) · 3.36 KB

Hashilab Apps

Motivation

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.

Goals of this project

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.

Hashilab-apps

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.

Deployment Notes

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.