Modern self-hosting framework, fully automated from empty disk to operating services with a single command.
Go to file
Elliot Blackburn cf94f761c4
docs(external): add Terraform Cloud workspace instruction (#44)
* Add note regarding terraform cloud execution mode

When configuring a workspace in Terraform Cloud, the execution mode defaults to "Remote". This is problematic for two reasons:
1. We use local files that are not in the terraform plan directory. This creates errors about being unable to local files where it is not immediately obvious why.
2. The remote (cloud) runner won't be able to access the kube cluster running on the internal network anyway, so any plan application will fail.

* Detail terraform cloud workspace setup
2022-02-15 08:32:29 +07:00
.tekton build: remove tools container build in pipeline 2022-01-30 15:11:11 +07:00
apps refactor(blog)!: move blog to khuedoan/horus 2022-02-09 19:05:09 +07:00
bootstrap fix(bootstrap): add missing revision in template 2022-02-09 19:02:59 +07:00
docs docs(tutorials): ensure add new nodes at the end of the group 2022-02-13 09:10:34 +07:00
external docs(external): add Terraform Cloud workspace instruction (#44) 2022-02-15 08:32:29 +07:00
metal fix: use ip lease range based on network cidr (#41) 2022-02-13 10:00:27 +07:00
platform chore(deps): update all non-major dependencies 2022-01-31 23:21:52 +07:00
scripts fix(scripts): add .tekton to replace domain list (#19) 2022-01-23 08:10:13 +07:00
system fix(loki): fix value ref 2022-02-13 08:50:52 +07:00
tools fix(tools): install missing OpenSSH 2022-02-06 09:03:38 +07:00
.gitattributes style: do not detect YAML files 2021-12-25 19:54:26 +07:00
.gitignore docs: use PNG instead of JPEG for diagrams 2022-02-02 09:02:30 +07:00
.yamllint.yaml style: add yamllint rules 2021-12-26 12:19:05 +07:00
configure.py feat(configure): quick and dirty Terraform workspace replace 2022-02-01 00:57:23 +07:00
LICENSE.md style: convert LICENSE to Markdown 2021-11-18 00:35:38 +07:00
Makefile chore: cleanup lint targets 2021-12-27 11:36:47 +07:00
README.md docs: update project description 2022-02-13 09:14:18 +07:00
renovate.json5 chore(renovate): update config 2022-01-28 01:05:36 +07:00

Khue's Homelab

chat tag document license stars

Current status: ALPHA

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.

Overview

This section provides a high level overview of the project. For further information, please see the documentation.

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

Project status: Alpha (see roadmap below)

  • Common applications: Gitea, Seafile, Jellyfin, Paperless...
  • Automated bare metal provisioning with PXE boot
  • Automated Kubernetes installation and management
  • Installing and managing applications using GitOps
  • 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, stag, prod)
  • Monitoring and alerting 🚧
  • 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.

Homepage with Ingress discovery powered by Hajimari
Git server powered by Gitea
Continuous integration with Tekton
Continuous deployment with ArgoCD
Monitoring dashboard powered by Grafana
Matrix chat server powered by Element and Dendrite
Cluster management using Lens (or you can just use kubectl)
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
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

Roadmap

See roadmap and open 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 https://www.gnu.org/licenses.

Acknowledgements

Stargazers over time

Stargazers over time