Skip to content

hilmoo/homelab

Repository files navigation

Header

homelab

How I built my homelab

Platform
Proxmox Debian Kubernetes Docker
Tooling
Nix Flux Ansible Task Renovate

Overview

Servers

My servers mostly run inside Proxmox with Debian as the OS. You can check my ansible code to see how I deploy the VMs.

All my services are containerized, using Docker Compose or orchestrated with Kubernetes.

Some highlighted components of the stack:

  1. K3s as the K8s distribution I use
  2. Flux as my GitOps solution for Kubernetes
  3. Bitwarden Secrets Manager for storing my secrets and consuming them programmatically
  4. Ansible to deploy new VMs inside Proxmox
  5. Renovate to keep my services always up to date

IoT

hilmoo/homelab-iot

External Services

I decided not to self-host all my infra because some of the services need near-perfect reliability.

Service Purpose Why
Bitwarden Secrets Storing Secrets Self-hosting this creates a chicken-and-egg problem during recovery
OneDrive Storing backups They offer a good price compared to other solutions
GitHub Hosting code The most popular hosted Git service with many free benefits
Grafana Storing logs and metrics They offer enough features for me
Biznet Gio Routing Public Traffic One of the most affordable providers with good service in my country

Yearly Recap

2025

Tech Stack Wrap
2025-homelab.hilmo.dev

2025 Tech Stack
Linkedin

2025 Wrap

Hardware

Server

Device CPU RAM
Storage
Purpose
Lenovo ThinkCentre M720Q Intel i5 8600T 2x16GB DDR4 SODIMM 1x250GB SATA SSD, 1x240GB NVMe Main Server
Lenovo ThinkCentre M710Q Intel i5 7500T 1x8GB DDR4 SODIMM 1x128GB SATA SSD Home Assistant Server

Getting Started

To build a similar homelab, I highly recommend starting with the official documentation for each component in the stack. Use my infra as reference only.

Design Decisions

The infrastructure I used, especially the configuration inside the kubernetes folder, is highly tuned for my low-resource environment. My Kubernetes cluster is also not HA (High Availability), it contains only a single Control Plane and two Agents.

  1. Disabled Services: I disable several embedded K3s services to save resources. Check the list here.
  2. Custom DNS: I use a custom DNS configuration to ensure resolution availability even if half of my nodes die. Check the manifest here.
  3. Storage: I primarily use hostPath volumes to avoid the overhead of distributed storage solutions.
  4. Scheduling: I extensively use nodeSelector in manifests to manually control which nodes handle high-resource workloads.

About

How I built my homelab

Resources

License

Stars

Watchers

Forks

Contributors