- Shell 53.7%
- Python 46.1%
- Dockerfile 0.2%
| .forgejo/workflows | ||
| 00_docs | ||
| 10_runbooks | ||
| 20_services | ||
| .gitignore | ||
| index.md | ||
| README.md | ||
Homelab — Infrastructure complète auto-hébergée
Infrastructure personnelle de production conçue selon les bonnes pratiques de l'industrie : Kubernetes multi-nœuds, observabilité complète, backups chiffrés hors-site, SSO, TLS automatique.
Architecture
Quatre nœuds physiques avec des rôles bien distincts, interconnectés en 10GbE (Mimir ↔ Yggdrasil/Bragi) et 1GbE (reste du LAN) :
| Nœud | Matériel | Rôle |
|---|---|---|
| Yggdrasil | HP MicroServer Gen11 — Xeon E-2434, 64 Go DDR5 ECC, 4× SSD 4 TB ZFS | Serveur principal — k3s control plane, tous les services applicatifs |
| Bragi | Silverstone RM51 — i9-10900K, 32 Go DDR4, RTX 3080 10 Go | Nœud k3s agent GPU — Jellyfin NVENC/NVDEC, workloads GPU |
| Heimdall | Raspberry Pi 4 8 Go | Gardien réseau — VPN WireGuard, firewall UFW, monitoring |
| Mimir | Synology RS2423RP+ — 4× 16 TB SHR-2, 10GbE | NAS — stockage centralisé NFS (~29 TB usable, Btrfs) |
INTERNET
│
┌──────────┴──────────┐
│ home.blanc.swiss │ (Let's Encrypt DNS-01)
│ *.blanc.swiss │
└──────────┬──────────┘
│ 443/TCP · 51820/UDP
▼
┌───────────────────────┐
│ Box (192.168.1.1) │
└───────────┬───────────┘
│ LAN 192.168.1.0/24
┌─────────────────────┼───────────────────────┐
▼ ▼ ▼
┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ Heimdall .12 │ │ Yggdrasil .10 │ │ Mimir .14 │
│ │ │ │ │ │
│ WireGuard VPN │ │ k3s server │ │ NFS exports │
│ UFW Firewall │ │ ingress-nginx │ │ /volume1/library │
│ Prometheus │ │ cert-manager │ │ /volume1/nc │
│ Grafana │ │ Namespaces: │ │ /volume1/forgejo │
│ Alertmanager │ │ media / cloud │ │ │
│ NUT slave │ │ services / ai │ │ SHR-2 — 2 disk │
│ │ │ auth │ │ fault tolerance │
└──────────────────┘ └────────┬─────────┘ └──────────────────┘
│ k3s cluster
▼
┌──────────────────────┐
│ Bragi .13 │
│ │
│ k3s agent GPU │
│ taint: gpu=true │
│ Jellyfin NVENC │
│ nvidia-device-plugin│
└──────────────────────┘
Stack technique
Orchestration & Infrastructure
- Kubernetes (k3s) — cluster multi-nœuds avec scheduling GPU via taints/tolerations
- ingress-nginx — reverse proxy avec terminaison TLS
- cert-manager — certificats Let's Encrypt automatiques via DNS-01 challenge (Infomaniak)
- Authelia — SSO portal avec TOTP/WebAuthn pour les apps exposées
- ZFS RAIDZ1 — pool local Yggdrasil pour configs et bases de données
- NFS NFSv4.1 — stockage bulk centralisé sur Mimir (10GbE)
Services hébergés
| Namespace | Services |
|---|---|
media |
Jellyfin (GPU Bragi), Radarr, Sonarr, Lidarr, Prowlarr, Jellyseerr, Kavita, Flow |
cloud |
Nextcloud + PostgreSQL + Redis |
services |
Forgejo + PostgreSQL, Vaultwarden, qBittorrent, FlareSolverr |
ai |
Dify (api/web/worker), Qdrant (vector DB), MCP Server, PostgreSQL, Redis |
auth |
Authelia + Redis |
cert-manager |
cert-manager + webhook Infomaniak |
Observabilité (Heimdall — Docker)
- Prometheus — scraping de tous les nœuds et services
- Grafana — dashboards (nœuds, GPU, UPS, Kubernetes, NAS)
- Alertmanager — notifications email (SMTP Infomaniak)
- Exporters : node-exporter (RPi), kube-state-metrics, NUT exporter (UPS), idrac-exporter (HP iLO), WireGuard exporter, SNMP exporter (Synology NAS), blackbox exporter, kubelet cAdvisor (endpoint natif k3s)
Réseau & Sécurité
- WireGuard (Bifrost) — VPN site-to-any sur Heimdall, réseau
10.8.0.0/24 - UFW — firewall Heimdall, deny by default, NAT/masquerade VPN → LAN
- TLS — tous les services publics en HTTPS via ingress-nginx + cert-manager
- SSO — Authelia protège kavita.blanc.swiss et flow.blanc.swiss (TOTP)
Stockage & Backups
- ZFS RAIDZ1 (Yggdrasil) — 4× SSD 4 TB, snapshots quotidiens avec rotation 7j/4w/3m
- Btrfs SHR-2 (Mimir) — tolérance 2 pannes disques, ~29 TB usable
- restic — backup chiffré quotidien vers Infomaniak Swiss Backup : configs, Nextcloud, Forgejo, livres Kavita, dumps PostgreSQL (Nextcloud, Forgejo, Dify), état etcd k3s
- Alertes Prometheus — notification si backup sans succès depuis > 25h
GPU / IA
- NVIDIA Device Plugin k3s — expose
nvidia.com/gpucomme ressource Kubernetes - NVENC/NVDEC — transcodage hardware H.264/H.265 dans Jellyfin (RTX 3080)
- Dify — plateforme d'agents IA avec LLM externes (Infomaniak AI)
- Qdrant — base vectorielle pour la mémoire des agents
- MCP Server — serveur custom Model Context Protocol (homelab context)
Domaines publics
| Domaine | Service | Auth |
|---|---|---|
cloud.blanc.swiss |
Nextcloud | Nextcloud native |
vault.blanc.swiss |
Vaultwarden | Vaultwarden native |
git.blanc.swiss |
Forgejo | Forgejo native |
ia.blanc.swiss |
Dify | Dify native |
kavita.blanc.swiss |
Kavita | Authelia SSO + TOTP |
flow.blanc.swiss |
Flow — client YouTube/YouTube Music | Authelia SSO + TOTP |
qbit.blanc.swiss |
qBittorrent | Ingress auth |
auth.blanc.swiss |
Authelia portal | — |
home.blanc.swiss |
Hello-world (test ingress TLS) | — |
Structure du dépôt
homelab/
├── 00_docs/ # Documentation conceptuelle — architecture, concepts, décisions
├── 10_runbooks/ # Procédures opérationnelles — reconstruire, déployer, dépanner
└── 20_services/ # Source déclarative — manifests K8s, configs, scripts
00_docs/ — Documentation vivante, lisible, qui explique le pourquoi des choix techniques.
10_runbooks/ — Procédures pas-à-pas organisées par nœud (01_yggdrasil/, 02_heimdall/, 03_bragi/, 04_mimir/). Chaque runbook permet de reconstruire un composant de zéro.
20_services/ — Source de vérité déclarative : manifests Kubernetes, configuration Prometheus/Alertmanager, scripts systemd (backup, déduplication, métriques), configs WireGuard.
→ index.md — Navigation complète vers tous les runbooks et la documentation.
Thème nordique
| Nom | Signification |
|---|---|
| Yggdrasil | L'arbre-monde — centre de tous les royaumes |
| Bragi | Dieu de la poésie — barde d'Asgard |
| Heimdall | Gardien du Bifrost — veille sur tout |
| Mimir | Gardien du puits de la sagesse |
| Bifrost | Le pont entre les mondes (tunnel WireGuard) |
Projet personnel maintenu par Julien Blanc.