Intro

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

  • Machine 1

    • Model: Dell Precision 7540
    • OS: Arch Linux
    • CPU: Intel Core i7-9750H @ 12x 4.5GHz
    • RAM: 32GB
    • Storage: 1TB NVME
    • GPU: AMD ATI Radeon PRO WX 3200
  • Machine 2

    • OS: Arch Linux
    • CPU: AMD Ryzen 7 7800X3D (16) @ 5.053GHz
    • RAM: 32GB
    • Storage: 1TB NVME at PCIe4.0
    • GPU: 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

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

  • Nginx

    • Host: Machine1
    • Usage: Daily
    • I use NGINX UI. It provides a user interface for managing NGINX configurations of different websites. That is how I manage SSL and reverse proxy domain names and such.
  • Jellyfin

    • Host: Machine1
    • Usage: Daily
    • The most frequently used one is Jellyfin. Jellyfin has access to the Media directory on the machine. All my DRM-free Media is downloaded into this directory, and Jellyfin monitors that directory for any changes. Whenever there is a new media file detected, it indexes it.
  • Excalidraw

    • Host: Machine1
    • Usage: Occassional
  • Miniflux

    • Host: Machine1
    • Usage: Frequent
    • It’s a RSS reader, or rather a RSS subscription manager of where it will fetch RSS feeds on behalf of you periodically and store the state in postgres. You can also access Miniflux using the Feverr API or you can directly visit Miniflux’s web endpoint to see the RSS feeds.
  • Qbittorrent

    • Host: Machine1
    • Usage: Frequent
    • I have configured to set the download directory as the media directory, which I have shared with Jellyfin. So all the files that qBittorrent downloads on this specific instance—they automatically appear in Jellyfin’s media directory.
  • Immich

    • Host: Machine2
    • Usage: Rare

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 scapes 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 use Prometheus with Node Exporter on my Arch Linux machine—the primary one. alt text

  • Grafana: I have a Grafana instance hosted on Oracle Cloud on a VM. So the data from the Prometheus is plotted on Grafana over the Oracle Cloud machine, and it tracks all the CPU usage, the network usage, and a bunch of other parameters, which help me diagnose issues with my connection or my server.

  • SmokePing I also have been running SmokePing for about three to four years now, and it also helps me diagnose issues with the network or if my hosts have been up or down, etc. alt text

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