Modern self-hosting framework, fully automated from empty disk to operating services with a single command.
Go to file
2022-07-21 01:58:00 +07:00
.tekton style: fix YAML lint 2022-05-14 21:36:41 +07:00
apps style: fix YAML lint 2022-05-14 21:36:41 +07:00
bootstrap style: fix shellcheck 2022-07-21 01:58:00 +07:00
docs docs: rename development environment to sandbox 2022-07-20 23:00:39 +07:00
external refactor(docs): migrate to mkdocs (#68) 2022-07-06 12:33:35 +07:00
metal refactor(metal): migrate to Fedora 36 for newer packages (#73) 2022-07-20 22:49:12 +07:00
platform fix: skip new config job run if previous job run hasn't finished yet 2022-07-20 23:12:01 +07:00
scripts style: fix shellcheck 2022-07-21 01:58:00 +07:00
system chore(longhorn): upgrade to latest v1.3.0 for bug fixes 2022-07-20 23:44:41 +07:00
tools feat: add pre-commit hooks 2022-07-19 21:16:19 +07:00
.gitattributes style: do not detect YAML files 2021-12-25 19:54:26 +07:00
.gitignore refactor!: switch dev environment from Vagrant to k3d 2022-04-04 03:21:42 +07:00
.pre-commit-config.yaml feat: add pre-commit hooks 2022-07-19 21:16:19 +07:00
.yamllint.yaml style: add yamllint rules 2021-12-26 12:19:05 +07:00
LICENSE.md style: convert LICENSE to Markdown 2021-11-18 00:35:38 +07:00
Makefile feat: add pre-commit hooks 2022-07-19 21:16:19 +07:00
mkdocs.yml docs: rename development environment to sandbox 2022-07-20 23:00:39 +07:00
README.md docs: rename development environment to sandbox 2022-07-20 23:00:39 +07:00
renovate.json5 chore(renovate): update config 2022-01-28 01:05:36 +07:00

Khue's Homelab

FeaturesGet StartedDocumentation

tag document license stars

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.

Overview

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.

Hardware

Hardware

  • 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

  • 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
  • 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 🚧

Some demo videos and screenshots are shown here (click to enlarge). They can't capture all the project's features, but they are sufficient to get a concept of it.

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

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
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

Get Started

Roadmap

See roadmap and open issues for a list of proposed features and known issues.

Contributing

Any contributions you make are greatly appreciated.

Please see contributing guide for more information.

License

Copyright © 2020 - 2022 Khue Doan

Distributed under the GPLv3 License. See license page or LICENSE.md file for more information.

Acknowledgements

References:

Here is a list of the contributors who have helped to improve this project. Big shout-out to them!

If you feel you're missing from this list, feel free to add yourself in a PR.

Stargazers over time

Stargazers over time