Files
docu/horus
root eb3ecbe682 docu: Step-A-NAT präzisiert, watchtower-Fix + mailcow-Update-Status
- opnsense-step-a-nat.md: genaue GUI-Schritte (warum SNAT auf 10.1.1.22 nötig, Aliase, Outbound-NAT, Firewall, Test)
- horus/README.md: watchtower-Crashloop behoben (DOCKER_API_VERSION=1.40), mailcow ohne Auto-Update dokumentiert

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 16:09:05 +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/.
  • Listen-Port: 61951/udp. PostUp/PostDown setzen iptables FORWARD/NAT.
  • 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

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".