# 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) Current status: **ALPHA** This project utilizes [Infrastructure as Code](https://en.wikipedia.org/wiki/Infrastructure_as_code) 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. ## 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] 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 - [ ] Monitoring and alerting 🚧 - [ ] Support multiple environments (dev, stag, prod) 🚧 - [ ] Automated offsite backups 🚧 - [ ] Single sign-on 🚧 Screenshots of some user-facing applications are shown here, I will update them before each release. They can't capture all of the project's features, but they are sufficient to get a concept of it. | ![](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
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
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
Distributed under the GPLv3 License. This project is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This project is distributed in the hope that it will be useful, but **WITHOUT ANY WARRANTY**; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this project (`LICENSE.md`). If not, see .
## Acknowledgements - [ArgoCD usage in my coworker's homelab](https://github.com/locmai/humble) - [README template](https://github.com/othneildrew/Best-README-Template) - [Run the same Cloudflare Tunnel across many `cloudflared` processes](https://developers.cloudflare.com/cloudflare-one/tutorials/many-cfd-one-tunnel) - [MAC address environment variable in GRUB config](https://askubuntu.com/questions/1272400/how-do-i-automate-network-installation-of-many-ubuntu-18-04-systems-with-efi-and) - [Official k3s systemd service file](https://github.com/k3s-io/k3s/blob/master/k3s.service) - [Official Cloudflare Tunnel examples](https://github.com/cloudflare/argo-tunnel-examples) - [Initialize GitOps repository on Gitea and integrate with Tekton by RedHat](https://github.com/redhat-scholars/tekton-tutorial/tree/master/triggers) ## Stargazers over time [![Stargazers over time](https://starchart.cc/khuedoan/homelab.svg)](https://starchart.cc/khuedoan/homelab)