Homelab

Over the years I’ve been experimenting with the idea of running services at home. The core services I run are:

Server Build

I built a custom server that had enough compute to run all the services and enough hard drive capacity for my storage needs. My main requirements are:

Server Build

Below is the hardware list, with some notes around why I picked each part:

htop

Container Orchestration

I’ve experimented with a few different container orchestration platforms to find the best fit for my needs.

I paired Nomad with Docker and Consul to provide the base infrastructure used to run the applications.

Infrastructure Nomad

Custom-built Landing Page

I built a landing page to display links to all the services.

Dashboard

The dashboard was built with the following technologies:

The list of services is populated via Consul service discovery.

New services can easily be added to the dashboard by adding a service block to the Nomad jobspec, with the “ui” tag. Optionally a icon metadata field can be added with a icon name from Font Awesome to be displayed on the UI.

service {
  name = "miniflux"
  tags = ["app", "ui"]
  meta {
    icon = "fa-newspaper"
  }
  port = "ui"
}
const test = "test";

Monitoring

Monitoring is done with Prometheus, Grafana and a handful of exporters.

Grafana - Home Grafana - Node Exporter Grafana - Server