Migration, Containers and … It’s always DNS, really

As I wrote in my previous post, I have a new member in the home server environment: The Lenovo ThinkCenter Mini Computer! Right after getting Ubuntu up and running on it, I began the process of easing the workload on my . PiHole had been flagging high CPU load a couple of times already, especially when Jellyfin was streaming media and performing its usual tasks.

The target was clear: keep PiHole on the Pi and move the heavier services to the Lenovo. But I also didn’t simply want to migrate the services. I also wanted to improve the setup …

Setup with a plan

Before I just started installing stuff, I made some “design choices”:

  • I decided to now set up everything in containers. Jellyfin, for example was installed directly on the PI. It worked very well – but I wanted a more controlled environment for it.
  • I wanted to have a hostname for each service instead of port numbers that I forgot a minute after setting up a service.
  • Everything should be settled in /opt/ instead some user home or installed directly
  • I wanted to have a graphical overview like Docker on the Desktop

It’s always DNS

First problem: how to get Hostnames to work with FritzBox and PiHole!
The FritzBox supports assigning Hostnames to clients, but only one per client and only one level. I wanted to have http://.

In the end the solution was to

  • add the hostnames in piHole under “Settings > Local DNS Settings” AND
  • set the DNS server in the fritzbox for both IPv4 AND IPv6 (before I had only set IPv4)

Honestly, ChatGPT was quite some help in debugging what was going wrong.

Containers everywhere & Use AI wisely

Once I had figured that out, I began setting up the server. Once again, I used ChatGPT and Mistral to create the initial versions of the docker compose files. I really enjoyed receiving suggestions and learnt a lot from them. — And this time, I added all the configs to git versioning, so that I was save to play around with configs!

Then the following services were configured:

  • #traefik for routing all requests on port 80 to the according containers. I was concerned about setting it up. But with ChatGPT & Mistral, it was amazingly fast.
  • Started #portainer. I knew that I was about to start quite some containers and I wanted some more overview than I had before.
  • Transferred #navidrome to the new host.
  • Moved #jellyfin from installation to docker setup. This was a bit of a hazzle until I had figured out where to copy which directory. “Thanks” ChatGPT to false guide me here!
  • Made remote runner a permanent resident on the server – finally. Before this, I had always started the runner directly on my PC as it was too heavy for the Pi.
  • Finally also made a static index page served via #nginx so that I don’t have to remember what’s running under which hostname. Here, ChatGPT guided me into the right (simple) direction because I would have overcomplicated things

That’s it for now! Next to come might be wanderer.to and netdata.

Leave a Reply

Your email address will not be published. Required fields are marked *