<?xml version="1.0" encoding="utf-8" standalone="yes"?><?xml-stylesheet type="text/xsl" href="/pretty-feed-v3.xsl"?>
<rss
  version="2.0"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:source="https://source.scripting.com/"
>
  <channel>
    <title>Paul Tibbetts</title>
    <link>https://paultibbetts-uk-feat-cooks.preview.lab.paultibbetts.uk/tags/homelab/</link>
    <description>Posts by Paul Tibbetts about homelab</description>
    <generator>Hugo</generator>
    <language>en-gb</language>
    <atom:link href="https://paultibbetts-uk-feat-cooks.preview.lab.paultibbetts.uk/tags/homelab/feed.xml" rel="self" type="application/rss+xml" /><item>
      <title>HomeOps Tour: Hardware</title>
      <link>https://paultibbetts-uk-feat-cooks.preview.lab.paultibbetts.uk/2026/05/21/homeops-tour-hardware/</link>
      <pubDate>Thu, 21 May 2026 13:35:06 +0100</pubDate>
      <guid>https://paultibbetts-uk-feat-cooks.preview.lab.paultibbetts.uk/2026/05/21/homeops-tour-hardware/</guid>
      <category>homelab</category>
      <category>homeops</category>
      <description>The first stop on my HomeOps Tour covers the hardware I use.</description>
      <content:encoded><![CDATA[<p>The first stop on my HomeOps Tour covers the hardware I use.</p>
<p>It&rsquo;s a mix of &ldquo;too expensive&rdquo; and &ldquo;I should have spent more on this&rdquo;.</p>
<p>None of this was designed all at once. It&rsquo;s the result of buying things for one reason, repurposing them for another, and slowly discovering a stable setup.</p>
<h2 id="what-its-for">What it&rsquo;s for</h2>
<p>HomeOps is the boring half of my homelab: the part that runs the services I actually depend on.</p>
<p>It started as an all-in-one server, but I eventually moved away from that. It was convenient until it wasn&rsquo;t; every change was risky.</p>
<p>Splitting it up gives me more to manage, but also a smaller blast radius when something goes wrong.</p>
<h2 id="overview">Overview</h2>
<table>
	<thead>
			<tr>
					<th>Device</th>
					<th>Role</th>
					<th>Purpose</th>
			</tr>
	</thead>
	<tbody>
			<tr>
					<td>NAS</td>
					<td>Storage</td>
					<td>archiving, media, network shares</td>
			</tr>
			<tr>
					<td>NUC</td>
					<td>Server</td>
					<td>apps, databases, services</td>
			</tr>
			<tr>
					<td>VPS</td>
					<td>Tunnel</td>
					<td>external entry point for tunnel access</td>
			</tr>
			<tr>
					<td>Pi</td>
					<td>Monitoring</td>
					<td>monitors everything else</td>
			</tr>
	</tbody>
</table>
<p>Each of these devices could do more than they currently do, but I&rsquo;ve tried to keep their roles separate.</p>
<p>They are more like pets than cattle: the software is reproducible but the machines are not disposable.</p>
<h2 id="nas">NAS</h2>
<p>I have a dedicated machine for Network Attached Storage. I built it myself; the specs are <a href="https://github.com/paultibbetts/homeops/tree/main/hardware/nas">in the repo</a>
. It runs <a href="https://www.truenas.com/">TrueNAS</a>
 and is the central place for storage, backups, archiving, and media.</p>
<p>Storage is shared over NFS for Mac and Linux, and SMB for Windows. The only app the NAS runs is <a href="https://www.min.io/">minIO</a>
, which provides S3-compatible storage. minIO changed its license recently so I am eventually going to swap it for something else.</p>
<p>It has 4TB of NVMe storage, which is the pool I use most often. My NAS and PC are connected through a small 10GbE switch, so from my PC it feels like the drives are plugged in directly. These drives are <strong>not</strong> set up in a RAID array, so if one failed I would lose data.</p>
<p>For archiving and longer-term storage it has 4 x 6TB HDD set up in a RAIDZ2 array, which means 2 of the drives could fail before I lost data. Anything important is copied to the RAIDZ2 pool, which is why I&rsquo;m comfortable running the NVMe drives without redundancy. <a href="https://www.raidisnotabackup.com/">RAID is not a backup</a>
, so I <em>should</em> back this data up to an external location, but I&rsquo;m yet to set this up.</p>
<p>It was originally made up of spare parts from an old gaming PC but I decided I wanted <abbr title="Error Correcting Code">ECC</abbr> memory. That meant replacing the CPU and motherboard with parts that supported it, and the affordable options were older server components. At this point the only gaming PC parts still in use are the case and the PSU.</p>
<h3 id="review">Review</h3>
<p>Those older server components are less efficient and more power-hungry than newer ones would be.</p>
<p>It was expensive. I made the decision that storage was important enough to justify ECC memory, but plenty of people choose to go without it. ECC is there to protect against memory-related corruption, and I don&rsquo;t know whether it&rsquo;s ever actually done that.</p>
<p>It&rsquo;s overpowered and underutilised for its current role, mostly because it used to do everything and now it just does storage.</p>
<p>However, it plays a major part in my HomeOps setup, so it&rsquo;s definitely worth its place.</p>
<p>If you have a homelab, or even just multiple computers in one household, you would benefit from a NAS. It doesn&rsquo;t need to be an expensive one like mine though.</p>
<h2 id="nuc">NUC</h2>
<p>I use an Intel NUC as my server. Specs are <a href="https://github.com/paultibbetts/homeops/tree/main/hardware/nuc">in the repo</a>
.</p>
<p>Originally I used my NAS as a server, until I found that messing with it made it unstable, so I stopped doing that and looked for something else. I bought something from Kickstarter, and in true Kickstarter fashion it was delayed multiple times, and eventually I got impatient and bought the NUC.</p>
<p>It&rsquo;s modern and pretty power efficient, which means running it is much cheaper than the NAS made out of older components.</p>
<p>The CPU has 12 cores and 16 threads, which gives me plenty of headroom for virtualisation. I have <a href="https://www.proxmox.com/en/products/proxmox-virtual-environment/overview">Proxmox</a>
 installed and use it to run 9 virtual machines and 1 LXC. This lets me split services across separate environments instead of installing everything directly on one host, so a problem with one service is less likely to affect the others.</p>
<p>The LXC is for Jellyfin, which is self-hosted Netflix for movies I store on my NAS. The NUC has an integrated Intel GPU that supports <em>Quick Sync</em>, which Jellyfin uses for hardware-accelerated transcoding. This means I can watch my movies from any device and let the GPU do the transcoding, leaving the CPU available for the other services hosted by the NUC.</p>
<h3 id="review-1">Review</h3>
<p>The NUC is an excellent home server. It&rsquo;s not enterprise hardware with redundant power supplies and room for expansion, but its size and efficiency make it a great fit at home.</p>
<p>The trade-off is that it&rsquo;s not a box for lots of disks. Mine has room for an SSD boot drive and the NVMe I use for local data. After that I needed to pair it with my NAS for extra storage.</p>
<p>It has a 2.5GbE NIC. That is not as fast as the 10GbE link to the NAS, but is more than enough for what I use it for.</p>
<p>If I started again and didn&rsquo;t need much local storage, a machine like this might be all I needed.</p>
<p>Unfortunately Intel has stopped making these but places like <a href="https://www.minisforum.uk/">Minisforum</a>
 make ones that are similar.</p>
<h2 id="vps">VPS</h2>
<p>The VPS is the only machine in this setup that I don&rsquo;t physically own. It&rsquo;s rented from <a href="https://www.hetzner.com/">Hetzner</a>
.</p>
<p>It is the public side of my &ldquo;tunnel&rdquo; setup, which I&rsquo;ll explain in a future post. The services I run are hosted at home and this VPS gives me an entry point without directly exposing my home network.</p>
<p>There isn&rsquo;t much to say about it. Hetzner is some of the cheapest European hosting I could find, and even though the VPS is located in Germany it doesn&rsquo;t add any real delay to my connection.</p>
<h2 id="monpi">MonPi</h2>
<p>The final part of the setup is the Raspberry Pi that monitors everything else.</p>
<p>The reason it exists is separation. I didn&rsquo;t want to run monitoring on the same machines that host the services. If the NAS or the NUC has a problem, a separate device has a better chance of catching it.</p>
<p>It runs two types of monitoring: Uptime Kuma for service uptime checks, and Beszel for host metrics. I&rsquo;ll cover these in more detail later in the series.</p>
<h3 id="review-2">Review</h3>
<p>The Pi works great for monitoring, but for this particular model that&rsquo;s about all it can do.</p>
<p>It was originally called &ldquo;DeskPi&rdquo; and was plugged into a screen to show a live output, but because it has only 2GB of RAM it struggled to run the desktop environment and I quickly gave up on that idea.</p>
<h2 id="whats-missing">What&rsquo;s missing</h2>
<p>There are two pieces of hardware people might expect to see listed here that I don&rsquo;t yet have: a custom router and a <abbr title="Uninterrupted Power Supply">UPS</abbr>.</p>
<p>I still use the router my ISP gave me, instead of something like OPNsense or pfSense. I&rsquo;ve worked around some of its limitations by letting Pi-hole handle DHCP - more details on that in the Pi-hole post. I will be moving soon, and when I get settled I&rsquo;ll start working on the router.</p>
<p>The UPS will come after. It is risky running a NAS without one, but I live in the UK, and in the five years I&rsquo;ve lived in this house there&rsquo;s been exactly one power cut, so I haven&rsquo;t felt the need to prioritise it.</p>
<h2 id="not-highly-available">Not Highly Available</h2>
<p>The obvious limitation of my setup is that it&rsquo;s not highly available.</p>
<p>Splitting storage, compute and monitoring across different machines gives me cleaner roles and a smaller blast radius than the all-in-one server I started with. It does not mean the setup can survive any of those machines breaking.</p>
<p>If the NUC dies, my services go offline. If the NAS fails, the storage layer is unavailable. If the VPS has a problem, friends and family can&rsquo;t get through the tunnel. MonPi monitors the setup, but nothing is monitoring MonPi.</p>
<p>There is an old redundancy saying that &ldquo;two is one and one is none&rdquo;. That applies here, but in different ways at different layers. The NAS has redundant disks, but it is still a single machine with one motherboard, one power supply and one network path. The NUC is a single host, so the VMs and containers running on it have nowhere else to fail over to.</p>
<p>Making the NUC highly available would mean running multiple Proxmox nodes. That means not just two machines, but three, so Proxmox can <a href="https://pve.proxmox.com/wiki/High_Availability">maintain quorum</a>
.</p>
<p>That would be a better <abbr title="High Availability">HA</abbr> design, but it would also mean more hardware and more power usage.</p>
<p>For now, I have accepted that my setup might have downtime because that is the trade-off that keeps it affordable and manageable at home.</p>
<h2 id="next">Next</h2>
<p>That&rsquo;s the hardware covered for my setup.</p>
<p>The important thing is not that any individual machine is special, it&rsquo;s that each one has a clear job. The NAS stores things, the NUC runs things, the VPS provides the public entry point, and the Pi monitors it all.</p>
<p>It&rsquo;s not perfect, and it&rsquo;s not highly available, but it&rsquo;s much easier to work with than the all-in-one server I started with.</p>
<p>Next I&rsquo;ll look at the storage layer in more detail: how I use TrueNAS for network shares, archives, and the storage services that support the rest of the setup.</p>]]></content:encoded><source:markdown>
The first stop on my HomeOps Tour covers the hardware I use.

&lt;!--more--&gt;

It&#39;s a mix of &#34;too expensive&#34; and &#34;I should have spent more on this&#34;.

None of this was designed all at once. It&#39;s the result of buying things for one reason, repurposing them for another, and slowly discovering a stable setup.

## What it&#39;s for

HomeOps is the boring half of my homelab: the part that runs the services I actually depend on.

It started as an all-in-one server, but I eventually moved away from that. It was convenient until it wasn&#39;t; every change was risky.

Splitting it up gives me more to manage, but also a smaller blast radius when something goes wrong.

## Overview

| Device | Role       | Purpose                                |
| ------ | ---------- | -------------------------------------- |
| NAS    | Storage    | archiving, media, network shares       |
| NUC    | Server     | apps, databases, services              |
| VPS    | Tunnel     | external entry point for tunnel access |
| Pi     | Monitoring | monitors everything else               |

Each of these devices could do more than they currently do, but I&#39;ve tried to keep their roles separate.

They are more like pets than cattle: the software is reproducible but the machines are not disposable.

## NAS

I have a dedicated machine for Network Attached Storage. I built it myself; the specs are [in the repo](https://github.com/paultibbetts/homeops/tree/main/hardware/nas). It runs [TrueNAS](https://www.truenas.com/) and is the central place for storage, backups, archiving, and media.

Storage is shared over NFS for Mac and Linux, and SMB for Windows. The only app the NAS runs is [minIO](https://www.min.io/), which provides S3-compatible storage. minIO changed its license recently so I am eventually going to swap it for something else.

It has 4TB of NVMe storage, which is the pool I use most often. My NAS and PC are connected through a small 10GbE switch, so from my PC it feels like the drives are plugged in directly. These drives are **not** set up in a RAID array, so if one failed I would lose data.

For archiving and longer-term storage it has 4 x 6TB HDD set up in a RAIDZ2 array, which means 2 of the drives could fail before I lost data. Anything important is copied to the RAIDZ2 pool, which is why I&#39;m comfortable running the NVMe drives without redundancy. [RAID is not a backup](https://www.raidisnotabackup.com/), so I _should_ back this data up to an external location, but I&#39;m yet to set this up.

It was originally made up of spare parts from an old gaming PC but I decided I wanted &lt;abbr title=&#34;Error Correcting Code&#34;&gt;ECC&lt;/abbr&gt; memory. That meant replacing the CPU and motherboard with parts that supported it, and the affordable options were older server components. At this point the only gaming PC parts still in use are the case and the PSU.

### Review

Those older server components are less efficient and more power-hungry than newer ones would be.

It was expensive. I made the decision that storage was important enough to justify ECC memory, but plenty of people choose to go without it. ECC is there to protect against memory-related corruption, and I don&#39;t know whether it&#39;s ever actually done that.

It&#39;s overpowered and underutilised for its current role, mostly because it used to do everything and now it just does storage.

However, it plays a major part in my HomeOps setup, so it&#39;s definitely worth its place.

If you have a homelab, or even just multiple computers in one household, you would benefit from a NAS. It doesn&#39;t need to be an expensive one like mine though.

## NUC

I use an Intel NUC as my server. Specs are [in the repo](https://github.com/paultibbetts/homeops/tree/main/hardware/nuc).

Originally I used my NAS as a server, until I found that messing with it made it unstable, so I stopped doing that and looked for something else. I bought something from Kickstarter, and in true Kickstarter fashion it was delayed multiple times, and eventually I got impatient and bought the NUC.

It&#39;s modern and pretty power efficient, which means running it is much cheaper than the NAS made out of older components.

The CPU has 12 cores and 16 threads, which gives me plenty of headroom for virtualisation. I have [Proxmox](https://www.proxmox.com/en/products/proxmox-virtual-environment/overview) installed and use it to run 9 virtual machines and 1 LXC. This lets me split services across separate environments instead of installing everything directly on one host, so a problem with one service is less likely to affect the others.

The LXC is for Jellyfin, which is self-hosted Netflix for movies I store on my NAS. The NUC has an integrated Intel GPU that supports _Quick Sync_, which Jellyfin uses for hardware-accelerated transcoding. This means I can watch my movies from any device and let the GPU do the transcoding, leaving the CPU available for the other services hosted by the NUC.

### Review

The NUC is an excellent home server. It&#39;s not enterprise hardware with redundant power supplies and room for expansion, but its size and efficiency make it a great fit at home.

The trade-off is that it&#39;s not a box for lots of disks. Mine has room for an SSD boot drive and the NVMe I use for local data. After that I needed to pair it with my NAS for extra storage.

It has a 2.5GbE NIC. That is not as fast as the 10GbE link to the NAS, but is more than enough for what I use it for.

If I started again and didn&#39;t need much local storage, a machine like this might be all I needed.

Unfortunately Intel has stopped making these but places like [Minisforum](https://www.minisforum.uk/) make ones that are similar.

## VPS

The VPS is the only machine in this setup that I don&#39;t physically own. It&#39;s rented from [Hetzner](https://www.hetzner.com/).

It is the public side of my &#34;tunnel&#34; setup, which I&#39;ll explain in a future post. The services I run are hosted at home and this VPS gives me an entry point without directly exposing my home network.

There isn&#39;t much to say about it. Hetzner is some of the cheapest European hosting I could find, and even though the VPS is located in Germany it doesn&#39;t add any real delay to my connection.

## MonPi

The final part of the setup is the Raspberry Pi that monitors everything else.

The reason it exists is separation. I didn&#39;t want to run monitoring on the same machines that host the services. If the NAS or the NUC has a problem, a separate device has a better chance of catching it.

It runs two types of monitoring: Uptime Kuma for service uptime checks, and Beszel for host metrics. I&#39;ll cover these in more detail later in the series.

### Review

The Pi works great for monitoring, but for this particular model that&#39;s about all it can do.

It was originally called &#34;DeskPi&#34; and was plugged into a screen to show a live output, but because it has only 2GB of RAM it struggled to run the desktop environment and I quickly gave up on that idea.

## What&#39;s missing

There are two pieces of hardware people might expect to see listed here that I don&#39;t yet have: a custom router and a &lt;abbr title=&#34;Uninterrupted Power Supply&#34;&gt;UPS&lt;/abbr&gt;.

I still use the router my ISP gave me, instead of something like OPNsense or pfSense. I&#39;ve worked around some of its limitations by letting Pi-hole handle DHCP - more details on that in the Pi-hole post. I will be moving soon, and when I get settled I&#39;ll start working on the router.

The UPS will come after. It is risky running a NAS without one, but I live in the UK, and in the five years I&#39;ve lived in this house there&#39;s been exactly one power cut, so I haven&#39;t felt the need to prioritise it.

## Not Highly Available

The obvious limitation of my setup is that it&#39;s not highly available.

Splitting storage, compute and monitoring across different machines gives me cleaner roles and a smaller blast radius than the all-in-one server I started with. It does not mean the setup can survive any of those machines breaking.

If the NUC dies, my services go offline. If the NAS fails, the storage layer is unavailable. If the VPS has a problem, friends and family can&#39;t get through the tunnel. MonPi monitors the setup, but nothing is monitoring MonPi.

There is an old redundancy saying that &#34;two is one and one is none&#34;. That applies here, but in different ways at different layers. The NAS has redundant disks, but it is still a single machine with one motherboard, one power supply and one network path. The NUC is a single host, so the VMs and containers running on it have nowhere else to fail over to.

Making the NUC highly available would mean running multiple Proxmox nodes. That means not just two machines, but three, so Proxmox can [maintain quorum](https://pve.proxmox.com/wiki/High_Availability).

That would be a better &lt;abbr title=&#34;High Availability&#34;&gt;HA&lt;/abbr&gt; design, but it would also mean more hardware and more power usage.

For now, I have accepted that my setup might have downtime because that is the trade-off that keeps it affordable and manageable at home.

## Next

That&#39;s the hardware covered for my setup.

The important thing is not that any individual machine is special, it&#39;s that each one has a clear job. The NAS stores things, the NUC runs things, the VPS provides the public entry point, and the Pi monitors it all.

It&#39;s not perfect, and it&#39;s not highly available, but it&#39;s much easier to work with than the all-in-one server I started with.

Next I&#39;ll look at the storage layer in more detail: how I use TrueNAS for network shares, archives, and the storage services that support the rest of the setup.
</source:markdown></item><item>
      <title>HomeOps Tour: Overview</title>
      <link>https://paultibbetts-uk-feat-cooks.preview.lab.paultibbetts.uk/2026/05/06/homeops-tour-overview/</link>
      <pubDate>Wed, 06 May 2026 21:05:00 +0100</pubDate>
      <guid>https://paultibbetts-uk-feat-cooks.preview.lab.paultibbetts.uk/2026/05/06/homeops-tour-overview/</guid>
      <category>homelab</category>
      <category>homeops</category>
      <description>Welcome to my HomeOps Tour, where I’ll be your guide to the stable part of my Homelab.</description>
      <content:encoded><![CDATA[<p>Welcome to my HomeOps Tour, where I&rsquo;ll be your guide to the stable part of my Homelab.</p>
<h2 id="what-is-homeops">What is HomeOps?</h2>
<p>HomeOps isn&rsquo;t a widely used term, but I have seen a few people use it. To explain what I mean by it I should first define &ldquo;Homelab&rdquo;.</p>
<p>A homelab is a setup of computers you control and use for experiments - like a laboratory. It&rsquo;s usually at home, hence the name, but not always. You might own all the equipment, rent it, or even send your own machines to a provider so they can run them for you - called &ldquo;colocation&rdquo;.</p>
<p>The problem is that homelab seems to cover experimentation as well as self-hosting services you use every day, which have different needs.</p>
<p>HomeOps, short for &ldquo;Home Operations&rdquo;, is my attempt at labelling the stable part of my homelab.</p>
<h2 id="purpose">Purpose</h2>
<p>My HomeOps setup is used to host the apps and services a few people depend on, so I can&rsquo;t be breaking it every five minutes.</p>
<p>Some people call this &ldquo;HomeProd&rdquo;, short for &ldquo;Home Production&rdquo;, which separates it from the &ldquo;development&rdquo; or &ldquo;staging&rdquo; environment you use for experiments.</p>
<p>As such I treat it like a real production system: stable, reproducible, and intentionally boring to operate.</p>
<h2 id="architecture">Architecture</h2>
<p>The system is split over different machines, each with a different purpose.</p>
<ul>
<li>a <abbr title="Network Attached Storage">NAS</abbr> provides storage over the network</li>
<li>a server hosts all the apps and services</li>
<li>a rented <abbr title="Virtual Private Server">VPS</abbr> lets external users in securely through a &ldquo;tunnel&rdquo;</li>
<li>a Raspberry Pi monitors it all</li>
</ul>
<p>The whole thing is written down as Infrastructure as Code, with Terraform defining the infrastructure and Ansible for configuring it. This would let me reproduce it if a machine breaks and I need to set up a new one.</p>
<p>The server uses a hypervisor as an operating system and services generally get their own virtual machine. One of those VMs uses Docker to run most of the apps.</p>
<h2 id="key-decisions">Key Decisions</h2>
<p>Each of these deserve their own post later in the series.</p>
<h3 id="separating-homeops-from-homelab">Separating HomeOps from Homelab</h3>
<p>I made this split after <em>the data loss incident</em> which taught me not to let others depend on apps I&rsquo;m only trialing in my lab, especially without working backups.</p>
<h3 id="infrastructure-as-code">Infrastructure as code</h3>
<p>Everything is written down as code, so there&rsquo;s as little manual setup as possible. This means I can see what&rsquo;s going on by inspecting the code, and I can automate configuration.</p>
<h3 id="terraform-and-ansible-not-kubernetes">Terraform and Ansible, not Kubernetes</h3>
<p>When I started I wanted to compare Terraform and Ansible against Kubernetes for running a homelab.</p>
<p>I thought I&rsquo;d prove that Kubernetes was obviously the better choice, but two years later I&rsquo;ve found the Terraform and Ansible setup works just fine, so that&rsquo;s what powers my HomeOps.</p>
<p>I use Kubernetes in its own environment where I run experiments.</p>
<h3 id="not-highly-available">Not highly available</h3>
<p>One downside to my setup is that it&rsquo;s not highly available. If a machine breaks then there&rsquo;s nothing to fill in for it until I replace it. I could fix this by running more machines, but that increases the cost.</p>
<p>For now I can live with the downtime. So far nothing&rsquo;s broken, although one day something will.</p>
<h2 id="what-this-series-will-cover">What this series will cover</h2>
<p>In this series I&rsquo;ll go over each part of the system in more detail, including the hardware, IaC, services that run on top, and how I let people access it from outside my home.</p>
<p>The aim is not to present this as the correct way to run a homelab, but to explain the choices I made, how they fit together, and why I use the apps that I do.</p>
<p>It will be split up so you can dive in and out at any point to read just the parts that interest you, with links to anything written earlier that provides necessary context.</p>
<p>It might be awkward in that the system builds up in layers, and things may only make sense for my particular setup, but I&rsquo;ll try my best to generalise each part so it&rsquo;s relevant on its own.</p>
<h2 id="next">Next</h2>
<p>Coming up first is the hardware I use.</p>
<p>Check back soon for the link, or subscribe to the <a href="https://paultibbetts-uk-feat-cooks.preview.lab.paultibbetts.uk/series/homeops-tour/feed.xml">feed for this series</a>
 in your feed reader.</p>
<p>Or jump straight into the code, which is now on <a href="https://github.com/paultibbetts/homeops">GitHub</a>
.</p>]]></content:encoded><source:markdown>
Welcome to my HomeOps Tour, where I&#39;ll be your guide to the stable part of my Homelab.

&lt;!--more--&gt;

## What is HomeOps?

HomeOps isn&#39;t a widely used term, but I have seen a few people use it. To explain what I mean by it I should first define &#34;Homelab&#34;.

A homelab is a setup of computers you control and use for experiments - like a laboratory. It&#39;s usually at home, hence the name, but not always. You might own all the equipment, rent it, or even send your own machines to a provider so they can run them for you - called &#34;colocation&#34;.

The problem is that homelab seems to cover experimentation as well as self-hosting services you use every day, which have different needs.

HomeOps, short for &#34;Home Operations&#34;, is my attempt at labelling the stable part of my homelab.

## Purpose

My HomeOps setup is used to host the apps and services a few people depend on, so I can&#39;t be breaking it every five minutes.

Some people call this &#34;HomeProd&#34;, short for &#34;Home Production&#34;, which separates it from the &#34;development&#34; or &#34;staging&#34; environment you use for experiments.

As such I treat it like a real production system: stable, reproducible, and intentionally boring to operate.

## Architecture

The system is split over different machines, each with a different purpose.

- a &lt;abbr title=&#34;Network Attached Storage&#34;&gt;NAS&lt;/abbr&gt; provides storage over the network
- a server hosts all the apps and services
- a rented &lt;abbr title=&#34;Virtual Private Server&#34;&gt;VPS&lt;/abbr&gt; lets external users in securely through a &#34;tunnel&#34;
- a Raspberry Pi monitors it all

The whole thing is written down as Infrastructure as Code, with Terraform defining the infrastructure and Ansible for configuring it. This would let me reproduce it if a machine breaks and I need to set up a new one.

The server uses a hypervisor as an operating system and services generally get their own virtual machine. One of those VMs uses Docker to run most of the apps.

## Key Decisions

Each of these deserve their own post later in the series.

### Separating HomeOps from Homelab

I made this split after _the data loss incident_ which taught me not to let others depend on apps I&#39;m only trialing in my lab, especially without working backups.

### Infrastructure as code

Everything is written down as code, so there&#39;s as little manual setup as possible. This means I can see what&#39;s going on by inspecting the code, and I can automate configuration.

### Terraform and Ansible, not Kubernetes

When I started I wanted to compare Terraform and Ansible against Kubernetes for running a homelab.

I thought I&#39;d prove that Kubernetes was obviously the better choice, but two years later I&#39;ve found the Terraform and Ansible setup works just fine, so that&#39;s what powers my HomeOps.

I use Kubernetes in its own environment where I run experiments.

### Not highly available

One downside to my setup is that it&#39;s not highly available. If a machine breaks then there&#39;s nothing to fill in for it until I replace it. I could fix this by running more machines, but that increases the cost.

For now I can live with the downtime. So far nothing&#39;s broken, although one day something will.

## What this series will cover

In this series I&#39;ll go over each part of the system in more detail, including the hardware, IaC, services that run on top, and how I let people access it from outside my home.

The aim is not to present this as the correct way to run a homelab, but to explain the choices I made, how they fit together, and why I use the apps that I do.

It will be split up so you can dive in and out at any point to read just the parts that interest you, with links to anything written earlier that provides necessary context.

It might be awkward in that the system builds up in layers, and things may only make sense for my particular setup, but I&#39;ll try my best to generalise each part so it&#39;s relevant on its own.

## Next

Coming up first is the hardware I use.

Check back soon for the link, or subscribe to the [feed for this series](/series/homeops-tour/feed.xml) in your feed reader.

Or jump straight into the code, which is now on [GitHub](https://github.com/paultibbetts/homeops).
</source:markdown></item><item>
      <title>Pangolin on a Pi</title>
      <link>https://paultibbetts-uk-feat-cooks.preview.lab.paultibbetts.uk/2025/12/30/pangolin-on-a-pi/</link>
      <pubDate>Tue, 30 Dec 2025 15:10:00 +0000</pubDate>
      <guid>https://paultibbetts-uk-feat-cooks.preview.lab.paultibbetts.uk/2025/12/30/pangolin-on-a-pi/</guid>
      <category>homelab</category>
      <category>IPv6</category>
      <category>Pangolin</category>
      <category>Raspberry Pi</category>
      <description>This post is not a step-by-step guide. It’s a record of what I tried and what I learned getting Pangolin to run on a Raspberry Pi with NFS storage in an IPv6-only environment.
TLDR: if you want to run Pangolin hassle-free, use a VPS with local SSD storage on an IPv4 network.</description>
      <content:encoded><![CDATA[<p>This post is not a step-by-step guide. It&rsquo;s a record of what I tried and what I learned getting Pangolin to run on a Raspberry Pi with NFS storage in an IPv6-only environment.</p>
<p><strong>TLDR</strong>: if you want to run Pangolin hassle-free, use a VPS with local SSD storage on an IPv4 network.</p>
<h2 id="pangolin">Pangolin</h2>
<p><a href="https://digpangolin.com/">Pangolin</a>
 is a &ldquo;secure access platform&rdquo; for safely exposing internal services. I&rsquo;m using it to let friends and family reach a few apps in my homelab without giving them the keys to everything.</p>
<p>It&rsquo;s a free, open-source alternative to <a href="https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/">Cloudflare Tunnel</a>
 for those who like independence from Cloudflare, want to self-host the stack themselves, or prefer not to rely on a third-party network for media streaming, which is not its intended use-case.</p>
<p>If none of those things bother you then you&rsquo;ll be fine using Cloudflare Tunnel or one of the alternatives. Read the terms and conditions first, media streaming is a bit of a grey area, I am not a lawyer and that wasn&rsquo;t legal advice.</p>
<h2 id="alternatives">Alternatives</h2>
<p>I already use <a href="https://www.wireguard.com/">Wireguard</a>
 as a VPN, and I still use it myself to get into my home network. VPNs work, but they&rsquo;re not fun to manage for friends and family and I wanted the ability to lock them down to certain apps.</p>
<p>There&rsquo;s also <a href="https://tailscale.com/">Tailscale</a>
, <a href="https://netbird.io/">Netbird</a>
, and <a href="https://www.zerotier.com/">ZeroTier</a>
, which use Wireguard to make a mesh network, but that&rsquo;s more of the same VPN solution. I&rsquo;d need to set up profiles and install clients on devices, and I wanted something easier. Tailscale now has its own <a href="https://tailscale.com/kb/1223/funnel">Funnel</a>
 project, but by the time I&rsquo;d seen it I was already setting up Pangolin.</p>
<p>The last alternative to mention is that you can achieve a similar result by renting a server, adding it to your VPN, and setting up a reverse proxy on it. But then you&rsquo;d need something else to make it secure, and you end up back at Pangolin.</p>
<h2 id="hosting">Hosting</h2>
<p>Pangolin needs to be hosted outside your network, so I needed to rent a server. It doesn&rsquo;t need to be a big one, Pangolin can work with 1 vCPU and 1GB of RAM, but ideally it would be close to your internal network and the users that want to get into it.</p>
<p>I live in the UK, so my options were UK, Ireland or Europe. UK-based hosting turned out to be expensive, with Krystal charging <a href="https://krystal.io/cloud-vps">£12 per month</a>
, whereas Hetzner, based in Germany, offers the same specs for <a href="https://www.hetzner.com/cloud">£3.97</a>
.</p>
<p>I should have gone with Hetzner. The extra latency would likely have been ~20ms and for Pangolin&rsquo;s use case - web apps and media streaming - that wouldn&rsquo;t have been noticeable.</p>
<p>But at the time I wanted my server to be based in the UK, so I carried on looking, until I found <a href="https://www.mythic-beasts.com/">Mythic Beasts</a>
. Not only had they recently <a href="https://www.mythic-beasts.com/blog/2025/02/25/supporting-the-open-rights-group/">donated to the Open Rights Group</a>
, an organisation I also support, but they have a cluster of Raspberry Pis you can use.</p>
<p>My search was over. I wanted Pangolin on a Pi. I did some initial testing, and the early signs were good, so I signed up for a year.</p>
<h2 id="raspberry-pi">Raspberry Pi</h2>
<p>The Mythic Beasts Pis come with two obstacles to running Pangolin. The first is that they are IPv6 only, and the second is the storage they use. One of these involves a little workaround and the other makes it a bad choice for hosting Pangolin.</p>
<h3 id="nfs-storage">NFS Storage</h3>
<p>Pangolin is actually more of a stack, with Pangolin as the control plane, Traefik doing reverse proxying, Gerbil running the tunnel and a thing called Badger to do the middleware that checks for authentication. The easiest way to run it all is with Docker Compose, and this is the first hurdle to running Pangolin on a Mythic Beasts Pi.</p>
<p>The Pis only have network storage available, and Docker doesn&rsquo;t like that because NFS doesn&rsquo;t provide the kind of guarantees Docker wants from a filesystem. Docker <em>can</em> work with NFS, but only using the <code>vfs</code> storage driver. Unlike the default <code>overlay2</code> driver, which uses a layered filesystem, <code>vfs</code> doesn&rsquo;t share layers, so every image consumes more space than it should.</p>
<p>So not only does NFS end up being slow, copying over lots of small files, it means the Docker images can&rsquo;t do any of the space saving that would normally happen. I have 50GB of storage and it&rsquo;s at 70% usage, even though the final images only take up 2GB, all because of the way <code>vfs</code> does its layering.</p>
<p>Did I mention that it&rsquo;s slow? Starting up the containers takes about 15 minutes. Turning them off isn&rsquo;t fast either. And upgrades? You won&rsquo;t have room for the new images, so you&rsquo;ll have to turn everything off to remove the old ones before you can start downloading the new ones. This means upgrades can take about an hour, with Pangolin down the entire time.</p>
<h3 id="ipv6">IPv6</h3>
<p>The internet&rsquo;s ran out of IPv4 addresses, by the way, so the Pis are IPv6 only. This means you have to do a bit of extra work to make Pangolin available for everyone.</p>
<p>IPv6 is the future but support for it is still mixed, so Mythic Beasts have an IPv4 to IPv6 proxy to allow users stuck on IPv4-only networks to get to your server. To use it you configure the proxy to forward requests to your domain on to the IPv6 address of the Pi.</p>
<p>The other end of the tunnel, the one in your home network, is managed by a service called Newt. It needs to speak to Gerbil on the Pi, and I was not successful getting it to run with the default <code>pangolin.example.com</code> address I was using.</p>
<p>Newt is configured by pointing it at Pangolin, which advertises the Gerbil endpoint it should connect to. Maybe it was Pangolin, or the proxy, or even something else; I could not get it to work. To make some progress I changed the <code>base_endpoint</code> in <code>config/config.yml</code>. First I tried the IPv6 address of the Pi, but that still didn&rsquo;t work, so I created an AAAA record for Gerbil and pointed it at the Pi. This would do the same thing as the CNAME I&rsquo;d used for Pangolin, except that went through the proxy and maybe that was messing things up. This time, it worked.</p>
<p>Mythic Beasts <a href="https://www.mythic-beasts.com/support/topics/proxy">state their proxy</a>
:</p>
<blockquote>
<p>will relay traffic for common services, such as HTTP and HTTPS</p>
</blockquote>
<p>and I have a suspicion that Wireguard doesn&rsquo;t count as a &ldquo;common service&rdquo;.</p>
<h2 id="home-network">Home network</h2>
<p>The final hurdle to getting this setup to work was my own network. Since the proxy doesn&rsquo;t seem to forward Wireguard traffic, and I have to connect directly to the Pi with IPv6, my network needs to let me do that.</p>
<p>This means I need at least IPv6 egress. That doesn&rsquo;t mean full IPv6 support everywhere, just enough to have a usable outbound path. I tried a bunch of different things to get it to work, and some of my changes actually made things worse, so what follows is what worked for me, in case your setup is similar, most likely it isn&rsquo;t.</p>
<h3 id="isp-router">ISP router</h3>
<p>I&rsquo;m still using the router my ISP gave me, which has very basic IPv6 support. I&rsquo;m with Vodafone and it&rsquo;s the standard &ldquo;WiFi hub&rdquo; they gave out several years ago.</p>
<p>The right combination of buttons to press is under <code>Settings -&gt; Local Network</code> and you want:</p>
<p><code>IPv6</code> <strong>Enabled</strong></p>
<p><code>IPv6 ULA</code> <strong>Disabled</strong></p>
<p>The <code>IPv6</code> toggle enables Router Advertisements (RA) from the router and this gives hosts a global IPv6 address, and also tells them what the default route for IPv6 traffic is, which is through this router.</p>
<p>The <code>IPv6 ULA</code> toggle disables Unique Local Addresses, which is a private IPv6 space used for hosts to speak to each other over IPv6, and is not necessary for Newt to reach Gerbil, so it can be disabled.</p>
<h3 id="mesh-router">Mesh router</h3>
<p>I&rsquo;ve also got a pair of mesh devices I use as a wireless bridge between floors, since I&rsquo;m not able to run an ethernet cable.</p>
<p>They&rsquo;re definitely in bridge mode. However, in the admin panel under <code>Settings -&gt; Network -&gt; Advanced</code>, IPv6 was set to &ldquo;Auto Configuration&rdquo;, meaning they were also doing SLAAC and DHCPv6. This added to the confusion, not just for myself but for my devices, so I changed that to &ldquo;Local Connectivity Only&rdquo; to simplify things.</p>
<h3 id="dhcp">DHCP</h3>
<p>My ISP router sucks, it even crashed when I double checked the settings I mentioned above, so I&rsquo;ve moved DHCP off of it and instead do that with Pi-hole. It&rsquo;s way more stable and lets me view the admin panel without crashing.</p>
<p>An extra benefit of this is that when Pi-hole tells a device what its address is it will also tell them to use it as the DNS server, which makes it an automatic setup. The device now gets ad-blocking and can see the custom DNS records I&rsquo;ve set in Pi-hole without me doing anything.</p>
<h3 id="rdnss">RDNSS</h3>
<p>Except now that my ISP router is doing IPv6, it&rsquo;s also doing <abbr title="Recursive DNS Server">RDNSS</abbr>, which is DNS for IPv6, and I can&rsquo;t turn it off. This means it does the same thing that Pi-hole is doing but for IPv6 instead of 4. Since IPv6 is the future, every device on the network now prefers going to the router for DNS, instead of Pi-hole, so they lose the ad-blocking and custom DNS records I&rsquo;ve set.</p>
<p>If I had a better router that let me turn on IPv6 and either disable RDNSS, or advertise Pi-hole as the IPv6 DNS server, then this wouldn&rsquo;t be a problem. With my ISP router not letting me do that I could manually set every device to use Pi-hole for DNS, which is fine, unless you want to do it on Android.</p>
<h3 id="android">Android</h3>
<p>Most of the mobile devices in this house run iOS, which lets you manually set the DNS server, and allows you to enter an IPv4 address, which is fine for Pi-hole.</p>
<p>Android does it differently. It lets you set an IPv4 address, but if it sees RDNSS then it ignores your manual setting and uses that instead, which for me is the ISP router. So no ad-blocking or custom DNS records for Android devices.</p>
<p>This means if you&rsquo;re in the kitchen and want to check Mealie to see the recipe for tonight&rsquo;s meal you have to go out over the internet to come back and reach the server in the other room.</p>
<p>I don&rsquo;t personally use Android, but as the architect of the setup it still feels bad.</p>
<h3 id="router-dns">Router DNS</h3>
<p>There is a fix, although it&rsquo;s not ideal, and that&rsquo;s to set my router&rsquo;s DNS to use Pi-hole. I had initially forgotten about doing this, because I thought it was already setup, but it turns out I&rsquo;d turned it off for good reason.</p>
<p>Whilst it works, and the Android devices can now see apps in my homelab, all the traffic goes to Pi-hole through the router, so you can&rsquo;t distinguish where it came from. I don&rsquo;t really need this, but I remember now why I preferred Pi-hole handing out its own address as the DNS server.</p>
<h2 id="what-i-could-do-to-improve-it">What I could do to improve it</h2>
<p>This project has made me question, well a lot of things. The ability to update my RSS feeds without toggling my VPN on and off is kinda nice, and I can share limited access to my homelab with my friends and family, so for now it can stay.</p>
<p>Here&rsquo;s what would make it better:</p>
<h3 id="use-a-vps-with-ssd-storage-on-an-ipv4-network">Use a VPS with SSD storage on an IPv4 network</h3>
<p>This is the most obvious improvement to the setup.</p>
<p>The NFS storage on the Pi makes it a bad choice to run Docker Compose setups like the Pangolin stack. It works, but startup and even shutdown take too long and so upgrades have far more downtime than they should. NFS is fine for storage for the containers, but it&rsquo;s not suitable for running the containers themselves.</p>
<p>The IPv4 to IPv6 proxy that I&rsquo;m using doesn&rsquo;t forward Wireguard traffic, so I&rsquo;ve had to set up IPv6 in my network, which has caused some manual work I wasn&rsquo;t expecting.</p>
<p>To be clear, the Pi itself is not to blame for any of this, it&rsquo;s more than capable of handling the Pangolin stack. It&rsquo;s the fact it only has NFS storage that lets it down. The proxy not forwarding Wireguard can be worked around, and both are completely understandable tradeoffs that Mythic Beasts have made to make Raspberry PI hosting available in the first place.</p>
<p>The improvement would be to use a VPS, or even another Pi if I could find one, that uses fast local storage and is on an IPv4 network, or has a proxy available that also forwards Wireguard traffic.</p>
<p>If I hadn&rsquo;t already committed to a 12 month contract for the Pi I would have already done this. If I can find an alternative use for it maybe I&rsquo;ll move before the contract runs out.</p>
<p>Until then, I&rsquo;m not doing this.</p>
<h3 id="host-pangolin-without-docker">Host Pangolin without Docker</h3>
<p>This is entirely possible, but goes against the point of using Pangolin. I wanted an easy to use system, and as soon as I start deploying each part of it myself and connecting all the parts together it&rsquo;s no longer simple or easy to use.</p>
<p>The same goes for installing Wireguard manually on the Pi and reverse proxying through it into my homelab. I&rsquo;ve already got a Wireguard server up and running, so that&rsquo;s half the job already done, but then I&rsquo;d need to setup something to secure access into that tunnel, and that&rsquo;s what Pangolin&rsquo;s for.</p>
<h3 id="bluegreen-deployments">Blue/Green deployments</h3>
<p>NFS means the Pi takes a while to run upgrades, so there&rsquo;s about an hour of downtime.</p>
<p>I could get around this by spinning up a second Pi, installing the upgraded software, somehow sync the configs, and then switch the DNS to point to the upgraded Pi.</p>
<p>This wouldn&rsquo;t solve any of the problems except the downtime, and it would cost me more money to do so. I&rsquo;m not doing that. My friends and family will have to put up with the downtime.</p>
<p>They could chip in to cover the costs, but that turns the whole thing into a business arrangement and I don&rsquo;t want to go down that road.</p>
<h3 id="get-a-better-router">Get a better router</h3>
<p>This is more of a homelab quality-of-life improvement than a Pangolin-specific fix.</p>
<p>Getting rid of the ISP router and replacing it with something better would mean I can stop using Pi-hole for DHCP and only use it for its original intended purpose, DNS.</p>
<p>It only needs the ability to change the RDNSS setting to advertise Pi-hole as the DNS server to be better than my ISP router. Forwarding DNS through the router works, but advertising Pi-hole directly would preserve the per-device visibility in Pi-hole that I originally had for all devices.</p>
<p>This may need to happen anyway, but I wasn&rsquo;t looking to do this right now, so for now it isn&rsquo;t a priority. When I do upgrade, OpenWRT, OPNsense and pfSense would all allow me to use Pi-hole for RDNSS.</p>
<h3 id="host-my-own-ipv4-to-ipv6-proxy">Host my own IPv4 to IPv6 proxy</h3>
<p>I could technically go back to IPv4 only in my network if the proxy I use to connect to the Pi also forwarded Wireguard connections. Since the current one doesn&rsquo;t, the only options are to setup IPv6 in my home network or host my own proxy that can.</p>
<p>I picked the Pi because it was the cheapest UK-based hosting I could find, and this doubles the cost, so it isn&rsquo;t really an option.</p>
<p>Also I don&rsquo;t want to host a tunnel for my tunnel. That&rsquo;s too many tunnels.</p>
<h2 id="would-i-do-this-again">Would I do this again?</h2>
<p>Absolutely not.</p>
<h3 id="am-i-glad-i-tried-it">Am I glad I tried it?</h3>
<p>Yes. That&rsquo;s the point of a homelab.</p>]]></content:encoded><source:markdown>
This post is not a step-by-step guide. It&#39;s a record of what I tried and what I learned getting Pangolin to run on a Raspberry Pi with NFS storage in an IPv6-only environment.

**TLDR**: if you want to run Pangolin hassle-free, use a VPS with local SSD storage on an IPv4 network.

&lt;!--more--&gt;

## Pangolin

[Pangolin](https://digpangolin.com/) is a &#34;secure access platform&#34; for safely exposing internal services. I&#39;m using it to let friends and family reach a few apps in my homelab without giving them the keys to everything.

It&#39;s a free, open-source alternative to [Cloudflare Tunnel](https://developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/) for those who like independence from Cloudflare, want to self-host the stack themselves, or prefer not to rely on a third-party network for media streaming, which is not its intended use-case.

If none of those things bother you then you&#39;ll be fine using Cloudflare Tunnel or one of the alternatives. Read the terms and conditions first, media streaming is a bit of a grey area, I am not a lawyer and that wasn&#39;t legal advice.

## Alternatives

I already use [Wireguard](https://www.wireguard.com/) as a VPN, and I still use it myself to get into my home network. VPNs work, but they&#39;re not fun to manage for friends and family and I wanted the ability to lock them down to certain apps.

There&#39;s also [Tailscale](https://tailscale.com/), [Netbird](https://netbird.io/), and [ZeroTier](https://www.zerotier.com/), which use Wireguard to make a mesh network, but that&#39;s more of the same VPN solution. I&#39;d need to set up profiles and install clients on devices, and I wanted something easier. Tailscale now has its own [Funnel](https://tailscale.com/kb/1223/funnel) project, but by the time I&#39;d seen it I was already setting up Pangolin.

The last alternative to mention is that you can achieve a similar result by renting a server, adding it to your VPN, and setting up a reverse proxy on it. But then you&#39;d need something else to make it secure, and you end up back at Pangolin.

## Hosting

Pangolin needs to be hosted outside your network, so I needed to rent a server. It doesn&#39;t need to be a big one, Pangolin can work with 1 vCPU and 1GB of RAM, but ideally it would be close to your internal network and the users that want to get into it.

I live in the UK, so my options were UK, Ireland or Europe. UK-based hosting turned out to be expensive, with Krystal charging [£12 per month](https://krystal.io/cloud-vps), whereas Hetzner, based in Germany, offers the same specs for [£3.97](https://www.hetzner.com/cloud).

I should have gone with Hetzner. The extra latency would likely have been ~20ms and for Pangolin&#39;s use case - web apps and media streaming - that wouldn&#39;t have been noticeable.

But at the time I wanted my server to be based in the UK, so I carried on looking, until I found [Mythic Beasts](https://www.mythic-beasts.com/). Not only had they recently [donated to the Open Rights Group](https://www.mythic-beasts.com/blog/2025/02/25/supporting-the-open-rights-group/), an organisation I also support, but they have a cluster of Raspberry Pis you can use.

My search was over. I wanted Pangolin on a Pi. I did some initial testing, and the early signs were good, so I signed up for a year.

## Raspberry Pi

The Mythic Beasts Pis come with two obstacles to running Pangolin. The first is that they are IPv6 only, and the second is the storage they use. One of these involves a little workaround and the other makes it a bad choice for hosting Pangolin.

### NFS Storage

Pangolin is actually more of a stack, with Pangolin as the control plane, Traefik doing reverse proxying, Gerbil running the tunnel and a thing called Badger to do the middleware that checks for authentication. The easiest way to run it all is with Docker Compose, and this is the first hurdle to running Pangolin on a Mythic Beasts Pi.

The Pis only have network storage available, and Docker doesn&#39;t like that because NFS doesn&#39;t provide the kind of guarantees Docker wants from a filesystem. Docker _can_ work with NFS, but only using the `vfs` storage driver. Unlike the default `overlay2` driver, which uses a layered filesystem, `vfs` doesn&#39;t share layers, so every image consumes more space than it should.

So not only does NFS end up being slow, copying over lots of small files, it means the Docker images can&#39;t do any of the space saving that would normally happen. I have 50GB of storage and it&#39;s at 70% usage, even though the final images only take up 2GB, all because of the way `vfs` does its layering.

Did I mention that it&#39;s slow? Starting up the containers takes about 15 minutes. Turning them off isn&#39;t fast either. And upgrades? You won&#39;t have room for the new images, so you&#39;ll have to turn everything off to remove the old ones before you can start downloading the new ones. This means upgrades can take about an hour, with Pangolin down the entire time.

### IPv6

The internet&#39;s ran out of IPv4 addresses, by the way, so the Pis are IPv6 only. This means you have to do a bit of extra work to make Pangolin available for everyone.

IPv6 is the future but support for it is still mixed, so Mythic Beasts have an IPv4 to IPv6 proxy to allow users stuck on IPv4-only networks to get to your server. To use it you configure the proxy to forward requests to your domain on to the IPv6 address of the Pi.

The other end of the tunnel, the one in your home network, is managed by a service called Newt. It needs to speak to Gerbil on the Pi, and I was not successful getting it to run with the default `pangolin.example.com` address I was using.

Newt is configured by pointing it at Pangolin, which advertises the Gerbil endpoint it should connect to. Maybe it was Pangolin, or the proxy, or even something else; I could not get it to work. To make some progress I changed the `base_endpoint` in `config/config.yml`. First I tried the IPv6 address of the Pi, but that still didn&#39;t work, so I created an AAAA record for Gerbil and pointed it at the Pi. This would do the same thing as the CNAME I&#39;d used for Pangolin, except that went through the proxy and maybe that was messing things up. This time, it worked.

Mythic Beasts [state their proxy](https://www.mythic-beasts.com/support/topics/proxy):

&gt; will relay traffic for common services, such as HTTP and HTTPS

and I have a suspicion that Wireguard doesn&#39;t count as a &#34;common service&#34;.

## Home network

The final hurdle to getting this setup to work was my own network. Since the proxy doesn&#39;t seem to forward Wireguard traffic, and I have to connect directly to the Pi with IPv6, my network needs to let me do that.

This means I need at least IPv6 egress. That doesn&#39;t mean full IPv6 support everywhere, just enough to have a usable outbound path. I tried a bunch of different things to get it to work, and some of my changes actually made things worse, so what follows is what worked for me, in case your setup is similar, most likely it isn&#39;t.

### ISP router

I&#39;m still using the router my ISP gave me, which has very basic IPv6 support. I&#39;m with Vodafone and it&#39;s the standard &#34;WiFi hub&#34; they gave out several years ago.

The right combination of buttons to press is under `Settings -&gt; Local Network` and you want:

`IPv6` **Enabled**

`IPv6 ULA` **Disabled**

The `IPv6` toggle enables Router Advertisements (RA) from the router and this gives hosts a global IPv6 address, and also tells them what the default route for IPv6 traffic is, which is through this router.

The `IPv6 ULA` toggle disables Unique Local Addresses, which is a private IPv6 space used for hosts to speak to each other over IPv6, and is not necessary for Newt to reach Gerbil, so it can be disabled.

### Mesh router

I&#39;ve also got a pair of mesh devices I use as a wireless bridge between floors, since I&#39;m not able to run an ethernet cable.

They&#39;re definitely in bridge mode. However, in the admin panel under `Settings -&gt; Network -&gt; Advanced`, IPv6 was set to &#34;Auto Configuration&#34;, meaning they were also doing SLAAC and DHCPv6. This added to the confusion, not just for myself but for my devices, so I changed that to &#34;Local Connectivity Only&#34; to simplify things.

### DHCP

My ISP router sucks, it even crashed when I double checked the settings I mentioned above, so I&#39;ve moved DHCP off of it and instead do that with Pi-hole. It&#39;s way more stable and lets me view the admin panel without crashing.

An extra benefit of this is that when Pi-hole tells a device what its address is it will also tell them to use it as the DNS server, which makes it an automatic setup. The device now gets ad-blocking and can see the custom DNS records I&#39;ve set in Pi-hole without me doing anything.

### RDNSS

Except now that my ISP router is doing IPv6, it&#39;s also doing &lt;abbr title=&#34;Recursive DNS Server&#34;&gt;RDNSS&lt;/abbr&gt;, which is DNS for IPv6, and I can&#39;t turn it off. This means it does the same thing that Pi-hole is doing but for IPv6 instead of 4. Since IPv6 is the future, every device on the network now prefers going to the router for DNS, instead of Pi-hole, so they lose the ad-blocking and custom DNS records I&#39;ve set.

If I had a better router that let me turn on IPv6 and either disable RDNSS, or advertise Pi-hole as the IPv6 DNS server, then this wouldn&#39;t be a problem. With my ISP router not letting me do that I could manually set every device to use Pi-hole for DNS, which is fine, unless you want to do it on Android.

### Android

Most of the mobile devices in this house run iOS, which lets you manually set the DNS server, and allows you to enter an IPv4 address, which is fine for Pi-hole.

Android does it differently. It lets you set an IPv4 address, but if it sees RDNSS then it ignores your manual setting and uses that instead, which for me is the ISP router. So no ad-blocking or custom DNS records for Android devices.

This means if you&#39;re in the kitchen and want to check Mealie to see the recipe for tonight&#39;s meal you have to go out over the internet to come back and reach the server in the other room.

I don&#39;t personally use Android, but as the architect of the setup it still feels bad.

### Router DNS

There is a fix, although it&#39;s not ideal, and that&#39;s to set my router&#39;s DNS to use Pi-hole. I had initially forgotten about doing this, because I thought it was already setup, but it turns out I&#39;d turned it off for good reason.

Whilst it works, and the Android devices can now see apps in my homelab, all the traffic goes to Pi-hole through the router, so you can&#39;t distinguish where it came from. I don&#39;t really need this, but I remember now why I preferred Pi-hole handing out its own address as the DNS server.

## What I could do to improve it

This project has made me question, well a lot of things. The ability to update my RSS feeds without toggling my VPN on and off is kinda nice, and I can share limited access to my homelab with my friends and family, so for now it can stay.

Here&#39;s what would make it better:

### Use a VPS with SSD storage on an IPv4 network

This is the most obvious improvement to the setup.

The NFS storage on the Pi makes it a bad choice to run Docker Compose setups like the Pangolin stack. It works, but startup and even shutdown take too long and so upgrades have far more downtime than they should. NFS is fine for storage for the containers, but it&#39;s not suitable for running the containers themselves.

The IPv4 to IPv6 proxy that I&#39;m using doesn&#39;t forward Wireguard traffic, so I&#39;ve had to set up IPv6 in my network, which has caused some manual work I wasn&#39;t expecting.

To be clear, the Pi itself is not to blame for any of this, it&#39;s more than capable of handling the Pangolin stack. It&#39;s the fact it only has NFS storage that lets it down. The proxy not forwarding Wireguard can be worked around, and both are completely understandable tradeoffs that Mythic Beasts have made to make Raspberry PI hosting available in the first place.

The improvement would be to use a VPS, or even another Pi if I could find one, that uses fast local storage and is on an IPv4 network, or has a proxy available that also forwards Wireguard traffic.

If I hadn&#39;t already committed to a 12 month contract for the Pi I would have already done this. If I can find an alternative use for it maybe I&#39;ll move before the contract runs out.

Until then, I&#39;m not doing this.

### Host Pangolin without Docker

This is entirely possible, but goes against the point of using Pangolin. I wanted an easy to use system, and as soon as I start deploying each part of it myself and connecting all the parts together it&#39;s no longer simple or easy to use.

The same goes for installing Wireguard manually on the Pi and reverse proxying through it into my homelab. I&#39;ve already got a Wireguard server up and running, so that&#39;s half the job already done, but then I&#39;d need to setup something to secure access into that tunnel, and that&#39;s what Pangolin&#39;s for.

### Blue/Green deployments

NFS means the Pi takes a while to run upgrades, so there&#39;s about an hour of downtime.

I could get around this by spinning up a second Pi, installing the upgraded software, somehow sync the configs, and then switch the DNS to point to the upgraded Pi.

This wouldn&#39;t solve any of the problems except the downtime, and it would cost me more money to do so. I&#39;m not doing that. My friends and family will have to put up with the downtime.

They could chip in to cover the costs, but that turns the whole thing into a business arrangement and I don&#39;t want to go down that road.

### Get a better router

This is more of a homelab quality-of-life improvement than a Pangolin-specific fix.

Getting rid of the ISP router and replacing it with something better would mean I can stop using Pi-hole for DHCP and only use it for its original intended purpose, DNS.

It only needs the ability to change the RDNSS setting to advertise Pi-hole as the DNS server to be better than my ISP router. Forwarding DNS through the router works, but advertising Pi-hole directly would preserve the per-device visibility in Pi-hole that I originally had for all devices.

This may need to happen anyway, but I wasn&#39;t looking to do this right now, so for now it isn&#39;t a priority. When I do upgrade, OpenWRT, OPNsense and pfSense would all allow me to use Pi-hole for RDNSS.

### Host my own IPv4 to IPv6 proxy

I could technically go back to IPv4 only in my network if the proxy I use to connect to the Pi also forwarded Wireguard connections. Since the current one doesn&#39;t, the only options are to setup IPv6 in my home network or host my own proxy that can.

I picked the Pi because it was the cheapest UK-based hosting I could find, and this doubles the cost, so it isn&#39;t really an option.

Also I don&#39;t want to host a tunnel for my tunnel. That&#39;s too many tunnels.

## Would I do this again?

Absolutely not.

### Am I glad I tried it?

Yes. That&#39;s the point of a homelab.
</source:markdown></item><item>
      <title>The Self-Inflicted Pain Ruining My Homelab</title>
      <link>https://paultibbetts-uk-feat-cooks.preview.lab.paultibbetts.uk/2025/09/10/the-self-inflicted-pain-ruining-my-homelab/</link>
      <pubDate>Wed, 10 Sep 2025 15:30:00 +0100</pubDate>
      <guid>https://paultibbetts-uk-feat-cooks.preview.lab.paultibbetts.uk/2025/09/10/the-self-inflicted-pain-ruining-my-homelab/</guid>
      <category>homelab</category>
      <category>networking</category>
      <category>DHCP</category>
      <category>Pi-hole</category>
      <description>The worst pains in tech are self-inflicted. Then it’s bad Wi-Fi.
I’ve just fixed a very niche problem that was both.</description>
      <content:encoded><![CDATA[<p>The worst pains in tech are self-inflicted. Then it&rsquo;s bad Wi-Fi.</p>
<p>I&rsquo;ve just fixed a very niche problem that was both.</p>
<h2 id="home-network">Home Network</h2>
<p>My home network&rsquo;s a bit unusual. The internet comes in downstairs, like the internet usually does, and I need it upstairs where my computers are. I&rsquo;m renting, and the property owner doesn&rsquo;t want wires going up and into walls, so I have to do it wirelessly.</p>
<p>WiFi is fine for most of my devices but a few of them are servers that don&rsquo;t have adapters. They want to be plugged in, so I share the internet between floors with a pair of <a href="https://www.dlink.com/en/products/m15-3-pack-ax1500-mesh-system">mesh routers</a>
 and plug in the servers to the upstairs mesh device.</p>
<p>It all works great and I can recommend the mesh routers, although they&rsquo;re a bit old and have probably been superseded by now.</p>
<h2 id="homelab">Homelab</h2>
<p>The problems started along with my homelab.</p>
<p>I was creating lots of virtual machines on one of the servers that weren&rsquo;t being recognised by the router, so they wouldn&rsquo;t join the network and had no internet access.</p>
<p>I couldn&rsquo;t get onto the admin panel of the router because it&rsquo;s the free one you get from the ISP and it wasn&rsquo;t powerful enough to keep up.</p>
<p>I was getting annoyed.</p>
<h3 id="dhcp">DHCP</h3>
<p>Then I found that Pi-hole, something I was already using for ad-blocking and DNS, could also <a href="https://discourse.pi-hole.net/t/how-do-i-use-pi-holes-built-in-dhcp-server-and-why-would-i-want-to/3026">act as a DHCP server</a>
. This would undoubtedly be better than doing it on the free ISP router that couldn&rsquo;t keep up, so I disabled it on the router and enabled it in Pi-hole.</p>
<p>The way DHCP works is that something on your network needs to answer requests from clients telling them what their address is. Usually this is the router, but it doesn&rsquo;t need to be.</p>
<p>So I set my instance of Pi-hole to handle DHCP.</p>
<p>And it all worked great.</p>
<p>Kind of.</p>
<h3 id="dhcp-over-mesh-wifi">DHCP over mesh WiFi?</h3>
<p>The first clue that things weren&rsquo;t quite right came when my devices wouldn&rsquo;t reconnect to WiFi. The next was when my PC wouldn&rsquo;t get a connection at all, until after I restarted the mesh router.</p>
<p>It took a while for me to connect the dots, but something about the mesh routers was making things weird.</p>
<p>If it didn&rsquo;t work then that was fine, I would move on. But it worked some of the time?</p>
<h3 id="have-you-tried-not-doing-that">Have you tried not doing that?</h3>
<p>I spent a lot of time this week trying to diagnose the issue.</p>
<p>I even started preparing to replace the router.</p>
<p>I needn&rsquo;t have bothered.</p>
<p>Moving the server with Pi-hole on it downstairs, where it doesn&rsquo;t need to use the mesh routers, has fixed the issue.</p>
<p>Pi-hole now responds to DHCP requests and all my devices can connect to the network.</p>
<h2 id="summary">Summary</h2>
<p>So if you ever have DHCP issues because your instance of Pi-hole is behind a mesh router, try not doing that and see if it fixes things.</p>]]></content:encoded><source:markdown>
The worst pains in tech are self-inflicted. Then it&#39;s bad Wi-Fi.

I&#39;ve just fixed a very niche problem that was both.

&lt;!--more--&gt;

## Home Network

My home network&#39;s a bit unusual. The internet comes in downstairs, like the internet usually does, and I need it upstairs where my computers are. I&#39;m renting, and the property owner doesn&#39;t want wires going up and into walls, so I have to do it wirelessly.

WiFi is fine for most of my devices but a few of them are servers that don&#39;t have adapters. They want to be plugged in, so I share the internet between floors with a pair of [mesh routers](https://www.dlink.com/en/products/m15-3-pack-ax1500-mesh-system) and plug in the servers to the upstairs mesh device.

It all works great and I can recommend the mesh routers, although they&#39;re a bit old and have probably been superseded by now.

## Homelab

The problems started along with my homelab.

I was creating lots of virtual machines on one of the servers that weren&#39;t being recognised by the router, so they wouldn&#39;t join the network and had no internet access.

I couldn&#39;t get onto the admin panel of the router because it&#39;s the free one you get from the ISP and it wasn&#39;t powerful enough to keep up.

I was getting annoyed.

### DHCP

Then I found that Pi-hole, something I was already using for ad-blocking and DNS, could also [act as a DHCP server](https://discourse.pi-hole.net/t/how-do-i-use-pi-holes-built-in-dhcp-server-and-why-would-i-want-to/3026). This would undoubtedly be better than doing it on the free ISP router that couldn&#39;t keep up, so I disabled it on the router and enabled it in Pi-hole.

The way DHCP works is that something on your network needs to answer requests from clients telling them what their address is. Usually this is the router, but it doesn&#39;t need to be.

So I set my instance of Pi-hole to handle DHCP.

And it all worked great.

Kind of.

### DHCP over mesh WiFi?

The first clue that things weren&#39;t quite right came when my devices wouldn&#39;t reconnect to WiFi. The next was when my PC wouldn&#39;t get a connection at all, until after I restarted the mesh router.

It took a while for me to connect the dots, but something about the mesh routers was making things weird.

If it didn&#39;t work then that was fine, I would move on. But it worked some of the time?

### Have you tried not doing that?

I spent a lot of time this week trying to diagnose the issue.

I even started preparing to replace the router.

I needn&#39;t have bothered.

Moving the server with Pi-hole on it downstairs, where it doesn&#39;t need to use the mesh routers, has fixed the issue.

Pi-hole now responds to DHCP requests and all my devices can connect to the network.

## Summary

So if you ever have DHCP issues because your instance of Pi-hole is behind a mesh router, try not doing that and see if it fixes things.
</source:markdown></item><item>
      <title>Homelab V1</title>
      <link>https://paultibbetts-uk-feat-cooks.preview.lab.paultibbetts.uk/2025/06/13/homelab-v1/</link>
      <pubDate>Fri, 13 Jun 2025 16:00:00 +0100</pubDate>
      <guid>https://paultibbetts-uk-feat-cooks.preview.lab.paultibbetts.uk/2025/06/13/homelab-v1/</guid>
      <category>homelab</category>
      <description>My Homelab has hit its first milestone 🚀</description>
      <content:encoded><![CDATA[<p>My Homelab has hit its first milestone 🚀</p>
<h2 id="cloud">Cloud</h2>
<p>The biggest problem with my homelab was that I kept breaking it.</p>
<p>I couldn&rsquo;t get used to using <a href="https://mealie.io/">mealie</a>
 as a meal planner because I would go to use it and it didn&rsquo;t work. Or it did, but I couldn&rsquo;t connect to it properly. Or something else went wrong.</p>
<p>So for my first &ldquo;release&rdquo; I aimed for a &ldquo;cloud&rdquo;. Some people call it &ldquo;HomeProd&rdquo;.</p>
<p>I used things I was used to, and a few things I wasn&rsquo;t, to make a simple, stable platform on which I could host my <em>actual</em> homelab.</p>
<p>Here&rsquo;s what&rsquo;s in it:</p>
<h3 id="nas">NAS</h3>
<p>I have a machine dedicated to running <a href="https://www.truenas.com/truenas-scale/">TrueNAS Scale</a>
.</p>
<p>I bought the hype that I needed <a href="https://www.truenas.com/docs/scale/gettingstarted/scalehardwareguide/">ECC RAM</a>
 so that my data would be safe and so I also needed a server-grade processor, which meant a server-grade motherboard, and all the other bits to go with it.</p>
<p>At the time Scale had built-in Kubernetes so I used TrueCharts to set up some apps. And then they stopped working. And then there were all the updates with breaking changes. And then I got fed up.</p>
<p>This was meant to be a machine that did storage and I didn&rsquo;t want to mess with it.</p>
<p>The TrueNAS devs thought the same thing and took out Kubernetes and replaced it with Docker, so I updated to follow and now I only run two storage apps on it.</p>
<h4 id="usage">Usage</h4>
<ul>
<li><strong>file storage</strong> over <strong>NFS</strong> to Linux and Mac and <strong>SMB</strong> for Windows</li>
<li><strong>object storage</strong> via <a href="https://min.io">MinIO</a>
 installed as a Docker container</li>
<li><strong>backups</strong> for virtual machines via <a href="https://www.proxmox.com/en/products/proxmox-backup-server/overview">Proxmox Backup Server</a>
</li>
</ul>
<p>and <strong>nothing else</strong>.</p>
<p>I just want it to do network attached storage, and I don&rsquo;t want to mess with it.</p>
<h4 id="storage">Storage</h4>
<ul>
<li>2 NVME for 4TB of fast storage</li>
<li>1 SSD for 500GB internal storage</li>
<li>4 HDD RAIDZ2 for 10TB of slow storage</li>
</ul>
<h3 id="nuc">NUC</h3>
<p>After getting burned trying to do server things on my NAS I looked for a replacement and found the <a href="https://turingpi.com">Turing Pi</a>
, and then in true Kickstarter fashion it got delayed, and then delayed again.</p>
<p>I impatiently bought an Intel NUC.</p>
<p>I <em>could</em> have installed Linux on it and used it as a server but I wanted to use Terraform for Infrastructure as Code, so instead I installed <a href="https://www.proxmox.com/en/products/proxmox-virtual-environment/overview">Proxmox VE</a>
 and used Terraform to create the virtual machines and LXC containers I needed with code.</p>
<p>This meant I could get some practise in using <a href="https://docs.ansible.com/ansible/latest/index.html">Ansible</a>
 to configure things and try out <a href="https://k3s.io">K3s</a>
 to run Kubernetes.</p>
<h4 id="usage-1">Usage</h4>
<ul>
<li><strong>compute</strong> for running services and apps</li>
<li>experience using <strong>Proxmox</strong></li>
<li>practise using IaC with <strong>Terraform</strong> and <strong>Ansible</strong></li>
<li>a place to try out <strong>Kubernetes</strong> stuff</li>
<li>a better GPU than the NAS for <strong>Jellyfin</strong> to use for transcoding</li>
</ul>
<h4 id="services">Services</h4>
<ul>
<li><strong><a href="https://pi-hole.net/">Pi-hole</a>
</strong> for blocking adverts as well as DNS and DHCP for my network</li>
<li><strong><a href="https://www.pivpn.io/">Wireguard</a>
</strong> for a VPN so I can connect from out the house</li>
<li><strong>MySQL</strong> and <strong>Postgres</strong> databases for &ldquo;cloud&rdquo; things to use</li>
<li><strong><a href="https://caddyserver.com/">Caddy</a>
</strong> as a reverse proxy to provide access to my &ldquo;cloud&rdquo; apps and services</li>
<li><strong><a href="https://about.gitea.com/">Gitea</a>
</strong> for storing my git repositories</li>
<li><strong><a href="https://jellyfin.org/">Jellyfin</a>
</strong> to watch my own media content</li>
</ul>
<h4 id="apps">Apps</h4>
<ul>
<li><strong><a href="https://mealie.io/">Mealie</a>
</strong> for recipe management and meal planning</li>
<li><strong><a href="https://www.freshrss.org/">FreshRSS</a>
</strong> for my RSS clients to sync from</li>
</ul>
<h3 id="deskpi">DeskPi</h3>
<p>The last part of my &ldquo;cloud&rdquo; is the Raspberry Pi 4 I have on my desk.</p>
<p>(I named it before I heard about the company with the same name)</p>
<p>I had future plans for it, since it&rsquo;s sat on my desk, so I installed the desktop version of Ubuntu and hooked it up to my second screen.</p>
<p>Then I installed <a href="https://paultibbetts-uk-feat-cooks.preview.lab.paultibbetts.uk/2025/06/13/homelab-v1/">Uptime Kuma</a>
 on it to monitor all my services and apps.</p>
<p>Apparently I cheaped out when I bought it and got the 2GB version, so it&rsquo;s really really slow and struggles with showing the dashboard.</p>
<p><img src="https://paultibbetts-uk-feat-cooks.preview.lab.paultibbetts.uk/2025/06/13/homelab-v1/uptime-kuma-status-page.png" alt="screenshot of Uptime Kuma status page">
</p>
<p>I&rsquo;ve been looking for a good excuse to buy a Raspberry Pi 5 but technically this works, so for now it can stay.</p>
<h2 id="lab">Lab</h2>
<p>Now that the stable self-hosted part is out of the way I&rsquo;m going to leave it alone and use something else for the new ideas.</p>
<p>My Turing Pi 2.5 has finally arrived, along with its case, 3 x <a href="https://turingpi.com/product/turing-rk1/?attribute_ram=8&#43;GB">RK1</a>
 compute modules and 3 x 1 TB NVME drives. I&rsquo;m planning on using it as a cluster to run Kubernetes and potentially host my own website, but we&rsquo;ll see about that.</p>
<p>Right now it&rsquo;s on the bench in the lab.</p>]]></content:encoded><source:markdown>
My Homelab has hit its first milestone 🚀

&lt;!--more--&gt;

## Cloud

The biggest problem with my homelab was that I kept breaking it.

I couldn&#39;t get used to using [mealie](https://mealie.io/) as a meal planner because I would go to use it and it didn&#39;t work. Or it did, but I couldn&#39;t connect to it properly. Or something else went wrong.

So for my first &#34;release&#34; I aimed for a &#34;cloud&#34;. Some people call it &#34;HomeProd&#34;.

I used things I was used to, and a few things I wasn&#39;t, to make a simple, stable platform on which I could host my _actual_ homelab.

Here&#39;s what&#39;s in it:

### NAS

I have a machine dedicated to running [TrueNAS Scale](https://www.truenas.com/truenas-scale/).

I bought the hype that I needed [ECC RAM](https://www.truenas.com/docs/scale/gettingstarted/scalehardwareguide/) so that my data would be safe and so I also needed a server-grade processor, which meant a server-grade motherboard, and all the other bits to go with it.

At the time Scale had built-in Kubernetes so I used TrueCharts to set up some apps. And then they stopped working. And then there were all the updates with breaking changes. And then I got fed up.

This was meant to be a machine that did storage and I didn&#39;t want to mess with it.

The TrueNAS devs thought the same thing and took out Kubernetes and replaced it with Docker, so I updated to follow and now I only run two storage apps on it.

#### Usage

- **file storage** over **NFS** to Linux and Mac and **SMB** for Windows
- **object storage** via [MinIO](https://min.io) installed as a Docker container
- **backups** for virtual machines via [Proxmox Backup Server](https://www.proxmox.com/en/products/proxmox-backup-server/overview)

and **nothing else**.

I just want it to do network attached storage, and I don&#39;t want to mess with it.

#### Storage

- 2 NVME for 4TB of fast storage
- 1 SSD for 500GB internal storage
- 4 HDD RAIDZ2 for 10TB of slow storage

### NUC

After getting burned trying to do server things on my NAS I looked for a replacement and found the [Turing Pi](https://turingpi.com), and then in true Kickstarter fashion it got delayed, and then delayed again.

I impatiently bought an Intel NUC.

I _could_ have installed Linux on it and used it as a server but I wanted to use Terraform for Infrastructure as Code, so instead I installed [Proxmox VE](https://www.proxmox.com/en/products/proxmox-virtual-environment/overview) and used Terraform to create the virtual machines and LXC containers I needed with code.

This meant I could get some practise in using [Ansible](https://docs.ansible.com/ansible/latest/index.html) to configure things and try out [K3s](https://k3s.io) to run Kubernetes.

#### Usage

- **compute** for running services and apps
- experience using **Proxmox**
- practise using IaC with **Terraform** and **Ansible**
- a place to try out **Kubernetes** stuff
- a better GPU than the NAS for **Jellyfin** to use for transcoding

#### Services

- **[Pi-hole](https://pi-hole.net/)** for blocking adverts as well as DNS and DHCP for my network
- **[Wireguard](https://www.pivpn.io/)** for a VPN so I can connect from out the house
- **MySQL** and **Postgres** databases for &#34;cloud&#34; things to use
- **[Caddy](https://caddyserver.com/)** as a reverse proxy to provide access to my &#34;cloud&#34; apps and services
- **[Gitea](https://about.gitea.com/)** for storing my git repositories
- **[Jellyfin](https://jellyfin.org/)** to watch my own media content

#### Apps

- **[Mealie](https://mealie.io/)** for recipe management and meal planning
- **[FreshRSS](https://www.freshrss.org/)** for my RSS clients to sync from

### DeskPi

The last part of my &#34;cloud&#34; is the Raspberry Pi 4 I have on my desk.

(I named it before I heard about the company with the same name)

I had future plans for it, since it&#39;s sat on my desk, so I installed the desktop version of Ubuntu and hooked it up to my second screen.

Then I installed [Uptime Kuma]() on it to monitor all my services and apps.

Apparently I cheaped out when I bought it and got the 2GB version, so it&#39;s really really slow and struggles with showing the dashboard.

![screenshot of Uptime Kuma status page](uptime-kuma-status-page.png)

I&#39;ve been looking for a good excuse to buy a Raspberry Pi 5 but technically this works, so for now it can stay.

## Lab

Now that the stable self-hosted part is out of the way I&#39;m going to leave it alone and use something else for the new ideas.

My Turing Pi 2.5 has finally arrived, along with its case, 3 x [RK1](https://turingpi.com/product/turing-rk1/?attribute_ram=8+GB) compute modules and 3 x 1 TB NVME drives. I&#39;m planning on using it as a cluster to run Kubernetes and potentially host my own website, but we&#39;ll see about that.

Right now it&#39;s on the bench in the lab.
</source:markdown></item><item>
      <title>Homelab v0</title>
      <link>https://paultibbetts-uk-feat-cooks.preview.lab.paultibbetts.uk/2025/06/04/homelab-v0/</link>
      <pubDate>Wed, 04 Jun 2025 22:30:59 +0100</pubDate>
      <guid>https://paultibbetts-uk-feat-cooks.preview.lab.paultibbetts.uk/2025/06/04/homelab-v0/</guid>
      <category>homelab</category>
      <description>As my homelab is about to reach a milestone I thought I’d look back on where it started.</description>
      <content:encoded><![CDATA[<p>As my homelab is about to reach a milestone I thought I&rsquo;d look back on where it started.</p>
<h2 id="whats-a-homelab">What&rsquo;s a homelab?</h2>
<p>A homelab is a personal setup of computer stuff that some of us spend way too much time and money on.</p>
<h2 id="why-would-i-want-one">Why would I want one?</h2>
<p>Here&rsquo;s a few reasons:</p>
<h3 id="learning">Learning</h3>
<p>The biggest reason I wanted a homelab was for learning. I can get hands-on experience with tech I wouldn&rsquo;t normally use, and as a DevOps Engineer that often ends up being useful at work.</p>
<h3 id="applications">Applications</h3>
<p>There are loads of open source apps you can run for free at home.</p>
<p>You can <a href="https://pi-hole.net">block adverts</a>
, <a href="https://jellyfin.org">run your own Netflix</a>
 and <a href="https://www.awesome-homelab.com/">plenty more</a>
.</p>
<h3 id="services">Services</h3>
<p>You could backup your devices and centralise storage with a NAS, then setup a VPN and connect to it from anywhere.</p>
<h2 id="how-do-i-get-one">How do I get one?</h2>
<p>The biggest thing I want you to take away from this is that you already have one.</p>
<blockquote>
<p>the homelab was inside you all along</p>
</blockquote>
<p>Pretend for a moment you&rsquo;re a mad scientist, hacking away at some computery stuff. There are several blinking lights and a faint computery hum fills the air.</p>
<p>What kind of computery stuff did you imagine?</p>
<p>Did it involve loads of blinky lights? You might be interested in networking. I bought a <a href="https://techspecs.ui.com/unifi/switching/unifi-flex-xg?s=uk">Ubiquiti switch</a>
 and it&rsquo;s way blinkier than my old one. It&rsquo;s also 10 times faster.</p>
<p>Did you see yourself coding? Maybe you could setup your own git server, add on CI/CD and get your apps hosted on your own network. That&rsquo;s what I&rsquo;m doing.</p>
<p>Or maybe you want to try out AI on your own hardware?</p>
<p>Whatever it is, you can probably get started right now with the things that you already have. You don&rsquo;t need to go and buy anything just yet. Start acting like a mad scientist doing computery stuff and eventually you&rsquo;ll become one.</p>
<p>When I wanted to learn about Docker images I used my own laptop. Then when I was given a Raspberry Pi I tested out running Docker images on that and so my homelab doubled in size.</p>
<p>I didn&rsquo;t realise it was called a homelab at the time. I was just doing computery stuff.</p>
<h2 id="my-homelab-v0">My Homelab v0</h2>
<p><strong>Macbook Pro</strong> (2012)</p>
<p><strong>Raspberry Pi 1</strong></p>
<p><strong>Notebook</strong></p>
<p><strong>Pen</strong> for writing it all down, otherwise it&rsquo;s not science.</p>]]></content:encoded><source:markdown>
As my homelab is about to reach a milestone I thought I&#39;d look back on where it started.

&lt;!--more--&gt;

## What&#39;s a homelab?

A homelab is a personal setup of computer stuff that some of us spend way too much time and money on.

## Why would I want one?

Here&#39;s a few reasons:

### Learning

The biggest reason I wanted a homelab was for learning. I can get hands-on experience with tech I wouldn&#39;t normally use, and as a DevOps Engineer that often ends up being useful at work.

### Applications

There are loads of open source apps you can run for free at home.

You can [block adverts](https://pi-hole.net), [run your own Netflix](https://jellyfin.org) and [plenty more](https://www.awesome-homelab.com/).

### Services

You could backup your devices and centralise storage with a NAS, then setup a VPN and connect to it from anywhere.

## How do I get one?

The biggest thing I want you to take away from this is that you already have one.

&gt; the homelab was inside you all along

Pretend for a moment you&#39;re a mad scientist, hacking away at some computery stuff. There are several blinking lights and a faint computery hum fills the air.

What kind of computery stuff did you imagine?

Did it involve loads of blinky lights? You might be interested in networking. I bought a [Ubiquiti switch](https://techspecs.ui.com/unifi/switching/unifi-flex-xg?s=uk) and it&#39;s way blinkier than my old one. It&#39;s also 10 times faster.

Did you see yourself coding? Maybe you could setup your own git server, add on CI/CD and get your apps hosted on your own network. That&#39;s what I&#39;m doing.

Or maybe you want to try out AI on your own hardware?

Whatever it is, you can probably get started right now with the things that you already have. You don&#39;t need to go and buy anything just yet. Start acting like a mad scientist doing computery stuff and eventually you&#39;ll become one.

When I wanted to learn about Docker images I used my own laptop. Then when I was given a Raspberry Pi I tested out running Docker images on that and so my homelab doubled in size.

I didn&#39;t realise it was called a homelab at the time. I was just doing computery stuff.

## My Homelab v0

**Macbook Pro** (2012)

**Raspberry Pi 1**

**Notebook**

**Pen** for writing it all down, otherwise it&#39;s not science.
</source:markdown></item>
  </channel>
</rss>
