Files
homelab/README.md
T
2026-06-02 08:43:02 +00:00

5.4 KiB

homelab

Infrastruktur als Code für das Heimnetz. Alle Services laufen containerisiert auf corebob und werden über Traefik als Reverse Proxy erreichbar gemacht. Dieses Repository enthält alle Docker-Compose-Konfigurationen und wird automatisch auf gitea.basti.badana.de gespiegelt.


Architektur

Internet
    │
    ▼
┌─────────────────────┐
│  öffentliche VM      │  traefik.basti.badana.de
│  Traefik + Gitea     │  gitea.basti.badana.de
│  Let's Encrypt TLS   │
└─────────────────────┘
         ▲
         │ Push-Mirror (bei jedem Commit)
         │
┌─────────────────────┐
│  corebob             │  192.168.178.113
│  Ubuntu 26.04 LTS    │  16 Kerne, 15 GB RAM, 98 GB Disk
│  Docker + Traefik    │
│  Interne Services    │
└─────────────────────┘
         ▲
         │ DNS (*.core.bob → 192.168.178.113)
         │
┌─────────────────────┐
│  bobhole (Pi-hole)   │
│  DNS für core.bob    │
└─────────────────────┘

Netzwerk

Host Domain Zweck
corebob *.core.bob Interne Services, nur im Heimnetz erreichbar
öffentliche VM *.basti.badana.de Extern erreichbare Services

Services

corebob (intern)

Service URL Compose
Traefik Dashboard https://traefik.core.bob/dashboard/ traefik/
Gitea https://gitea.core.bob gitea/

Öffentliche VM

Service URL Compose
Traefik Dashboard https://traefik.basti.badana.de traefik-public/
Gitea (Mirror) https://gitea.basti.badana.de gitea-public/

Verzeichnisstruktur

homelab/
├── traefik/                  # Traefik auf corebob
│   ├── docker-compose.yml
│   ├── traefik.yml           # Statische Konfiguration
│   └── dynamic-tls.yml       # TLS-Zertifikat (mkcert)
├── gitea/                    # Gitea auf corebob
│   └── docker-compose.yml
├── traefik-public/           # Traefik auf öffentlicher VM
│   └── docker-compose.yml
├── gitea-public/             # Gitea auf öffentlicher VM
│   └── docker-compose.yml
└── README.md

Nicht im Repository (gitignore): certs/, .mkcert-ca/, data/
Zertifikate und persistente Service-Daten werden nicht versioniert.


TLS / Zertifikate

corebob (intern, mkcert)

Interne Services nutzen eine selbst signierte CA, erstellt mit mkcert.

CA-Root:      ~/traefik/.mkcert-ca/rootCA.pem
Zertifikat:   ~/traefik/certs/core.bob.crt
Key:          ~/traefik/certs/core.bob.key
Gültig für:   core.bob, *.core.bob
Läuft ab:     September 2028

Die Root-CA muss einmalig auf jedem Client-Gerät installiert werden:

# Arch Linux (Chromium/System):
sudo cp rootCA.pem /etc/ca-certificates/trust-source/anchors/rootCA-corebob.crt
sudo update-ca-trust

# Ubuntu/Debian:
sudo cp rootCA.pem /usr/local/share/ca-certificates/rootCA-corebob.crt
sudo update-ca-certificates

# Firefox/Librewolf:
# about:preferences#privacy → Zertifikate anzeigen → Importieren

Öffentliche VM (Let's Encrypt)

Traefik holt automatisch Zertifikate via ACME TLS-Challenge. Keine manuelle Konfiguration nötig.


DNS

Pi-hole auf bobhole liefert Wildcard-DNS für *.core.bob:

# /etc/dnsmasq.d/core.bob.conf
address=/core.bob/192.168.178.113

Pi-hole v6 erfordert etc_dnsmasq_d = true in /etc/pihole/pihole.toml.


Neuen Service hinzufügen

Auf corebob

  1. Verzeichnis anlegen: mkdir ~/homelab/<service>
  2. docker-compose.yml erstellen mit diesen Traefik-Labels:
services:
  myservice:
    image: ...
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.myservice.rule=Host(`myservice.core.bob`)"
      - "traefik.http.routers.myservice.entrypoints=websecure"
      - "traefik.http.routers.myservice.tls=true"
      - "traefik.http.services.myservice.loadbalancer.server.port=<PORT>"
    networks:
      - traefik

networks:
  traefik:
    external: true
  1. Service starten: cd ~/homelab/<service> && docker compose up -d
  2. Ins Repo committen und pushen:
cd ~/homelab
git add <service>/
git commit -m "Add <service>"
git push

Der Push-Mirror synchronisiert automatisch auf gitea.basti.badana.de.

Auf der öffentlichen VM

Gleiche Struktur, aber:

  • Netzwerk: proxy statt traefik
  • Kein tls=true Label nötig (Let's Encrypt greift automatisch via myresolver)

Docker-Netzwerke

Netzwerk Wo Zweck
traefik corebob Verbindet alle internen Services mit Traefik
proxy öffentliche VM Verbindet alle externen Services mit Traefik

Netzwerke einmalig anlegen falls nicht vorhanden:

docker network create traefik   # corebob
docker network create proxy     # öffentliche VM

Gitea-Mirror

Das Repository wird bei jedem Commit automatisch gespiegelt:

URL
Primär https://gitea.core.bob/claude/homelab
Mirror https://gitea.basti.badana.de/claude/homelab

Mirror-Intervall: 8 Stunden (zusätzlich sync bei jedem Push).