My homelab#

People have shown an interest in how I run my stuff so I thought I’d open it up here. From a hardware perspective it’s very simple (and cheap) - intentionally, I have better things to spend money on like food. The software stack however is a bit more involved. I’ll go through it all here.

The hardware setup#

Connection to the internet#

I have a gigabit fibre (FTTH) internet connection with a static IP address and (recently) IpV6 support. This is supplied by Vodafone, unfortunately it’s only 100mbit upstream but that’s more than enough for delivering this text you’re reading. Getting a static IP address can be quite tricky - I had to insist over two telephone calls.

Network#

The fibre optic line goes into an ethernet termination point and then runs over cat6 to my router which is just what’s provided by Vodafone. The router gives us wifi in the house but also connects via armoured cat6 to the garage which is where my office is. The router also has a 500Gb USB disk attached to it and shared over the LAN using SMB.

I have a second ethernet cable that uses one of those ethernet over power adapters to route ethernet into the living room which is then connected to an old google home wifi point to provide the living room with decent wifi for the TV etc.

In the office the ethernet cable is connected to a WiFi 6 access point which also works as a switch (all in bridge mode so it’s a bit like it’s not even there). This then connects to another basic switch on the other side of the office and into my PC which is always on.

Homelab PC (Xenon)#

This is a Lenovo think centre mini-PC which I got from facebook marketplace for about £150 with a monitor, keyboard and mouse:

  • 6 core i5-8400 @ 2.8Ghz
  • 8Gb RAM
  • 500Gb NVMe
  • 2Tb spinning rust disk
  • Nvidia GeForce GT 1030
  • External USB3 3TB spinning rust disk

The hypervisor#

I recently switched to using Proxmox VE as the main operating system for the PC. This was because I wanted to try Proxmox and I was a little frustrated with using Hyper-V on Windows.

Proxmox is pretty cool - its a lightweight linux distro with the sole purpose of running and managing virtual machine and containers.

One of the very neat features it has is the ability to attach SMB shares as disks to the hypervisor which it can then use for automated backups of VMs and LXEs - which is amazing as I now have a daily backup of these and no longer need to worry about data loss (especially as it’s ‘off site’!)

Windows 11 guest VM#

One of the things I wanted my PC to run is a virtual cycling simulator called MyWhoosh (same sort of thing as Zwift) for use with my zwift turbo trainer (bike trainer) so I can do my workouts. This is essentially just a 3D game that runs on Windows. This posed some challenges!

The first was I had to fiddle around with virtual UEFI and TPM to get Windows to even start, but the bigger challenge was enabling pass through of the 3D hardware to give the Windows VM complete access to the Geforce GT 1030 card so that my 3D games would work.

In practice it’s a bit weird as the built in graphics card on the PC displays the proxmox login prompt in text while the display connected to the 3D card just shows the Windows 11 desktop. However, that’s just what I wanted. It’s probably quite possible to get both displays to work exclusively with Windows 11 but then it might be a bit tricky to fix issues if I can’t connect to proxmox over the network.

I followed this rather complicated guide to get the GPU passthrough working.

Debian lightweight container (LXE)#

This basically behaves very similar to a virtual machine and hosts the real ‘homelab’ stuff. Running on Debian I have docker compose which fires up several containers doing various things. I’m always adding new stuff to this, especially since I was put on to https://selfh.st/apps/ by a co-worker (well worth having a look).

Containers#

Caddy#

The web facing container that I run is Caddy which is an incredible reverse proxy server. Why? Two big reasons (for me anyway):

  1. It automatically sorts out HTTPS certificates with me not needing to do anything.
  2. It’s very simple to configure. It uses a very simple syntax in a single Caddyfile.

So with that, I just have a config file that points to the other containers. This is made even easier by the fact docker compose seems to make containers accessible by the names you give them rather than having to use IP addresses or anything like that.

oauth2-proxy#

This is essential. A little tricky to configure as it’s a reverse proxy that sits behind Caddy for a couple of my self hosted apps. It essentially sticks a login (an oauth2 login) in front of whatever web app you want to host. My main use for this is to secure my Silver bullet installation. I do this using my google account so it’s super easy and most of the time I’m already logged in, but you can use your own oauth2 provider (or self host one).

oauth2-proxy

Silver bullet#

This is worthy of its own blog post really. Silverbullet is a really amazing note taking webapp (or PKM if you want to get fancy).

Basically it uses markdown files for a backend which means your notes are always easy to migrate to other systems (mine all came from Obsidian to start with). But having the ability to access my notes from any web connected device is amazing. On top of that SB has a bunch of neat plugins (AI RAG based search etc) and its own built in programming language (space lua)

I love it! In fact, I’m writing this article in Silverbullet and it’s being published automatically by Hugo.

Silver bullet

Hugo#

I use hugo to take a portion of my silverbullet archive (from the blog/ directory) and turn it into the static site you’re currently looking at. This happens automatically and instantly whenever I set a post to not be in draft mode any more. This means I can instantly publish stuff with no hassle.

Hugo

Owncast#

Very infrequently, I dust off my decks and stream some music (hiphop / electro / drum n bass / hardcore / whatever). Owncast is pretty much like a self hosted twitch. It’s really good. It serves up streaming video from OBS and has its own chat window.

Owncast

Other, less interesting containers#

I also run some legacy websites using PHP (phpfpm) and MySQL. Not very exciting, but definitely possible.

Summary#

Self hosting stuff isn’t just great fun, it can be really useful for a bunch of reasons:

  • Learning about new software
  • Finding something useful (note taking app for example)
  • Breaking free from depending on software as a service providers
  • Saving money
  • Having fun