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?
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.
- 4 × NEC SFF
PC-MK26ECZDR(Japanese version of the ThinkCentre M700):
Intel Core i5-6600T @ 2.70GHz
- 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.
|Deploy with a single command (after updating the configuration files)|
|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|
|Secret management with Vault|
|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 and convenient tools container|
|ExternalDNS||Synchronizes exposed Kubernetes Services and Ingresses with DNS providers|
|Fedora Server||Base OS for Kubernetes nodes|
|Gitea||Self-hosted Git service|
|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|
|Prometheus||Systems monitoring and alerting toolkit|
|Renovate||Automatically update dependencies|
|Tekton||Cloud native solution for building CI/CD systems|
|Trow||Private container registry|
|Vault||Secrets and encryption management system|
|ZeroTier||VPN without port forwarding|
- Try it out locally without any hardware (just 4 commands!)
- Deploy on real hardware for production workload
Any contributions you make are greatly appreciated.
Please see contributing guide for more information.
Copyright © 2020 - 2022 Khue Doan
Distributed under the GPLv3 License.
See license page or
LICENSE.md file for more information.
- 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
- 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
Here is a list of the contributors who have helped to improve this project. Big shout-out to them!
If you feel you're missing from this list, feel free to add yourself in a PR.