Features • Get Started • Documentation
This project utilizes Infrastructure as Code and GitOps 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?
A homelab is a laboratory at home where you can self-host, experiment with new technologies, practice for certifications, and so on. For more information, please see the r/homelab introduction and the Home Operations Discord community (formerly known as k8s-at-home).
If you encounter an issue, please create a bug report (avoid asking for support about issues specific to this project in other communication channels).
Project status: BETA
I've been using it to self-host personal apps for a few years now, but it's not stable yet. Expect breaking changes during upgrades. More information can be found in the roadmap below.
- 4 × NEC SFF
PC-MK26ECZDR(Japanese version of the ThinkCentre M700):- CPU:
Intel Core i5-6600T @ 2.70GHz - RAM:
16GB - SSD:
128GB
- CPU:
- TP-Link
TL-SG108switch:- Ports:
8 - Speed:
1000Mbps
- Ports:
And yes, I'm still using these 10-year-old mini PCs in 2026. You don't need much to self-host :)
- Common applications: Forgejo, Immich, OpenCloud, Matrix...
- Automated bare metal provisioning with PXE boot
- Automated Kubernetes installation and management
- Installing and managing applications using GitOps
- Automatic OS rolling upgrade
- Automated version update (with approval)
- Modular architecture, easy to add or remove features/components
- Automated certificate management
- Automatically update DNS records for exposed services
- VPN (Tailscale or WireGuard)
- Expose services to the internet securely with Cloudflare Tunnel
- CI/CD platform
- Private container registry
- Distributed storage
- Support multiple environments (staging, production)
- Monitoring and alerting
- Automated backup and restore
- 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 |
| Observe network traffic with Kiali |
| Homepage powered by... Homepage |
| Monitoring dashboard powered by Grafana |
| Git server powered by Forgejo |
| Matrix chat (FluffyChat UI) |
| Photo library powered by Immich |
| File storage powered by OpenCloud |
| Container registry powered by Zot |
| Continuous integration with Woodpecker CI |
| Continuous deployment with ArgoCD |
| Single sign-on powered by Kanidm |
| ntfy displaying received alerts |
| Logo | Name | Description |
|---|---|---|
| Argo CD | GitOps tool built to deploy applications to Kubernetes | |
| cert-manager | Cloud native certificate management | |
| Cloudflare | DNS, Tunnel and R2 for OpenTofu state | |
| ExternalDNS | Synchronizes exposed Kubernetes Services and HTTPRoutes with DNS providers | |
| Forgejo | Self-hosted Git service | |
| Go | Infrastructure tests with Go | |
| Grafana | Observability platform | |
| Helm | The package manager for Kubernetes | |
| Istio | Kubernetes service mesh and gateway | |
| K3s | Lightweight distribution of Kubernetes | |
| Kanidm | Modern and simple identity management platform | |
| kube-vip | Provides virtual IPs and load balancer for the Kubernetes API and Services | |
| Kubernetes | Container-orchestration system, the backbone of this project | |
| Loki | Log aggregation system | |
| NixOS / Nix | Base OS and convenient development shell | |
| Nixie | Open-source bare metal provisioning engine for NixOS | |
| OpenBao | Secrets management | |
| OpenTofu | Open-source Infrastructure as Code | |
| Prometheus | Systems monitoring and alerting toolkit | |
| Renovate | Automatically update dependencies | |
| Rook Ceph | Cloud-Native Storage for Kubernetes | |
| Terragrunt | Coordinate OpenTofu modules | |
| Velero | Backs up and restores Kubernetes | |
| Woodpecker CI | Simple yet powerful CI/CD engine with great extensibility | |
| Zot Registry | Private container registry |
- Deploy on real hardware for production workloads
See the roadmap and open issues for a list of proposed features and known issues.
Any contributions you make are greatly appreciated.
Please see the contributing guide for more information.
Copyright © 2020 - 2026 Khue Doan
Distributed under the GPLv3 License.
References:
- Ephemeral PXE server inspired by Minimal First Machine in the DC
- ArgoCD usage and monitoring configuration in locmai/humble
- README template
- Run the same Cloudflare Tunnel across many
cloudflaredprocesses - MAC address environment variable in GRUB config
- Official k3s systemd service file
- Official Cloudflare Tunnel examples
- Initialize GitOps repository on Gitea and integrate with Tekton by RedHat
- SSO configuration from xUnholy/k8s-gitops
- Pre-commit config from k8s-at-home/flux-cluster-template
- Diátaxis technical documentation framework
- Official Terratest examples
- Self-host an automated Jellyfin media streaming stack
- App Template Helm chart by bjw-s
- Various application configurations in onedr0p/home-ops
Here is a list of the contributors who have helped to improve this project. Big shout-out to them!
@locmai
@MatthewJohn
@karpfediem
@linhng98
@elliotblackburn
@dotdiego
@Crimrose
@eventi
@Bourne-ID
@akwan
@trangmaiq
@tangowithfoxtrot
@raedkit
@ClashTheBunny
@retX0
@zalsader
@serpro69
@llajas
@zalsader
If you feel you're missing from this list, please feel free to add yourself in a PR.