{"id":29416373,"url":"https://github.com/reneruprecht/homelab","last_synced_at":"2026-01-20T16:26:13.098Z","repository":{"id":303663232,"uuid":"1008440342","full_name":"ReneRuprecht/homelab","owner":"ReneRuprecht","description":"Kubernetes, Proxmox, Terraform, Ansible, IAC, Gitops, Fluxcd","archived":false,"fork":false,"pushed_at":"2025-07-08T19:40:07.000Z","size":70,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-08T19:52:10.934Z","etag":null,"topics":["ansible","fluxcd","gitops","kubernetes","proxmox","terraform"],"latest_commit_sha":null,"homepage":"","language":"HCL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ReneRuprecht.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-25T14:46:25.000Z","updated_at":"2025-07-08T19:46:08.000Z","dependencies_parsed_at":"2025-07-08T19:52:13.797Z","dependency_job_id":"23b1b909-0077-4b84-8ef1-bbf7f81b9900","html_url":"https://github.com/ReneRuprecht/homelab","commit_stats":null,"previous_names":["reneruprecht/homelab"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ReneRuprecht/homelab","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ReneRuprecht%2Fhomelab","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ReneRuprecht%2Fhomelab/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ReneRuprecht%2Fhomelab/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ReneRuprecht%2Fhomelab/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ReneRuprecht","download_url":"https://codeload.github.com/ReneRuprecht/homelab/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ReneRuprecht%2Fhomelab/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264878580,"owners_count":23677451,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ansible","fluxcd","gitops","kubernetes","proxmox","terraform"],"created_at":"2025-07-11T19:03:04.271Z","updated_at":"2026-01-20T16:26:13.093Z","avatar_url":"https://github.com/ReneRuprecht.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🏠 Homelab\n# ✨ Intro\nDas Repository dokumentiert mein selbst gehostetes Homelab basierend auf Proxmox und Kubernetes. \nZiel ist es, verschiedene Technologien, Tools und Konzepte durch praktische Erfahrungen besser zu verstehen. \nDabei versuche ich, so viel wie möglich zu automatisieren und die gesamte Infrastruktur als Code abzubilden.\n\n# 💻 Hardware\nDie eingesetzte Hardware befindet sich in einem selbstgebauten 10\" Rack. \n- Beelink S12 Mini Pro mit 32 GB RAM, einer 1 TB SSD und einer 256 GB NVMe zum Einsatz (Proxmox). \n- Lenovo M720q mit 48 GB RAM, einer 512 GB SSD und einer 256 GB NVMe zum Einsatz (Proxmox). \n\n# 🖥️ Proxmox\nDie VMs werden mit Terraform erstellt. Dabei werden grundlegende Ressourcen wie CPU, RAM, Netzwerk und Speicher definiert und anschließend in Proxmox bereitgestellt. Die Installation und Konfiguration der Software übernimmt Ansible. Mithilfe von Ansible Playbooks wird die benötigte Software sowie deren Konfiguration konsistent eingerichtet und bereitgestellt.\n\n# 🛳️ Kubernetes\nDas laufende Kubernetes Cluster soll, soweit möglich, vollständig mittels GitOps ausgestattet und konfiguriert werden. Geplant ist, interne Services wie Prometheus und Grafana mit FluxCD zu deployen und zu verwalten, während eigene Apps und Services über ArgoCD bereitgestellt und gemanagt werden. Ziel ist es, anhand praktischer Beispiele ein besseres Verständnis für beide Systeme zu entwickeln.\n\n# 🚀 Pipeline\n\nDie Pipeline wird dafür genutzt das, sofern möglich, alle deployments automatisiert ausgeführt werden.\nDafür existieren speziell vorbereitete Docker-Images, die jeweils in den einzelnen Schritten genutzt werden.  \n\nDie Pipeline prüft, ob sich in den definierten Pfaden Änderungen ergeben haben. Werden Änderungen erkannt, erscheinen diese in der Übersicht.\n\n## 🐳 Docker\n\n- Änderungen an den Dockerfiles führen automatisch zum Neubau der Images.  \n- Die neuen Images werden anschließend in das Registry/Hub gepusht.  \n\n## ⚙️ Ansible\n\n- Änderungen in den Ansible-Dateien (z. B. Host-/Group-Vars) führen zur Ausführung der betroffenen Playbooks.  \n- Die Zuordnung erfolgt über die Datei `playbook_mapping.yml` im Ansible-Ordner.  \n- **Reihenfolge:** Das DNS-Playbook wird immer zuerst ausgeführt, damit die VM erreichbar ist.  \n\n### Wichtig\n- Playbooks werden **nur beim Merge auf den `main`-Branch** ohne `--check` ausgeführt.  \n- Logs werden verschlüsselt als Artifact gespeichert.  \n\n## 🌍 Terraform\n\n- Änderungen in den Terraform-Konfigurationen führen zur Erstellung oder Anpassung der betroffenen VMs.  \n- Vorab wird eine Übersicht erstellt, in der sichtbar ist, ob Ressourcen hinzugefügt, geändert oder entfernt werden.  \n- Der Plan-Output wird – wie bei Ansible – verschlüsselt als Artifact hochgeladen.  \n\n### Wichtig\n- `terraform apply` wird **nur beim Merge auf den `main`-Branch** ausgeführt.  \n\n# 🔧 Services\n\nAktuell wird eine Kombination aus virtuellen Maschinen und Kubernetes-Services betrieben.\nDie Umgebunj wird kontinuierlich weiterentwickelt und angepasst.\n\n## Virtuelle Maschinen (VMs)\n- 3× **Consul**, Terraform State für die Pipeline\n- 2× **DNS**\n- 2× **Github Runner**, für die Pipeline\n- 3× **Vault**, die derzeit für Kubernetes-Secrets verwendet werden  \n- 2× **Loadbalancer**, der Anfragen z.B. an die Vault-Instanzen weiterleitet  \n- 3× **K8s** (1 Master und 2 Nodes)  \n- 1× **Netbox**, für die Dokumentation\n- 1× **Monitoring**, für Prometheus, Grafana\n\n## Kubernetes-Services\n- **FluxCD**  \n- **External Secrets**  \n- **Longhorn**  \n\n# 🤖 Ansible\nFür die VMs im Homelab wurden und werden eigene Ansible Rollen entwickelt. \nHierzu zählt z.B. eine `General` Rolle die VMs mit den Basic Settings ausstattet (ssh, firewall, hostname, ... ) oder \neine `HAProxy` Rolle die es möglich macht mittels url auf verschiedene Backends zu routen.\nJede VM sollte die `General`, `Consul`, `Promtail`, `Node_Exporter` Rolle im Playbook haben damit die Grundeinstellung gesetzt ist.\n\n## Rollen\n- General\n- Kubernetes\n- HAProxy\n\n# 🛡️ Monitoring\nAktuell wird eine VM mit Prometheus, Grafana und Loki verwendet.\nAuf den VMs wird per Promtail die Logs gesammelt und an Loki gesendet.\nDazu gibt es verschiedene Exporter die Prometheus mit Daten versorgen.\n\n## Prometheus\nIn Prometheus werden VMs automatisch über Consul und Service Discovery aufgenommen.\n\n## Exporter\n- `Node Exporter` auf allen VMs\n- `Bind Exporter` auf DNS VMs\n- `Consul Exporter` auf Consul VMs\n  \n# 🛠️ Configs\n## Ansible\nIm Ansible-Ordner befindet sich die Pipfile, welche mit dem Befehl ```pipenv shell``` aktiviert werden kann. Fehlende Python Pakete lassen sich anschließend mit ```pipenv install --dev``` installieren. Um die benötigten Ansible Collections und Rollen zu installieren, kann ```ansible-galaxy install -r requirements.yml``` verwendet werden.\n\n## Terraform\n### Netbox\n```sh\nexport NETBOX_SERVER_URL=\u003cURL\u003e\nexport NETBOX_API_TOKEN=\u003cTOKEN\u003e\n\nexport TF_VAR_netbox_url=\u003cURL\u003e\nexport TF_VAR_netbox_token=\u003cTOKEN\u003e\n```\n### Proxmox\nFür die Verbindung zum Proxmox werden folgende Environment Variablen benötigt.\n```sh\nexport PM_API_URL=\u003cURL\u003e\nexport PM_API_TOKEN_ID=\u003cID\u003e\nexport PM_API_TOKEN_SECRET=\u003cSECRET\u003e\n```\n### VMs\nFür die Erstellung von VMs werden folgende Environment Variablen benötigt.\n```sh\nexport TF_VAR_vm_user=\u003cvm_user\u003e\nexport TF_VAR_vm_ssh_keys=\u003cssh_keys\u003e\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freneruprecht%2Fhomelab","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Freneruprecht%2Fhomelab","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freneruprecht%2Fhomelab/lists"}