Mitt repo för mitt hemlabb som jag försöker köra IaC på
  • Shell 83.3%
  • JavaScript 11.8%
  • Dockerfile 2.5%
  • Jinja 1.7%
  • Python 0.7%
Find a file
2026-10-11 18:16:53 +02:00
.gitea/workflows ci: håll develop i synk med main automatiskt 2026-09-28 11:59:41 +00:00
.vscode vscode-settings workspace specifikt 2026-06-15 10:30:02 +02:00
ansible koel 2026-07-08 16:35:36 +02:00
cloud-init metrics: node_exporter i alla VM:ar + postgres_exporter och tre dashboards 2026-10-05 13:45:41 +02:00
docs Städa bort gamla VM-diskar på rocky efter host-flytten (~26 GB) 2026-10-11 18:16:53 +02:00
kind Add kind local dev environment and Flux bootstrap for develop branch 2026-06-15 10:07:24 +02:00
kubernetes Migrera immich till egen VM (10.8.40.180) 2026-10-06 20:11:36 +02:00
scripts Fördela workloaden ~50/50 mellan hostarna 2026-10-11 18:13:40 +02:00
secrets hermes: koppla in Telegram (@hermes_kobbo_bot) 2026-10-07 18:06:17 +02:00
talos Updated with new ips 2026-06-29 12:32:57 +02:00
vms Onboarda starlord som andra libvirt-host i Ember 2026-10-11 17:53:24 +02:00
.dockerignore pi-devbox: imagen ägs av pi-bridge-repot, ingen submodul 2026-09-28 09:41:49 +00:00
.gitignore chore: lägg till loadtest-verktyget för Kiln och ignorera resultatfiler 2026-10-05 17:24:46 +02:00
.sops.yaml Fix SOPS encrypted_regex so Flux can decrypt karakeep secret 2026-06-16 18:38:11 +02:00
CLAUDE.md Fördela workloaden ~50/50 mellan hostarna 2026-10-11 18:13:40 +02:00
pi-bridge-attach-session.sh pi-bridge: skript för att koppla in en pågående session 2026-09-20 16:31:18 +02:00
README.md Fördela workloaden ~50/50 mellan hostarna 2026-10-11 18:13:40 +02:00

kobbo-homelab

Homelab som migreras från Talos/Kubernetes till Ubuntu + libvirt/KVM. Läs docs/migration-plan.md för status och nästa steg.

Kluster (Ubuntu + libvirt)

Hostname Roll IP Status
starlord hypervisor 10.8.40.11 Ubuntu 26.04 LTS + libvirt (andra hosten, onboardad 2026-10-11)
rocky hypervisor 10.8.40.12 Ubuntu 26.04 LTS + libvirt; br0, dir-pool, VM:ar nedan

Båda hostarna hanteras av Ember (ember.kobbo.se). Gamla Talos/Kubernetes-klustret är rivet (starlord installerades om med Ubuntu 26.04 2026-10-11).

De virtuella maskinerna (provisioneras med cloud-init/ + scripts/provision-vm.sh):

VM Host IP Roll
proxy rocky 10.8.40.27 Newt (Pangolin-tunnel) + Caddy
monitoring starlord 10.8.40.197 Prometheus + Grafana (dashboards i vms/monitoring/)
pg-shared rocky 10.8.40.239 PostgreSQL 17 (delad) + pgBackRest → NAS
registry-mirror starlord 10.8.40.110 Docker Hub pull-through-cache (registry:2)
utility rocky 10.8.40.77 Tailscale + Portainer + Ember (ember.kobbo.se)
forgejo-runner rocky 10.8.40.140 Forgejo Actions-runner (kaniko)
cloudreve rocky 10.8.40.192 Filhanterare (Cloudreve V4, SQLite + NFS-data)
karakeep starlord 10.8.40.52 karakeep (web + Meilisearch + headless Chrome)
krona rocky 10.8.40.124 Ekonomi-app (Laravel/PHP + Caddy + MariaDB + Redis)
kiln rocky 10.8.40.252 Next.js + Playwright/Chromium (delad PG på pg-shared)
immich starlord 10.8.40.180 server + machine-learning + redis + egen PG14 (media på NFS)
hermes starlord 10.8.40.150 Hermes Agent (gateway + dashboard) + Hermes WebUI

Kubernetes/Talos rivet. Båda hostarna kör Ubuntu 26.04 LTS + KVM/libvirt och hanteras av Ember (Go-API + React-SPA i utility-VM:en).

Plattformen är uppe på både rocky och starlord (proxy, monitoring, pg-shared, registry-mirror, utility, forgejo-runner, cloudreve, karakeep, krona, kiln, immich, hermes), och Pangolins resurser pekar mot proxy-VM:ens Caddy. Nya VM:ar kan skapas på båda hostarna via Ember. Se docs/migration-plan.md §0.

Repo-struktur

cloud-init/            # Generisk VM-mall (user-data/network-config) — nya plattformen
scripts/               # provision-vm.sh, setup-libvirt-host.sh, install-node-exporter.sh, backup-skript …
vms/                   # Per-VM-konfig: proxy, monitoring, pg-shared, registry-mirror, utility, forgejo-runner, cloudreve, karakeep, krona, kiln, immich, hermes
secrets/               # SOPS-krypterade hemligheter (*.enc.yaml)
talos/                 # Talos machine configs (historiskt — klustret rivet)
kubernetes/            # GAMLA plattformen (Talos/Flux) — historiskt, rivet
  apps/                # gamla workloads (borttagna/migrerade)
  core/                # gamla infrastrukturen (metallb, traefik, nfs-csi — rivet)
  flux/                # GitRepository + Kustomizations (prod main + lokal kind)
  overlays/            # kubectl apply-overlays (lokal kind)
ansible/               # (gamla k8s-playbooks; VM-ansible ej på plats)
docs/                  # Dokumentation — migration-plan.md är källan

GitOps-flöde

develop  →  PR  →  main
   │                 │
   │                 └─ Flux (prod) deployr till klustret
   │
   └─ Flux (kind) reconciliar lokalt — testa innan PR
  • Allt arbete sker på develop
  • main är skyddad — kräver PR
  • Flux i prod tittar enbart på main
  • Apparnas release-workflows bumpar image-taggar direkt på main. För att develop inte ska glida ifrån körs .gitea/workflows/sync-develop.yml vid varje push till main: den fast-forwardar develop, eller mergar in main om develop har egna commits.

Kom igång

Se docs/local-dev.md för fullständig guide — ny dator, lokal setup, lägga till services, och vägen till produktion.

Snabbstart (redan satt upp)

# Starta kind-klustret
bash scripts/kind-setup.sh

# Applicera en app lokalt
bash scripts/local-apply.sh postgres

# Kolla Flux-status
flux get all -A

Secrets

Secrets krypteras med SOPS och age. Age-publicknyckeln finns i .sops.yaml.

sops -e secret.yaml > secret.enc.yaml   # kryptera
sops -d secret.enc.yaml                 # dekryptera

Den privata age-nyckeln lagras lokalt på ~/.config/sops/age/keys.txt — säkerhetskopiera den.