mirror of
https://github.com/khuedoan/homelab.git
synced 2025-01-07 14:03:01 +07:00
Modern self-hosting framework, fully automated from empty disk to operating services with a single command.
ansibleargocddevopsdockerfedoragitopshelmhomelabk3sk8s-at-homekubernetesnetbootpxeself-hostingterraform
apps | ||
docs | ||
infra | ||
metal | ||
scripts | ||
tools | ||
.gitattributes | ||
.gitignore | ||
LICENSE | ||
Makefile | ||
README.md |
Homelab
⚠️ WORK IN PROGRESS
Hardware
- 4 nodes of NEC SFF PC
PC-MK26ECZDR
(Japanese version of the ThinkCentre M700)- CPU: Intel Core i5-6600T
- RAM: 16GB
- SSD: 128GB
- TP-Link TL-SG108 switch
Technology stack
Ansible |
Cloudflare |
Docker |
Fedora |
Gitea |
Helm |
Kubernetes |
Prometheus |
Rancher |
Terraform |
Vault |
Wireguard |
Architecture
Quick explanation
- Enter the tools container, which contains all the neccessary tools (see building instruction bellow)
- Run
make
- Ansible will render the configuration file for each bare metal machine (like IP, hostname...) and the PXE server from templates
- The tools container will create sibling containers to build a PXE server (includes DHCP, TFTP and HTTP server)
- Ansible will wake the machines up using Wake on LAN
- The machine start the boot process:
- BIOS boot in network mode and look for DHCP server
- DHCP server point it to the TFTP server to get boot files and boot config
- The boot config contains parameter to get automated OS installation config file
- The OS get installed and the machine reboots to the new operating system
- Terraform will create a Kubernetes cluster
- ArgoCD will install the applications
Layers
Layer | Name | Description | Provisioner |
---|---|---|---|
0 | metal | Bare metal OS installation, Terraform state backend,... | Ansible, PXE server |
1 | infra | Kubernetes clusters | Terraform, Helm |
2 | apps | Gitea, Vault and more in the future | Argo |
Usage
Prerequisite
For the controller (to run Ansible, stateless PXE server, Terraform...):
- SSH keys in
~/.ssh/{id_ed25519,id_ed25519.pub}
(you can generate it withssh-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
- Secure boot disabled (optional, depending on the OS)
Configurations
- Bare metal nodes settings (IP, MAC...)
- OS settings (PXE, network...)
Building
Open the tools container:
make tools
Then build the homelab:
make