- Shell 83.3%
- JavaScript 11.8%
- Dockerfile 2.5%
- Jinja 1.7%
- Python 0.7%
| .gitea/workflows | ||
| .vscode | ||
| ansible | ||
| cloud-init | ||
| docs | ||
| kind | ||
| kubernetes | ||
| scripts | ||
| secrets | ||
| talos | ||
| vms | ||
| .dockerignore | ||
| .gitignore | ||
| .sops.yaml | ||
| CLAUDE.md | ||
| pi-bridge-attach-session.sh | ||
| README.md | ||
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
rockyochstarlord(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 attdevelopinte ska glida ifrån körs.gitea/workflows/sync-develop.ymlvid varje push tillmain: den fast-forwardardevelop, eller mergar inmainomdevelophar 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.