Files
homelab/doc/README.md
T

8.6 KiB
Raw Blame History

openbureau Homelab — Dokumentation

Stand: 2026-06-04 · Aktueller Ist-Zustand des fertig aufgebauten Homelabs. Der ursprüngliche Plan liegt unter plan/ (kann von der Realität abweichen).


1. Architektur in einem Bild

        Internet
           │
   ┌───────▼─────────┐         WireGuard-Reverse-Tunnel        ┌──────────────────────────┐
   │  VPS 46.225.70.71│◄════════════════════════════════════════│ Heim-Gateway CT101        │
   │  (Caddy + Mail)  │   VPS wählt NICHT an — das HEIM dialt    │ 10.10.0.2 / wählt VPS an  │
   │  *.kgva.ch       │         (Heim öffnet KEINE Ports)        └────────────┬──────────────┘
   │  Let's Encrypt   │                                                       │
   └──────────────────┘                                          Heim-LAN 192.168.1.0/24
                                                                  Proxmox "tanin" 192.168.1.2
                                                                  (LXC-Container, ZFS)
  • Heim (Proxmox „tanin", 192.168.1.2): Hypervisor. Ein Dienst = ein LXC-Container. ZFS: rpool (System, NVMe), tank (Daten, 2×4 TB Mirror).
  • VPS (46.225.70.71): Caddy terminiert HTTPS für alle Domains (Let's-Encrypt-Wildcard *.kgva.ch) und proxyt via Tunnel ins Heim-LAN. Hostet zusätzlich den Mailserver (docker-mailserver).
  • WireGuard-Reverse-Tunnel: Das Heim-Gateway (CT101) baut den Tunnel zum VPS auf → das Heim muss KEINE Ports öffnen. Der VPS routet 192.168.1.0/24 durch den Tunnel.
  • AdGuard (CT103): netzweiter DHCP (.10.99) + DNS + Adblock.
  • Zugang von außen:
    • Einzelne Dienste: öffentliche Domain → VPS-Caddy → Heim. Kein VPN nötig.
    • Komplettes Heimnetz: WireGuard-Client (Laptop/Handy-Config, nutzt AdGuard als DNS).

2. Dienst-Inventar

IP-Konvention: 192.168.1.<CTID> (außerhalb des DHCP-Bereichs). Ausnahmen: alte Instanzen behalten .177/.178.

CT IP Dienst Domain(s) Zweck
100 .100 PBS — (intern :8007) Proxmox Backup Server
101 .101 wg-gateway WireGuard-Reverse-Tunnel zum VPS
102 .102 fileserver — (Samba) Samba-Shares kgva + private (in Nextcloud eingebunden)
103 .103 adguard — (:80) DHCP + DNS + Adblock
110 .110 nextcloud (neu) cloud.kgva.ch Hauptcloud (Rieger-Setup, shibui-Theme)
111 .111 immich immich.kgva.ch Fotos/Videos
112 .112 vaultwarden vault.kgva.ch · vault.gabrielevarano.ch Passwort-Tresor
113 .113 paperless — (:8000) Dokumente + OCR
114 .114 dashboard — (:8080, intern/VPN) Glance-Dashboard
115 .115 collabora collabora.kgva.ch (:9980) · whiteboard.kgva.ch (:3002) Office + Whiteboard
116 .116 stirling pdf.kgva.ch Stirling-PDF (PDF-Werkzeuge)
120 .120 gitea git.openbureau.ch · git.kgva.ch Git (DIESES Repo)
130 .130 kgva-website karimgabrielevarano.xyz Website
132 .132 rapport-website rapport.openbureau.ch Website
133 .133 dossier-website dossier.openbureau.ch Website
134 .134 openbureau-dev dev.openbureau.ch Dev (Supabase-style :8000 / Web :8080)
135 .135 trattoriamarina.ch (Website) Marinas Trattoria
140 .140 studio studio.kgva.ch (:8080) · api.studio.kgva.ch (:8000) Supabase (Social-Media-Backend) — von anderer Claude-Instanz betreut
800 .177 nextcloud-old cloud.gabrielevarano.ch ALTE Nextcloud (Altdaten, 400 GB-Quota)
802 .14 (DHCP) vaultwarden-old alt, läuft sporadisch
805/807/810/811/910/919/990 *-old alte Pre-Rebuild-Gäste (meist gestoppt)

VPS-Dienste (auf 46.225.70.71):

Domain Dienst
mail.kgva.ch docker-mailserver (Postfix/Dovecot/Rspamd, DKIM)
webmail.kgva.ch SnappyMail
mailadmin.kgva.ch DMS Admin-UI

Mail-Konten: u. a. karim@gabrielevarano.ch (von hosttech migriert), kgva.ch-Adressen. MX → mail.kgva.ch, SPF/DKIM/DMARC gesetzt.


3. Backup

  • PBS (CT100) · Datastore backup auf der Seagate Expansion HDD (USB, xfs, /datastore-hdd, bind in CT100).
  • PVE-Storage: pbs → Datastore backup.
  • Job: täglich 02:30 + 14:30 (2×/Tag), alle Gäste, mode snapshot, inkrementell + dedupliziert.
  • Retention: keep-last=4, keep-daily=7, keep-weekly=4, keep-monthly=3.
  • Kingston XS1000 SSD wurde entfernt/freigeräumt (war der alte Pre-Wipe-Speicher).
  • Reboot-Fix: /etc/tmpfiles.d/zz-pbs-runtime.conf in CT100 (sonst /run/proxmox-backup-EACCES nach Reboot).
  • Wiederherstellung: PBS-WebUI (CT100:8007) oder qmrestore/pct restore aus dem pbs-Storage.

4. Netzwerk / DNS

  • DHCP-Bereich (AdGuard): 192.168.1.1099 → statische IPs immer ≥ .100 wählen.
  • Statische IP für eine CT: PVE net0 auf ip=192.168.1.X/24,gw=192.168.1.1 UND intern /etc/network/interfacesiface eth0 inet static (sonst zieht der Container trotzdem DHCP!).
  • AdGuard-DNS-Rewrites: aktuell keine (immich.gabrielevarano.ch wurde entfernt → Immich nur noch über immich.kgva.ch).
  • Wildcard *.kgva.ch → VPS. gabrielevarano.ch hat eine Wildcard, openbureau.ch/karimgabrielevarano.xyz eigene A-Records.

5. Zugang & Passwörter

  • SSH: ~/.ssh/proxmox_homelab → Host .2 · ~/.ssh/vps_kgva → VPS.
  • Proxmox-UI: https://192.168.1.2:8006 (root@pam). Subscription-Nag ist dauerhaft gepatcht (siehe How-Tos).
  • Glance-Dashboard: http://192.168.1.114:8080 (nur intern/VPN).
  • Service-Logins: sollen alle in Vaultwarden zentralisiert werden (Rotations-Skript: /root/rotate-passwords.py auf dem Host → erzeugt Bitwarden-Import-CSV).
    • ⚠️ Sicherheits-To-do: Viele Dienste nutzen aktuell noch Rationalism2025!. AdGuard: admin / Rationalism2026!. → bei Gelegenheit rotieren.

6. How-Tos

Neuen Dienst hinzufügen

  1. CT anlegen (Debian-Template, unprivilegiert, features nesting=1,keyctl=1, static ip=192.168.1.X/24,gw=…).
  2. /etc/network/interfaces intern auf static stellen.
  3. Docker installieren (curl -fsSL https://get.docker.com | sh) + Dienst per compose.
  4. Im VPS-Caddyfile (/opt/dms-stack/caddy/Caddyfile) Block ergänzen:
    meinedienst.kgva.ch {
        reverse_proxy 192.168.1.X:PORT
    }
    
    dann docker restart dms-caddy (Caddy holt das Cert automatisch, da *.kgva.ch-Wildcard).
  5. Optional: ins Glance-Dashboard (Monitor + Bookmark) aufnehmen.

Proxmox-Subscription-Nag (dauerhaft entfernt)

  • Patch-Script: /usr/local/bin/pve-no-nag.sh (setzt !== 'active'=== 'active' in proxmoxlib.js).
  • apt-Hook /etc/apt/apt.conf.d/no-nag-script re-patcht nach jedem Update.
  • Kommt der Nag mal wieder: nur Browser-Cache (Strg+Shift+R), der Server ist gepatcht.

Glance-Dashboard

  • CT114, Docker, Config in /opt/glance/{config/glance.yml, assets/}.
  • Wichtig: Custom-CSS muss unter server.assets-path (/app/assets) liegen und als /assets/custom.css referenziert werden (aus /app/config liefert Glance es mit 404).
  • Daten-API für die Widgets: Python-Dienst auf dem Host (/opt/zfs-api/zfs_api.py, systemd zfs-api, Port 9099) → /pools /guests /errors /backup /sysinfo /adguard. Plus Glances auf dem Host (systemd glances, Port 61208, -w --disable-webui).

Whiteboard / Collabora (Nextcloud)

  • Beide laufen in CT115. WOPI-Allowlist auf 0.0.0.0/0,::/0 (Tunnel-Routing macht IP-Härtung unpraktikabel).
  • Whiteboard-Verify-Button meldet fälschlich „timeout" — die Echtzeit-Collaboration funktioniert trotzdem.

7. Offene Punkte / To-do

  • openbureau.ch (CT131) — Caddy zeigt auf .131:80, Container existiert noch nicht → 502. openbureau-Suite bauen (Website/dev/app/rapport-server).
  • Passwörter rotieren (/root/rotate-passwords.py --apply) + in Vaultwarden importieren.
  • Master-Passwörter (Vaultwarden) + Rationalism2025! ablösen.
  • Entscheiden: Flarum (CT810) / Obsidian-LiveSync (CT805) zurückbringen?
  • Alte „-old"-Container aufräumen (NACH der Suite-Migration; CT800 mit Altdaten behalten).

Diese Doku wird manuell gepflegt. Bei Änderungen am Setup hier nachziehen.