{"id":36872412,"url":"https://github.com/emerconn/homelab","last_synced_at":"2026-01-12T15:02:38.295Z","repository":{"id":248193962,"uuid":"828024970","full_name":"emerconn/homelab","owner":"emerconn","description":"My k8s driven homelab","archived":false,"fork":false,"pushed_at":"2025-12-29T09:04:35.000Z","size":2720,"stargazers_count":5,"open_issues_count":11,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-01T07:30:35.253Z","etag":null,"topics":["homelab","kubernetes","linux","talos"],"latest_commit_sha":null,"homepage":"http://emerconn.com/homelab/","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/emerconn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-07-12T23:14:38.000Z","updated_at":"2025-12-19T02:27:00.000Z","dependencies_parsed_at":"2024-07-13T01:24:01.565Z","dependency_job_id":"ab09fe54-0419-45cd-82d7-921803b9a4fb","html_url":"https://github.com/emerconn/homelab","commit_stats":null,"previous_names":["emerconnelly/fleet-infra","emerconn/fleet-infra"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/emerconn/homelab","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emerconn%2Fhomelab","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emerconn%2Fhomelab/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emerconn%2Fhomelab/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emerconn%2Fhomelab/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/emerconn","download_url":"https://codeload.github.com/emerconn/homelab/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emerconn%2Fhomelab/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28340416,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T12:22:26.515Z","status":"ssl_error","status_checked_at":"2026-01-12T12:22:10.856Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["homelab","kubernetes","linux","talos"],"created_at":"2026-01-12T15:02:38.204Z","updated_at":"2026-01-12T15:02:38.277Z","avatar_url":"https://github.com/emerconn.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n  # homelab\n\n  [![flux](https://github.com/emerconnelly/homelab/actions/workflows/flux.yaml/badge.svg?branch=main)](https://github.com/emerconnelly/homelab/actions/workflows/flux.yaml)\n  [![github-pages](https://github.com/emerconnelly/homelab/actions/workflows/github-pages.yaml/badge.svg)](https://github.com/emerconnelly/homelab/actions/workflows/github-pages.yaml)\n\n  [![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/emerconn/homelab)\n\n\u003c/div\u003e\n\n# hardware \n\n### network [![MikroTik Router](https://img.shields.io/badge/RouterOS-555?logo=mikrotik\u0026logoColor=293239\u0026labelColor=fff)](https://mikrotik.homelab.emerconnelly.com/) [![AdGuard Home](https://img.shields.io/badge/AdGuard_Home-555?logo=adguard\u0026logoColor=68bc71\u0026labelColor=000)](https://adguard.homelab.emerconnelly.com/) [![Unifi Network Server](https://img.shields.io/badge/Unifi_Network_Server-555?logo=ubiquiti\u0026logoColor=fff\u0026labelColor=0559c9)](https://unifi.homelab.emerconnelly.com/) \n\n- MikroTik hAP ax³\n  - Containizerd AdGuard Home for DNS\n  - WireGuard for secure private access\n  - IPSec tunnels for cloud providers\n- Unifi Switch Lite 8 PoE\n\n### storage [![Synology DSM](https://img.shields.io/badge/Synology_DSM-555)](https://synology.homelab.emerconnelly.com/)\n\n- Synology DS720+\n  - storage: (4) 1TB SATA SSD\n  - cache: (2) 256GB NVMe M.2 SD\n  - network: (2) 1G ethernet in LAG\n\n### servers \n\nRefurbed mini-desktop PCs running bare-metal Talos Linux for hosting a Kubernetes cluster\n\n- control plane\n  - (3) Dell 9020 Optiplex Micro\n    - cpu: [i7-4785T 4-core 3.2GHz 8M](https://www.intel.com/content/www/us/en/products/sku/80814/intel-core-i74785t-processor-8m-cache-up-to-3-20-ghz/specifications.html)\n    - ram: [(2x) 8GB DDR3 1600 CL11](https://eu.crucial.com/memory/ddr3/ct102464bf160b)\n    - storage:\n      - 256GB M.2 SSD \u003csub\u003eboot\u003c/sub\u003e\n      - [MX500 2TB SATA SSD](https://www.crucial.com/ssd/mx500/ct2000mx500ssd1) \u003csub\u003eRook Ceph\u003c/sub\u003e\n- workers\n  - (1) [Intel NUC10I5FNKN1](https://mitxpc.com/products/bxnuc10i5fnkn1)\n    - cpu: [i5-10210U 4-core 4.2GHz 6M](https://www.intel.com/content/www/us/en/products/sku/195436/intel-core-i510210u-processor-6m-cache-up-to-4-20-ghz/specifications.html)\n    - ram: [64GB DDR4 2666 CL19](https://semiconductor.samsung.com/us/dram/module/sodimm/m471a4g43mb1-ctd)\n    - storage: 256GB M.2 NVMe SSD \u003csub\u003eboot\u003c/sub\u003e\n\n# repo management\n\n### Renovate [![Renovate Dashboard](https://img.shields.io/badge/Dashboard-555?logo=renovate\u0026logoColor=497b9c\u0026labelColor=000)](https://developer.mend.io/github/emerconn/homelab)\n\n- Automated detailed PRs for version upgrades of Flux `HelmRelease`s, container image tags, \u0026 K8s `.yaml` resources\n- Configured as a [GitHub app](https://github.com/apps/renovate) (migrate to GitHub Action cause it looks cooler?)\n\n### FluxCD\n\n- automatically manage Kubernetes resources as code\n- whenever `main` is updated, [this](https://github.com/emerconnelly/homelab/actions/workflows/flux-reconcile.yml) GitHub Action remotely reconciles my cluster by connecting to the K8s API via Tailscale\n\n### SOPS\n\n- encrypts K8s secrets on the client with `age.key`, using the [age](https://github.com/FiloSottile/age) protocol, before commiting them to Git\n- Flux decrypts the secrets within the cluster before applying, using a Secret containing `age.key`\n- configured via [.sops.yaml](https://github.com/emerconnelly/homelab/blob/main/.sops.yaml) \u0026 [gotk-sync.yaml](k8s/flux/clusters/tal-clu-1/flux-system/gotk-sync.yaml)\n\n# kubernetes\n\n## external\n\n### Cloudflare [![Cloudflare DNS Records](https://img.shields.io/badge/DNS_Records-555?logo=cloudflare\u0026logoColor=f38020\u0026labelColor=000)](https://dash.cloudflare.com/923309f860b1a7e801fd81224c5f56c9/emerconnelly.com/dns/records) [![Cloudflare Audit Log](https://img.shields.io/badge/Audit_Log-555?logo=cloudflare\u0026logoColor=f38020\u0026labelColor=000)](https://dash.cloudflare.com/923309f860b1a7e801fd81224c5f56c9/audit-log) [![Cloudflare API Tokens](https://img.shields.io/badge/API_Tokens-555?logo=cloudflare\u0026logoColor=f38020\u0026labelColor=000)](https://dash.cloudflare.com/profile/api-tokens)\n\n- Automated HTTPS cert lifecycle using [`cert-manager`](https://cert-manager.io/docs/installation/helm)'s [ACME DNS01 Challenge Provider](https://cert-manager.io/docs/configuration/acme/dns01) via [Let's Encrypt](https://letsencrypt.org) with my domain [emerconnelly.com](https://www.emerconnelly.com)\n\n### Tailscale [![Tailscale Machines](https://img.shields.io/badge/Machines-555?logo=tailscale\u0026logoColor=fff\u0026labelColor=242424)](https://login.tailscale.com/admin/machines) [![Tailscale ACL Editor](https://img.shields.io/badge/ACL_Editor-555?logo=tailscale\u0026logoColor=fff\u0026labelColor=242424)](https://login.tailscale.com/admin/machines)\n\n- Secured external access by exposing ingress, egress, \u0026 the K8s API to my [tailnet](https://tailscale.com/kb/1136/tailnet)\n- Controlled via [`tailscale-operator`](https://tailscale.com/kb/1236/kubernetes-operator)\n\n### HCP Vault Secrets [![HCP Vault Secrets](https://img.shields.io/badge/Vault_Secrets-555?logo=hashicorp\u0026logoColor=fff\u0026labelColor=000)](https://portal.cloud.hashicorp.com/services/secrets?project_id=c9dc34a9-87d7-4e2d-9a1c-3d3e759f8261)\n\n- Cloud-based secrets manager\n- Controlled via [`vault-secrets-operator`](https://github.com/hashicorp/vault-secrets-operator)\n\n## internal\n\n### Kubernetes Dashboard [![Kubernetes Dashboard](https://img.shields.io/badge/Dashboard-555?logo=kubernetes\u0026logoColor=326ce5\u0026labelColor=000)](https://k8s-dashboard.homelab.emerconnelly.com)\n\n- K8s web UI \u0026 resource explorer\n\n### Headlamp [![Headlamp Main](https://img.shields.io/badge/Main-555)](https://headlamp.homelab.emerconnelly.com/c/main)\n\n- K8s web UI \u0026 resource explorer\n\n### OpenObserve [![OpenObserve Home](https://img.shields.io/badge/Home-555)](https://openobserve.homelab.emerconnelly.com/web)\n\n- Full-stack observability (logs, traces, metrics), ~71:1 compression ratio, \u0026 a web UI for queries \u0026 dashboards\n\n### Prometheus [![Prometheus Targets](https://img.shields.io/badge/Targets-555?logo=prometheus\u0026logoColor=e6522c\u0026labelColor=000)](https://prometheus.homelab.emerconnelly.com/targets)\n\n- Time-series database for collecting \u0026 alterting on application \u0026 infrastructure metrics\n- Deployed via `kube-prometheus-stack`\n\n### Grafana [![Grafana Dashboards](https://img.shields.io/badge/Dashboards-555?logo=grafana\u0026logoColor=f46800\u0026labelColor=000)](https://grafana.homelab.emerconnelly.com/dashboards)\n\n- Visualize metrics, logs, \u0026 traces from multiple sources\n- Deployed via `kube-prometheus-stack`\n\n### Cilium\n\n- K8s eBPF-based CNI \u0026 `kube-proxy` replacement\n- K8s Ingress \u0026 Gateway API controller\n- K8s LoadBalancer backend via L2 Advertisments using gratuitous ARP \n\n#### Hubble [![Cilium Hubble](https://img.shields.io/badge/Hubble-555?logo=cilium\u0026logoColor=f9c31f\u0026labelColor=000)](https://hubble.homelab.emerconnelly.com)\n\n- Visual map \u0026 event log of the Cilium CNI\n\n### Traefik [![Traefik Dashboard](https://img.shields.io/badge/Dashboard-555?logo=traefikproxy\u0026logoColor=24a1c1\u0026labelColor=000)](https://traefik.homelab.emerconnelly.com/dashboard/)\n\n- K8s Ingress \u0026 Gateway API controller\n- all `*.homelab.emerconnelly.com` links are directed, via AdGuard Home DNS config, to the LoadBalancer service for this IngressClass\n  - this includes both intra- \u0026 inter-cluster resources\n\n### MinIO [![MinIO Main Tenant](https://img.shields.io/badge/Main_Tenant-555?logo=minio\u0026logoColor=c72e49\u0026labelColor=000)](https://main.minio.homelab.emerconnelly.com)\n\n- Deploy highly-available \u0026 fully API-compliant S3 storage tenants\n- Controlled via [`minio-operator`](https://min.io/docs/minio/kubernetes/upstream/operations/installation.html)\n\n\n# GitHub Pages\n\n- [this](https://github.com/emerconnelly/homelab/actions/workflows/github-pages.yml) workflow using [Rust mdBook](https://github.com/rust-lang/mdBook)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femerconn%2Fhomelab","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Femerconn%2Fhomelab","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femerconn%2Fhomelab/lists"}