Features • Get Started • Documentation
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.
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.
-
6 × Lenovo
ThinkCentre M700
:- CPU:
Intel Core i5-6600T @ 2.70GHz
- RAM:
16GB DDR4
- SSD:
1TB
- CPU:
-
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
- CPU:
-
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)
- 1 ×
- SSD:
13TB
(6.7TB
usable via RAID10)- 13 ×
1TB
TEAMGROUP m2 SATA SSDs
- 13 ×
- HDD:
100TB
(80TB
usable)- 4 ×
20TB
Seagate Exos X22 - 1 ×
20TB
Western Digital Red Plus (Parity)
- 4 ×
- GPU:
- 1 x
NVIDIA GeForce GTX 2060
12GB VRAM - 1 x
NVIDIA GeForce GTX 2060
6GB VRAM
- 1 x
- CPU:
- 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
- CPU:
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.
- 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 |
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 |
- Try it out locally without any hardware (just 4 commands!)
- Deploy on real hardware for production workload
See roadmap and open issues from the original repo for a list of proposed features and known issues.
Any contributions you make are greatly appreciated.
Please see contributing guide for more information.
Copyright © 2020 - 2025 Lauren Lajas - Based on khuedoan/homelab
Distributed under the GPLv3 License.
See license page or LICENSE.md
file for more information.
Based on work originating from khuedoan/homelab - Buy him a coffee!!