# 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] 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 | Automate bare metal provisioning and configuration |
| | ArgoCD | GitOps tool built to deploy applications to Kubernetes |
| | 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 |
| | Let's Encrypt | Free, automated (via [cert-manager](https://cert-manager.io)), and open certificate authority |
| | 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 |
| | 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)
## Stargazers over time
[![Stargazers over time](https://starchart.cc/khuedoan/homelab.svg)](https://starchart.cc/khuedoan/homelab)