# Khue's Homelab
[![chat](https://img.shields.io/matrix/homelab:matrix.khuedoan.com?style=flat-square&logo=matrix&logoColor=white&label=chat)](https://matrix.to/#/#homelab:matrix.khuedoan.com)
[![tag](https://img.shields.io/github/v/tag/khuedoan/homelab?style=flat-square&logo=semver&logoColor=white)](https://github.com/khuedoan/homelab/tags)
[![document](https://img.shields.io/website?label=document&logo=gitbook&logoColor=white&style=flat-square&url=https%3A%2F%2Fhomelab.khuedoan.com)](https://homelab.khuedoan.com)
[![license](https://img.shields.io/github/license/khuedoan/homelab?style=flat-square&logo=gnu&logoColor=white)](https://www.gnu.org/licenses/gpl-3.0.html)
[![stars](https://img.shields.io/github/stars/khuedoan/homelab?logo=github&logoColor=white&color=gold&style=flat-square)](https://github.com/khuedoan/homelab)
This project utilizes [Infrastructure as Code](https://en.wikipedia.org/wiki/Infrastructure_as_code) and [GitOps](https://www.weave.works/technologies/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.
Current status: **ALPHA**
## Overview
This section provides a high level overview of the project.
For further information, please see the [documentation](https://homelab.khuedoan.com).
### Hardware
![Hardware](https://user-images.githubusercontent.com/27996771/98970963-25137200-2543-11eb-8f2d-f9a2d45756ef.JPG)
- 4 × NEC SFF `PC-MK26ECZDR` (Japanese version of the ThinkCentre M700):
- CPU: `Intel Core i5-6600T @ 2.70GHz`
- RAM: `16GB`
- SSD: `128GB`
- TP-Link `TL-SG108` switch:
- Ports: `8`
- Speed: `1000Mbps`
### Features
Project status: **Alpha** (see [roadmap](#roadmap) below)
- [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](https://www.cloudflare.com/products/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.
They can't capture all of the project's features, but they are sufficient to get a concept of it.
| [![Deployment](https://asciinema.org/a/xkBRkwC6e9RAzVuMDXH3nGHp7.svg)](https://asciinema.org/a/xkBRkwC6e9RAzVuMDXH3nGHp7) |
| :--: |
| Deploy with a single command (after updating the config files of course) |
| [![PXE boot](https://user-images.githubusercontent.com/27996771/157303477-df2e7410-8f02-4648-a86c-71e6b7e89e35.png)](https://www.youtube.com/watch?v=y-d7btNNAT8) |
| :--: |
| PXE boot |
| ![](https://user-images.githubusercontent.com/27996771/149445807-0f869eb7-d8f5-4fef-ab97-ac281df91a06.png) |
| :--: |
| Homepage with Ingress discovery powered by [Hajimari](https://github.com/toboshii/hajimari) |
| ![](https://user-images.githubusercontent.com/27996771/149444871-38889c9d-862f-41ff-8c05-8ece21da3e9c.png) |
| :--: |
| Git server powered by [Gitea](https://gitea.io/en-us/) |
| ![](https://user-images.githubusercontent.com/27996771/149445374-58fd0605-bb9a-46e4-81d6-5e584d2b94a9.png) |
| :--: |
| Continuous integration with [Tekton](https://tekton.dev/) |
| ![](https://user-images.githubusercontent.com/27996771/149444716-fc0d7282-4cf7-4ddb-97a4-1a3fb47ff2b8.png) |
| :--: |
| Continuous deployment with [ArgoCD](https://argoproj.github.io/cd/) |
| ![](https://user-images.githubusercontent.com/27996771/149446631-1c5d056b-1fdc-48e6-96ba-e1abe1762be0.png) |
| :--: |
| Monitoring dashboard powered by [Grafana](https://grafana.com/) |
| ![](https://user-images.githubusercontent.com/27996771/149448510-7163310c-2049-4ccd-901d-f11f605bfc32.png) |
| :--: |
| [Matrix](https://matrix.org/) chat server powered by [Element](https://matrix.org/docs/projects/client/element) and [Dendrite](https://matrix.org/docs/projects/server/dendrite) |
| ![](https://user-images.githubusercontent.com/27996771/149448896-9d79947d-468c-45c6-a81d-b43654e8ab6b.png) |
| :--: |
| Cluster management using [Lens](https://k8slens.dev/) (or you can just use `kubectl`) |
| ![](https://user-images.githubusercontent.com/27996771/149452309-de4a893b-e94c-4ba8-9119-ea87449cf77e.png) |
| :--: |
| Secret management with [Vault](https://www.vaultproject.io/) |
### 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 |
|
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 |
|
Rocky Linux |
Base OS for Kubernetes nodes |
|
Tekton |
Cloud native solution for building CI/CD systems |
|
Trow |
Private container registry |
|
Vault |
Secrets and encryption management system |
## Get Started
- [Try it out on a VM](https://homelab.khuedoan.com/try-on-a-vm.html) without any hardware
- [Deploy on real hardware](https://homelab.khuedoan.com/deployment) for real workload
## Roadmap
See [roadmap](https://homelab.khuedoan.com/roadmap.html) and [open issues](https://github.com/khuedoan/homelab/issues) for a list of proposed features and known issues.
## Contributing
Any contributions you make, either big or small, are greatly appreciated.
## License
> Copyright (c) 2020, 2021, 2022 Khue Doan