My Homelab Setup
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.

- 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.

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