Skip to content
/ homelab Public

Modern self-hosting infrastructure, fully automated from empty disk to operating services with a single command.

License

Notifications You must be signed in to change notification settings

llajas/homelab

Repository files navigation

Lauren's Homelab

FeaturesGet StartedDocumentation

tag document license

This project utilizes Infrastructure as Code and GitOps approaches to automate provisioning, operating, and updating self-hosted services in my homelab. It can be used as a highly customizable framework to build your own homelab.

What is a homelab?

Homelab is a laboratory at home where you can self-host, experiment with new technologies, practice for certifications, and so on. For more information about homelab in general, see the r/homelab introduction.

Overview

Project status: ALPHA

This project is still in the experimental stage, and I don't use anything critical on it. Expect breaking changes that may require a complete redeployment. A proper upgrade path is planned for the stable release. More information can be found in the roadmap below.

Hardware

Hardware

  • 6 × Lenovo ThinkCentre M700:

    • CPU: Intel Core i5-6600T @ 2.70GHz
    • RAM: 16GB DDR4
    • SSD: 1TB
  • 1 x Unifi CloudKey Gen2+ (All Unifi software removed; base image and OS replaced with Debian Bookworm - Re-purposed as a bastion host for cluster initialization and management):

    • CPU: Octa-core Arm® Cortex®-A53 @2.2GHz
    • RAM: 3GB LPDDR3
    • SSD: 512GB
    • eMMC: 32GB
    • microSD: 64GB
  • 1 x Custom NAS (Network Attached Storage):

    • CPU: Intel Xeon E5-2699 v4 @ 2.20GHz
    • Motherboard: MSI X99A SLI PLUS
    • RAM: 128GB DDR4
    • HBA: LSI 9305-16i
    • Network:
      • 1 × X520-DA1 10GbE via SFP+ (Data Plane)
      • 1 × I218-V 1GbE (Management Plane)
    • SSD: 13TB (6.7TB usable via RAID10)
      • 13 × 1TB TEAMGROUP m2 SATA SSDs
    • HDD: 100TB (80TB usable)
      • 4 × 20TB Seagate Exos X22
      • 1 × 20TB Western Digital Red Plus (Parity)
    • GPU:
      • 1 x NVIDIA GeForce GTX 2060 12GB VRAM
      • 1 x NVIDIA GeForce GTX 2060 6GB VRAM

Virtual Nodes

  • 2 x qemu/kvm virtual machines (VMs) - Created and managed via Terraform in metal/virtual/
    • CPU: 6 vCPU (host-passthrough)
    • RAM: 16GB
    • HDD: 1TB
    • GPU: NVIDIA GeForce GTX 2060

Virtualization is done using KVM with Libvirt and QEMU. The virtual machines are provisioned and managed as Infrastructure as Code using Terraform with the Libvirt provider on top of the NAS hardware.

Features

  • Common applications: Gitea, Seafile, Jellyfin, Paperless...
  • Automated bare metal provisioning with PXE boot
  • Automated Kubernetes installation and management
  • Installing and managing applications using GitOps
  • Automatic rolling upgrade for OS and Kubernetes
  • Automatically update apps (with approval)
  • Modular architecture, easy to add or remove features/components
  • Automated certificate management
  • Automatically update DNS records for exposed services
  • VPN without port forwarding
  • Expose services to the internet securely with Cloudflare Tunnel
  • CI/CD platform
  • Private container registry
  • Distributed storage
  • Support multiple environments (dev, prod)
  • Monitoring and alerting 🚧
  • Automated offsite backups 🚧
  • Single sign-on
  • Infrastructure testing

Some demo videos and screenshots are shown here. They can't capture all the project's features, but they are sufficient to get a concept of it.

Demo
Deploy with a single command (after updating the configuration files)
PXE boot
Homepage with Ingress discovery powered by Hajimari
Monitoring dashboard powered by Grafana
Git server powered by Gitea
Matrix chat server
Continuous integration with Tekton
Continuous deployment with ArgoCD
Cluster management using Lens

Tech stack

Logo Name Description
Ansible Automate bare metal provisioning and configuration
ArgoCD GitOps tool built to deploy applications to Kubernetes
cert-manager Cloud native certificate management
Cloudflare DNS and Tunnel
Docker Ephemeral PXE server
Docker Registry Private container registry
ExternalDNS Synchronizes exposed Kubernetes Services and Ingresses with DNS providers
Fedora Server Base OS for Kubernetes nodes
Gitea Self-hosted Git service
Grafana Operational dashboards
Helm The package manager for Kubernetes
K3s Lightweight distribution of Kubernetes
Kubernetes Container-orchestration system, the backbone of this project
Loki Log aggregation system
Longhorn Cloud native distributed block storage for Kubernetes
MetalLB Bare metal load-balancer for Kubernetes
NGINX Kubernetes Ingress Controller
Nix Convenient development shell
Prometheus Systems monitoring and alerting toolkit
Renovate Automatically update dependencies
Tekton Cloud native solution for building CI/CD systems
ZeroTier VPN without port forwarding

Get Started

Roadmap

See roadmap and open issues from the original repo for a list of proposed features and known issues.

Contributing

Any contributions you make are greatly appreciated.

Please see contributing guide for more information.

License

Copyright © 2020 - 2025 Lauren Lajas - Based on khuedoan/homelab

Distributed under the GPLv3 License. See license page or LICENSE.md file for more information.

Acknowledgements

Based on work originating from khuedoan/homelab - Buy him a coffee!!

About

Modern self-hosting infrastructure, fully automated from empty disk to operating services with a single command.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 19