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 and some install some Helm chart for bootstrap
- 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 | ArgoCD |
Get Started
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 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:
- Bare metal nodes settings (IP, MAC...)
- OS settings (PXE, network...)
Build
Open the tools container:
make tools
Then build the homelab:
make
Roadmap
See 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.