Zum Inhalt

Homelab-External (Hetzner vServer)

Selbst-gehostete Infrastruktur auf einem Hetzner vServer (CX23, ~5 EUR/Monat). Betreibt VPN-Koordination, Monitoring, Push-Notifications und Cron-Ueberwachung — vollstaendig provisioniert per Shell-Script (bootstrap.sh).

  • Server: Hetzner CX23 (Falkenstein), Ubuntu 24.04, 2 vCPU, 4 GB RAM, 40 GB SSD
  • Domain: *.homelab-external.robinwerner.net
  • Reverse Proxy: Traefik v3 (Let's Encrypt HTTP-Challenge)
  • Repo: homelab-external
  • Provisionierung: ./bootstrap.sh (lokal ausfuehren, ~3-5 Min)

Services

Service Version URL Beschreibung
Headscale v0.28.0 headscale.homelab-external.robinwerner.net Selbst-gehosteter Tailscale Coordination Server (VPN)
Uptime Kuma 2.1.3 uptime.homelab-external.robinwerner.net HTTP/TCP/Ping-Monitoring fuer interne und externe Dienste
ntfy v2.17.0 ntfy.homelab-external.robinwerner.net Push-Notification-Server fuer alle Homelab-Alerts
Healthchecks v4.0 hc.homelab-external.robinwerner.net Cron-Job-Monitoring via Ping-URLs
Traefik v3.6.9 traefik.homelab-external.robinwerner.net Reverse Proxy, SSL-Termination, Security Headers

Architektur

Internet
    ▼ :80/:443
 Traefik ──── proxy-Netzwerk ──────────────────────────────────────┐
    │                                                               │
    ├─► headscale.* ──► Headscale (8080) + Headplane (3000)        │
    ├─► uptime.*    ──► Uptime Kuma (3001)                         │
    ├─► ntfy.*      ──► ntfy (80)                                  │
    └─► hc.*        ──► Healthchecks (8000)                        │
                    internal-Netzwerk                               │
                    ├─ headscale-postgres (5432)                    │
                    ├─ healthchecks-postgres (5432)                 │
                    ├─ Headscale ◄────────────────────────────────┘
                    ├─ Headplane
                    └─ Healthchecks

    Tailscale (host network) ◄──VPN──► Homelab NUC (10.10.10.0/24)
  • Traefik ist der einzige Einstiegspunkt fuer HTTP/HTTPS (Ports 80, 443)
  • proxy-Netzwerk: Services mit Traefik-Routing
  • internal-Netzwerk: Datenbanken und Services, die DB-Zugriff benoetigen (kein Traefik)
  • Tailscale laeuft mit network_mode: host und verbindet den Hetzner-Server per VPN ins lokale Heimnetz — dadurch koennen Uptime Kuma und Healthchecks interne Dienste erreichen

Netzwerke

Netzwerk Typ Teilnehmer
proxy bridge traefik, headscale, headplane, uptime-kuma, ntfy, healthchecks
internal bridge headscale-postgres, healthchecks-postgres, headscale, headplane, healthchecks
host host tailscale

Datenpfade

Kategorie Pfad Beschreibung
Git-Config (read-only) /opt/homelab-repo/hetzner/ traefik/, headscale/, headplane/
Persistente Daten /opt/homelab-data/<service>/ Datenbanken, Uploads, Cache
Secrets /opt/homelab-data/secrets/cookie_secret Session-Secret fuer Headplane (generiert via Cloud-Init)
SSL-Zertifikate /opt/homelab-data/traefik/certs/acme.json Let's Encrypt ACME-Daten

Schnelleinstieg

# Voraussetzungen: hcloud CLI, curl, jq, openssl
export HCLOUD_TOKEN="..."
export CLOUDFLARE_API_TOKEN="..."
export CLOUDFLARE_ZONE_ID="..."

./bootstrap.sh    # Erstellt Server, DNS, startet alle Services (~3-5 Min)
./teardown.sh     # Loescht alles (Bestaetigung mit "yes" noetig)

Manuelle Ops auf dem Server

cd /opt/homelab-repo/hetzner

# Status aller Services
docker compose ps

# Logs eines Services
docker compose logs -f headscale

# Update nach git pull
docker compose pull && docker compose up -d

# Einzelnen Service neu starten
docker compose restart ntfy

Sicherheitskonzept

Alle Container laufen mit no-new-privileges: true und cap_drop: ALL. Zusaetzliche Capabilities werden nur wo zwingend noetig hinzugefuegt (PostgreSQL, Headscale, Uptime Kuma: Dateisystem-Permissions; Tailscale: Netzwerk).

Traefik erzwingt TLS 1.2+ mit sicheren Cipher Suites, HSTS (1 Jahr, includeSubdomains, preload), X-Frame-Options, Content-Type-Sniffing-Schutz sowie Rate Limiting (50 req/s avg, Burst 100).

Kosten

Posten Monat
Hetzner CX23 (Falkenstein) ~5 EUR
Cloudflare DNS kostenlos
Let's Encrypt SSL kostenlos