{"id":18725644,"url":"https://github.com/orenzp/homelab","last_synced_at":"2026-07-04T14:32:10.444Z","repository":{"id":49433430,"uuid":"374435129","full_name":"orenzp/homelab","owner":"orenzp","description":"This repository is used to automate and manage my self-hosting Kubernetes cluster. The repo uses weave works FluxCD to achieve GitOps workflow.","archived":false,"fork":false,"pushed_at":"2026-03-07T21:20:57.000Z","size":223,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"production","last_synced_at":"2026-03-07T23:13:07.781Z","etag":null,"topics":["fluxcd","gitops","k3sup","kubernetes"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/orenzp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2021-06-06T18:28:51.000Z","updated_at":"2026-03-07T21:21:01.000Z","dependencies_parsed_at":"2022-09-04T07:41:32.788Z","dependency_job_id":"49a9064d-c05f-4916-b8b2-10561e0b9402","html_url":"https://github.com/orenzp/homelab","commit_stats":null,"previous_names":["orenzp/homelab"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/orenzp/homelab","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orenzp%2Fhomelab","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orenzp%2Fhomelab/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orenzp%2Fhomelab/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orenzp%2Fhomelab/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/orenzp","download_url":"https://codeload.github.com/orenzp/homelab/tar.gz/refs/heads/production","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orenzp%2Fhomelab/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35125718,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-04T02:00:05.987Z","response_time":113,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["fluxcd","gitops","k3sup","kubernetes"],"created_at":"2024-11-07T14:11:13.278Z","updated_at":"2026-07-04T14:32:10.439Z","avatar_url":"https://github.com/orenzp.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003e DRAFT - WORK IN PROGRESS\n# Description\nLast year my wife came to me a said: \"Oren you should start a project so you will have something to do outside of work\", So I created this repository :grin:\n\nThis repo holds all the configuration and documentation that is needed to set up my self-hosting home Kubernetes cluster on raspberry pie boards.\n\n## Project Goals\n\n- The goal of the project is to fully automate my hosting environment at home. \n- To have the entire state of the environment declared in GIT\n- Learn and implement the latest DevOps tools and methods.\n## Architecture\n\n```mermaid\ngraph TD\n    subgraph Nodes [Physical Layer: Raspberry Pi 4 4GB]\n        K3S01[k8s-master-01\u003cbr/\u003e192.168.1.10]\n        K3S02[k8s-node-01\u003cbr/\u003e192.168.1.11]\n        K3S03[k8s-node-02\u003cbr/\u003e192.168.1.12]\n        K3S04[k8s-node-03\u003cbr/\u003e192.168.1.13]\n        SSD[(250GB SSD SATA)] --- K3S01\n    end\n\n    subgraph Cluster [Kubernetes Layer: K3s Cluster]\n        Flux[FluxCD GitOps]\n        Sealed[Sealed Secrets]\n        Prom[Prometheus Operator]\n        Metal[MetalLB L2 LB]\n        Longhorn[Longhorn Storage]\n    end\n\n    subgraph Apps [Applications]\n        HA[Home Assistant]\n        PH[Pi-Hole]\n        WG[WireGuard]\n        PI[Podinfo]\n    end\n\n    Nodes --\u003e Cluster\n    Flux -.-\u003e Cluster\n    Cluster --\u003e Metal\n    Cluster --\u003e Longhorn\n    Longhorn --\u003e HA\n    Longhorn --\u003e PH\n    Metal --\u003e Ingress[Ingress Nginx]\n    Ingress --\u003e Apps\n```\n\n### Stack Components\n\n- **Infrastructure**\n  - [FluxCD - GitOps Toolkit](https://fluxcd.io/)\n  - [K3S - Kubernetes Distro](https://k3s.io/)\n  - [METALLB - Layer 2 LB](https://metallb.universe.tf/)\n  - [LongHorn - Distributed storage for K8S](https://rancher.com/products/longhorn/)\n  - [Ingress Nginx - Ingress Controller](https://kubernetes.github.io/ingress-nginx/)\n  - [Cert-Manager - SSL Certificate Management](https://cert-manager.io/)\n  - [Kube-Prometheus-Stack - Monitoring \u0026 Alerting](https://github.com/prometheus-community/helm-charts)\n\n- **Applications**\n  - [Podinfo - Demo app](https://github.com/stefanprodan/podinfo)\n  - [Home Assistant - Home Automation](https://www.home-assistant.io/)\n  - [Pi-Hole - DNS Ad Blocker](https://pi-hole.net/)\n  - [Plex - Media Center](https://www.plex.tv/)\n  - [WireGuard VPN](https://www.wireguard.com/)\n\n## Continues Integration Pipeline [![test](https://github.com/orenzp/gitops/actions/workflows/test.yaml/badge.svg)](https://github.com/orenzp/gitops/actions/workflows/test.yaml) --- [![e2e](https://github.com/orenzp/gitops/actions/workflows/e2e.yaml/badge.svg)](https://github.com/orenzp/gitops/actions/workflows/e2e.yaml)\nI use Github Action to enable a Continues Integration solution to check the new code and config that I plan to represent to the system.\n\n  - [GitHub Actions](https://github.com/features/actions) \n\n# Bootstrapping\nThe requirements to bootstrapping the Kubernetes Cluster on my raspberry pies. The bootstrap process is divided into two steps. First bootstrap the cluster, then deploy the FluxCD Controller to deploy all my Kubernetes Resources.\n\n- [Node Setup Guide](node_setup/readme.md) - **Provisioning**: Flash SD cards and configure static IPs.\n- [Ansible Automation](ansible/README.md) - **Automated Setup**: Install K3s and bootstrap FluxCD.\n- [FluxCD Clusters](clusters/README.md) - **Cluster Config**: Define the GitOps state for production and staging.\n- [Applications Guide](apps/README.md) - **Apps Deployment**: Manage applications via Kustomize and FluxCD.\n\n- [Cluster Bootstrap](docs/cluster_bootstrap.md)\n- [GitOps Bootstrap](docs/gitops_bootstrap.md)\n\n## Automated Setup (Ansible + Bitwarden)\nA fully automated setup is available to provision the nodes, install K3s, and bootstrap FluxCD. See the [Ansible README](ansible/README.md) for full details.\n\n### 1. Provision Nodes\nFlash your SD cards and follow the [Node Setup Guide](node_setup/readme.md) to enable **root login** with a preset password and static IP.\n\n### 2. Login to Bitwarden\nEnsure the Bitwarden CLI (`bw`) is installed and authenticated on your machine:\n```bash\nbw login\nexport BW_SESSION=$(bw unlock --raw)\n```\n\n### 3. Run the Ansible Playbook\nUpdate `ansible/hosts.ini` with your nodes' IPs and then run:\n```bash\nansible-playbook -i ansible/hosts.ini ansible/site.yml\n```\n\nThis single command will:\n1.  **Prepare nodes**: Disable swap, enable cgroups, and install K8s dependencies.\n2.  **Install K3s**: Deploy the master and join all workers.\n3.  **Bootstrap FluxCD**: Fetch your GitHub token from Bitwarden and initialize GitOps on the cluster.\n\n## Containerized Bootstrap Environment\nTo avoid installing tools locally, you can use the provided Docker image which contains all necessary tools (`ansible`, `gh`, `bw`, `helm`, `kubectl`, `flux`).\n\n### 1. Build the image\n```bash\ndocker build -t homelab-bootstrap -f Dockerfile.bootstrap .\n```\n\n### 2. Run the container\nMount your SSH keys and the current directory to the container:\n```bash\ndocker run -it --rm \\\n  -v $(pwd):/workspace \\\n  -v ~/.ssh:/root/.ssh:ro \\\n  homelab-bootstrap\n```\n\nOnce inside, you can run the bootstrap commands (e.g., `bw login`, `ansible-playbook ...`).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Forenzp%2Fhomelab","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Forenzp%2Fhomelab","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Forenzp%2Fhomelab/lists"}