Special thanks to Khue for his awesome work at this homelab stack. This Readme is still based on his upstream, but will get updated with my own stuff over time.
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.
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):- CPU:
Intel Core i5-6600T @ 2.70GHz
- RAM:
16GB
- SSD:
128GB
- CPU:
- TP-Link
TL-SG108
switch:- Ports:
8
- Speed:
1000Mbps
- Ports:
- 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 |
Secret management with Vault |
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 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 | |
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 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 - 2022 Khue Doan
Distributed under the GPLv3 License.
See license page or LICENSE.md
file for more information.
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
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
- 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!
- @locmai
- @MatthewJohn
- @karpfediem
- @linhng98
- @BlueHatbRit
- @dotdiego
- @Crimrose
- @eventi
- @Bourne-ID
- @akwan
- @trangmaiq
If you feel you're missing from this list, feel free to add yourself in a PR.