OverviewHardwareDeploymentServicesData

My Homelab - Overview

What is a homelab?

Having a homelab is so many things at once for a computer scientist. It's a passion, a place for experimentation, a way to host services and regain control over your personal data... And of course, it's an excellent means of training.

Setting up such an infrastructure confronts us with the same challenges as a company:

  • Managing hardware investment: Hardware resources can be expensive, it's about thinking about your investment long-term and building a coherent hardware set.
  • Organizing resource usage: For a substantial homelab, this requires using a hypervisor (ESXi or Proxmox), and thinking about your organization.
  • Industrializing deployment and system/software updates: A software environment has a limited lifespan, so it needs to be updated regularly.
  • Monitoring your services: How do you monitor application performance, and our hardware usage?
  • Setting up a robust backup system: This is critical insurance against the risk of hardware failure or cyberattack. Setting up a robust backup system at scale requires a certain organization.
  • Cybersecurity: Personal data and hardware resources have value, and it's necessary to protect your system from external attacks.

My Homelab

I started building my homelab in 2022, the day I told myself "I'm tired of my dev PC and laptop being bulky and powerful, I'd rather pool computing power in one place and gain mobility".

Four years later, here's where I am:

Hardware:

pc-dev-malrickpvepve-2
RoleDevelopment workstationMain Proxmox nodeSecondary Proxmox node
CPUAMD Ryzen 7 5700G (8c/16t, 3.8 GHz)AMD Ryzen 9 9950X3D (16c/32t, 5.8 GHz)Intel Core i7-10700K (8c/16t, 5.1 GHz)
RAM32 GB64 GB32 GB
GPURTX 3060 TiRTX 5090 + RTX 5060 TiRTX 3090
Disk 1Samsung 970 EVO Plus 2 TB (NVMe)Samsung 9100 PRO 4 TB (NVMe)Kioxia 1 TB (NVMe)
Disk 2Crucial E100 2 TB (NVMe)Seagate 8 TB (HDD SATA)
Disk 3Toshiba 4 TB (HDD SATA)
Disk 4WD 8 TB (HDD SATA)

Hypervisor and Resource Organization:

After trying ESXi, I ultimately went with Proxmox, I currently have a 2-node cluster.

I provision a small number of VMs, giving them access to graphics cards via GPU Passthrough.

Deployment and Software Organization:

For my architecture, I separated applications, their configuration, and their state. Meaning that to deploy the architecture, a single command launches sequentially:

  • VM creation with Terraform (this provider)
  • VM provisioning with Ansible (Docker installation, Nvidia drivers, persistent disk attachment, certificate installation...)
  • Deployment of docker-compose stacks on the VMs

This makes the system much more robust. The state of the environment is no longer a sacred jewel you need to take care of, it's a disposable resource that you can adjust by changing a value in a configuration file.

Hosted Services:

These are the services actually hosted in the infra:

  • AI / LLM services: vLLM, Llama.cpp, LLM UI, Qdrant for embeddings, voice assistant...
  • DealTracker: This is my production. It's about collecting information and enriching it with Machine Learning.
  • Media services: Jellyfin, Navidrome, Kavita, Paperless-ngx...
  • Infrastructure management utilities: GitLab for hosting code, S3 for hosting datasets / ML models.

Monitoring Management:

To monitor my infra, I use the Prometheus / Grafana combo.

Backup System:

Since I'm using Proxmox anyway, I went with PBS (Proxmox Backup Server), and I apply the 3-2-1 rule (3 copies of data, 2 different locations, one off-site backup)