Modern self-hosting framework, fully automated from empty disk to operating services with a single command.
Go to file
2021-07-02 19:08:25 +07:00
.github/ISSUE_TEMPLATE Revert "Move issue template to docs folder" 2021-06-27 16:26:10 +07:00
apps Fix cloudflared chart value syntax 2021-06-27 18:40:09 +07:00
docs Use mdbook (from the Rust project) for documentation 2021-07-02 19:08:25 +07:00
infra Enable ArgoCD ingress 2021-06-27 15:29:49 +07:00
metal Revert "Use 7z instead of xorriso to extract the ISO file" 2021-06-26 22:55:55 +07:00
scripts Add pre-commit hook 2021-06-14 17:24:08 +07:00
tools Use mdbook (from the Rust project) for documentation 2021-07-02 19:08:25 +07:00
.drone.yml Fix wrong drone pipeline kind 2021-06-27 05:37:10 +07:00
.gitattributes Add git attributes 2021-05-16 14:55:08 +07:00
.gitignore Use mdbook (from the Rust project) for documentation 2021-07-02 19:08:25 +07:00
LICENSE Create LICENSE 2021-02-12 21:29:21 +07:00
Makefile Add pre-commit hook 2021-06-14 17:24:08 +07:00
README.md Add optional Cloudflare Tunnel instruction 2021-06-27 15:41:06 +07:00

Homelab

! ⚠️ WORK IN PROGRESS

Hardware

Hardware

  • 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

Architecture

Provision

A single make command will automatically:

  • Build the ./metal layer:
    • Create an ephemeral, stateless PXE server
    • Install Linux on all servers in parallel
  • Build the ./infra layer:
  • Build the ./apps layer:
    • Kustomize creates Argo applications
    • ArgoCD install those applications

Visit the README file for each layer to learn more.

Layer Description Provisioner
metal Bare metal OS installation, Terraform state backend,... Ansible, PXE server
infra Kubernetes cluster Terraform, Helm
apps Gitea, Vault and more in the future Kustomize, ArgoCD, Helm

Get Started

Prerequisite

For the controller (your laptop or desktop):

  • SSH keys in ~/.ssh/{id_ed25519,id_ed25519.pub} (you can generate it with ssh-keygen -t ed25519)
  • Docker with host networking driver (which means only Docker on Linux hosts, you can use a Linux virtual machine with bridged networking if you're on macOS or Windows)

For bare metal nodes:

  • PXE IPv4 enabled
  • Wake-on-LAN enabled and boot to network mode by default if turned on via Wake-on-LAN
  • Secure boot disabled (optional, depending on the OS)
  • Note their MAC addresses

Configurations

Change these configuration files to match your hardware and network setup:

Build

Open the tools container:

make tools

Then build the homelab:

make

Optionally create a Cloudflare Tunnel to expose your services to the internet if you don't have port forwarding.

Roadmap

See to-do list, roadmap and open issues for a list of proposed features and known issues.

Contributing

Any contributions you make are greatly appreciated (feature, bug fixes, documentation, grammar or typo fix...).

License

Distributed under the GPLv3 License. See LICENSE for more information.

Technology stack


Ansible

Cloudflare

Docker

Fedora

Gitea

Helm

Kubernetes

Prometheus

Rancher

Terraform

Vault

Wireguard

Acknowledgements