Hosts

Homelab

thumbnail

With the network in my home lab completed, it’s time to discuss the hardware that all the services I use run on. These machines make up the ‘compute’ portion of my home lab.

One of the first decisions I made was the naming scheme used for the machines. I decided to name each machine after stars, such as sirius, canopus, and mimosa. Each machine resides in the domain host.nooney.casa. This scheme provides logical organization and ample room to add new machines.

Hardware

I use an Intel NUC as my primary home lab machine. I originally installed Proxmox on the machine to support virtualization, but I eventually replaced it with Debian and KVM/libvirt so that I could take batter advantage of automation. My primary goal with this machine is that I am almost entirely hands-off for administration.

I use a Raspberry Pi to serve as the base of operations for my home lab. This way, any state can be stored locally to that machine. All the commands I run to manage the home lab are run from this machine. My goal with the Raspberry Pi is to enable automated control of the other hosts.

Software for Host Management

There are several great products for automated management of servers. The few products that stood out to me were Terraform, Ansible, and Docker Compose. I would like to explore Terraform and Ansible in more detail later, but I settled on Docker Compose due to its relative simplicity.

I’ve organized each application into a separate docker-compose file. My general workflow to manage an application is to navigate to the application’s directory on the Raspberry Pi and run docker-compose in that folder. I use custom environment files that modify the DOCKER_HOST environment variable.

DNS on Windows

It took me awhile to set up hostname resolution on Windows. After troubleshooting, I determined that Windows uses its own DNS servers via the WSL bridge network adapter instead of my home network. To fix this, I modified the priority of the Network interfaces with the following PowerShell commands:

Get-NetIPInterface
Set-NetIPInterface -InterfaceIndex X -InterfaceMetric 5000

Note that I replaced X with the ifIndex of the WSL bridge interface. After updating the priority and restarting, I confirmed that I could connect to each of my machines via SSH.