Files
docu/horus
root 92148f41a7 Doku: tmux OSC-11-Leak (Windows Terminal) + pve2 SSH auf Horus.
Issue und Shared-Config für escape-time/O11-Fix; pve2-Keys in horus-root.pub.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-28 18:38:02 +02:00
..

Horus — VPS (Contabo)

Öffentlicher VPS, WireGuard-Hub und Anwendungsserver. Stand: 2026-06-28 (per Dienst-Discovery erhoben).

Hostname horus.jeanavril.com
Public IP 207.180.222.207
WireGuard-IP 10.1.1.1 (Hub für alle Peers)
OS Debian 12 (bookworm)
Provider Contabo (Zugang via Contabo-Weboberfläche → VNC)

Zugang

  • Wenn ein WG-Tunnel läuft: ssh jean@192.168.10.10 (VM 101) → ssh root@10.1.1.1
  • Wenn alle Tunnel tot sind: über Public-IP ssh root@207.180.222.207 — aber SSH:22 ist per ufw nur über wg0 offen. Notfall: am Contabo-VNC ufw allow ssh, fixen, danach ufw delete allow ssh. VM 101 besitzt den Horus-SSH-Key.
  • ufw: default deny incoming. Offen: 61951/udp (WG), alles auf wg0, plus die unten gelisteten Dienst-Ports.

WireGuard

  • Verwaltung: wg-quick@wg0 (systemd, enabled). Es läuft KEIN wireguard-ui (kein Prozess/Container/Port 5000) — die wg0.conf wurde nur historisch damit erzeugt.
  • Server-Config: /etc/wireguard/wg0.conf (Header sagt „don't edit manually", aber maßgeblich ist, was wg-quick lädt → wg show wg0 / wg showconf wg0 ist die Wahrheit).
  • Client-Keys/Configs: /etc/wireguard/clients/<name>/ (je client.conf, privatekey, publickey, presharedkey), Backup unter /etc/wireguard/bak/. Repo-Kopien: clients/.
  • Listen-Port: 61951/udp. PostUp/PostDown in wg0.conf sind auskommentiert; Forward/NAT über UFW route + Docker-MASQUERADE.
  • Internet-Gateway für Road-Warrior-Clients (pixel7): wireguard-internet-gateway.md — UFW wg0→eth0, Client AllowedIPs inkl. 0.0.0.0/0.
  • Site-to-Site OPNsense/VM 101: kein Full-Tunnel — ../shared/horus-opnsense-wireguard/README.md.
  • Peers sauber löschen (ohne UI): [Peer]-Block aus wg0.conf entfernen + clients/<name>/ löschen + wg syncconf wg0 <(wg-quick strip wg0) (oder systemctl restart wg-quick@wg0).
  • Vorfall NAT/Port siehe ../issues/2026-06-28-vm101-horus-wireguard-nat.md.

Dienste (Docker-Compose-Stacks)

Web-Apps liegen i.d.R. hinter nginx-proxy-manager (Ports 80/443).

Stack Verzeichnis Zweck Ports (extern)
mailcowdockerized /opt/mailcow Kompletter Mailserver (postfix, dovecot, rspamd, sogo, clamd, unbound, mysql, redis …) 25, 465, 587, 110, 143, 993, 995, 4190; Web 8443/8880
infrastructure /opt/infrastructure nginx-proxy-manager (Reverse Proxy) + MariaDB + watchtower 80, 443; Admin 81 nur auf 10.1.1.1 (WG)
sso /opt/sso authentik (SSO / Identity Provider) + postgres + redis 9000, 9443
bind9 (Container) Autoritativer DNS 207.180.222.207:53 tcp/udp
collab /opt/collab HedgeDoc (kollaborative Notizen) + postgres hinter NPM
files /opt/files Caddy File-Server + filebrowser hinter NPM
kifin /opt/projects/kifin App „ai-finance-simulations" hinter NPM
vectorseek /opt/projects/vectorseek App (Port 3000) hinter NPM
website /opt/website gestoppt (Exited vor ~15 Monaten)

Eigene systemd-Dienste

Dienst Zweck
monitor-cert-changes.service /usr/local/bin/monitor_cert_changes.sh — überwacht Zertifikatsänderungen und startet Mailcow-Dienste neu (Teil der Cert-Automation, Certs kommen per rsync von VM 101).
wg-quick@wg0.service WireGuard-Hub
chrony, uptimed, docker, containerd Standard

Shell/Tmux: /root/.tmux.conf — OSC-11-Leak-Fix (Windows Terminal + SSH): ../shared/tmux-windows-terminal-fix.md

Updates / Wartung

  • watchtower (/opt/infrastructure): aktualisiert per WATCHTOWER_LABEL_ENABLE=true nur Container mit Label com.centurylinklabs.watchtower.enable=true (aktuell faktisch nur sich selbst). mailcow & Stacks sind bewusst ausgenommen.
  • mailcow: hat keine Auto-Update-Automatik (kein cron/Timer). Updates manuell/kontrolliert via cd /opt/mailcow && ./update.sh (Multi-Container-Stack mit Migrationen — watchtower darf das nicht, würde nur Images blind tauschen).

Bekannte Probleme / Historie

  • 2026-06-28: watchtower crash-loop behobencontainrrr/watchtower:latest pinnt intern Docker-API 1.25 (Daemon verlangt min 1.40). Fix: DOCKER_API_VERSION=1.40 in der watchtower-environment (in /opt/infrastructure/docker-compose.yml). Läuft seitdem sauber als „Watchtower 1.7.1".