I always wanted to have a homelab, where I can host applications and tinker with things. That dream has slowly materialized over the years, and I would like to showcase it here.

So currently, all my applications run on my Arch Linux machines. I am using Arch Linux mainly because I have spent considerable amount of time customising it. I learned Linux with Arch, and gained knowledge of systemd, the Linux filesystem, and manual package management via pacman. And as it has worked well for me all this time, I believe, “If it ain’t broke, don’t fix it”.

Hardware

Spec Machine 1 Machine 2
Model Dell Precision 7540
OS Arch Linux Arch Linux
CPU Intel Core i7-9750H @ 12x 4.5GHz AMD Ryzen 7 7800X3D (16) @ 5.053GHz
RAM 32GB 32GB
Storage 1TB NVME 1TB NVME at PCIe 4.0
GPU AMD ATI Radeon PRO WX 3200 AMD ATI Radeon RX 7800 XT

Networking

  • ISP & Bandwidth: I have a 200 Mbps Airtel Fiber connection, which surprisingly doesn’t have a CG-NAT (Carrier Grade NAT). It gives me a public IP for the router.
  • VPN: On the VPN front, I have set up Tailscale. I am planning to use Headscale for the control plane, but those plans haven’t materialized yet.

Apps

Now, let’s get to the applications part. I have all my applications running in Docker containers.

App Host Usage What it does
Nginx Machine 1 Daily Managed via NGINX UI, a web interface for NGINX configs. That is how I manage SSL and reverse-proxy domain names.
Jellyfin Machine 1 Daily Has access to the Media directory and monitors it for changes, indexing any new DRM-free media it detects. My most-used service.
qBittorrent Machine 1 Frequent Download directory is set to the shared media directory, so everything it downloads automatically appears in Jellyfin’s library.
Miniflux Machine 1 Frequent RSS subscription manager: it fetches feeds periodically and stores state in Postgres. Accessible via the Fever API or its own web endpoint.
Excalidraw Machine 1 Occasional Quick diagrams and sketches.
Immich Machine 2 Rare Self-hosted photo backup.

Other services

There are a bunch of other services. I can mention a few of them. One is the service which downloads my local newspaper in a PDF format. It basically scrapes Amazon S3 for the day. This newspaper stores images on S3 in plain text, and where the filename is the date with the edition name. So I just download those images and stitch them together to form a page and create a PDF from it.

Name Resolution

I use Cloudflare for DNS, and all my machines which are exposed over Tailscale have their internal IP addresses mapped to domain names. E.g., the Arch Linux machine has a Tailscale IP address, and I have put that Tailscale IP address on my DNS records, so I can easily reach them using domain names.

Monitoring

  • Prometheus: I run Prometheus with Node Exporter on my primary Arch Linux machine.
  • Grafana: I have a Grafana instance on an Oracle Cloud VM. The data from Prometheus is plotted on Grafana over the Oracle Cloud machine, and it tracks CPU usage, network usage, and a bunch of other parameters, which help me diagnose issues with my connection or my server.

Grafana dashboard tracking CPU and network usage

  • SmokePing: I have also been running SmokePing for about three to four years now, and it helps me diagnose network issues or spot whether my hosts have been up or down.

SmokePing latency graphs

That’s the tour of my home lab. Hope it helps!