# Homelab This is my homelab set up, it focused on automation to simplify provisioning, upgrading, and operating self-hosted services. ```diff ! ⚠️ WORK IN PROGRESS ``` ## Overview ### Hardware ![Hardware](https://user-images.githubusercontent.com/27996771/98970963-25137200-2543-11eb-8f2d-f9a2d45756ef.JPG) - 4 nodes of 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 Status: **Alpha** - [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] Distributed storage - [ ] Monitoring and alerting 🚧 - [ ] Support multiple environments (dev, stag, prod) 🚧 - [ ] Automated offsite backups 🚧 - [ ] Single sign-on 🚧 See [Roadmap](#roadmap) for more details. ### Tech stack | Logo | Name | Description | | :------------------------------------------------------------------------------------------------------------------------------------: | :---------- | :-------------------------------------------------------------------------------------------- | | Ansible | Ansible | Automate bare metal provisioning and configuration | | ArgoCD | ArgoCD | GitOps tool built to deploy applications to Kubernetes | | Cloudflare | Cloudflare | DNS and Tunnel | | Docker | Docker | Ephermeral PXE server and convenient tools container | | Gitea | Gitea | Self-hosted Git service | | Grafana | Grafana | Operational dashboards | | Helm | Helm | The package manager for Kubernetes | | K3s | K3s | Lightweight distribution of Kubernetes | | Kubernetes | Kubernetes | Container-orchestration system, the backbone of this project | | Let's Encrypt | Let's Encrypt | Free, automated (via [cert-manager](https://cert-manager.io)), and open certificate authority | | Loki | Loki | Log aggregation system | | Longhorn | Longhorn | Cloud native distributed block storage for Kubernetes | | MetalLB | MetalLB | Bare metal load-balancer for Kubernetes | | NGINX | NGINX | Kubernetes Ingress Controller | | Prometheus | Prometheus | Systems monitoring and alerting toolkit | | Rocky Linux | Rocky Linux | Base OS for Kubernetes nodes | | Tekton | Tekton | Cloud native solution for building CI/CD systems | | Vault | Vault | Secrets and encryption management system | ## Get Started - [Try it out on a VM](https://homelab.khuedoan.com/try_on_a_vm) without any hardware - [Deploy on real hardware](https://homelab.khuedoan.com/deployment) for real workload ## Roadmap See [roadmap](https://homelab.khuedoan.com/roadmap) 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 Distributed under the GPLv3 License. See `LICENSE` for more information. ## 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)