homelab
homelab copied to clipboard
Fully automated homelab from empty disk to running services with a single command.
Khue's Homelab
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?
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
- 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-SG108
switch:- Ports:
8
- Speed:
1000Mbps
- Ports:
Features
- [x] Common applications: Gitea, Seafile, Jellyfin, Paperless...
- [x] Automated bare metal provisioning with PXE boot
- [x] Automated Kubernetes installation and management
- [x] Installing and managing applications using GitOps
- [x] Automatic rolling upgrade for OS and Kubernetes
- [x] Automatically update apps (with approval)
- [x] Modular architecture, easy to add or remove features/components
- [x] Automated certificate management
- [x] Automatically update DNS records for exposed services
- [x] Expose services to the internet securely with Cloudflare Tunnel
- [x] CI/CD platform
- [x] Private container registry
- [x] Distributed storage
- [x] Support multiple environments (dev, prod)
- [ ] Monitoring and alerting 🚧
- [ ] Automated offsite backups 🚧
- [ ] Single sign-on 🚧
Some demo videos and screenshots are shown here (click to enlarge). 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) | 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 | Secret management with Vault |
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 | Ephermeral 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 | |
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 | |
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 |
Get Started
- Try it out locally without any hardware (just 4 commands!)
- Deploy on real hardware for production workload
Roadmap
See roadmap and open issues 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 - 2022 Khue Doan
Distributed under the GPLv3 License.
See license page or LICENSE.md
file for more information.
Acknowledgements
References:
- ArgoCD usage and monitoring configuration in locmai/humble
- README template
-
Run the same Cloudflare Tunnel across many
cloudflared
processes - 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
Here is a list of the contributors who have helped to improve this project. Big shout-out to them!
-
@locmai
-
@MatthewJohn
-
@karpfediem
-
@linhng98
-
@BlueHatbRit
-
@dotdiego
-
@Crimrose
-
@eventi
-
@Bourne-ID
-
@akwan
If you feel you're missing from this list, feel free to add yourself in a PR.