92148f41a7
Issue und Shared-Config für escape-time/O11-Fix; pve2-Keys in horus-root.pub. Co-authored-by: Cursor <cursoragent@cursor.com>
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 überwg0offen. Notfall: am Contabo-VNCufw allow ssh, fixen, danachufw delete allow ssh. VM 101 besitzt den Horus-SSH-Key. - ufw: default deny incoming. Offen:
61951/udp(WG), alles aufwg0, plus die unten gelisteten Dienst-Ports.
WireGuard
- Verwaltung:
wg-quick@wg0(systemd, enabled). Es läuft KEIN wireguard-ui (kein Prozess/Container/Port 5000) — diewg0.confwurde nur historisch damit erzeugt. - Server-Config:
/etc/wireguard/wg0.conf(Header sagt „don't edit manually", aber maßgeblich ist, waswg-quicklädt →wg show wg0/wg showconf wg0ist die Wahrheit). - Client-Keys/Configs:
/etc/wireguard/clients/<name>/(jeclient.conf,privatekey,publickey,presharedkey), Backup unter/etc/wireguard/bak/. Repo-Kopien: clients/. - Listen-Port:
61951/udp. PostUp/PostDown inwg0.confsind auskommentiert; Forward/NAT über UFW route + Docker-MASQUERADE. - Internet-Gateway für Road-Warrior-Clients (pixel7): wireguard-internet-gateway.md — UFW
wg0→eth0, ClientAllowedIPsinkl.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 auswg0.confentfernen +clients/<name>/löschen +wg syncconf wg0 <(wg-quick strip wg0)(odersystemctl 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 perWATCHTOWER_LABEL_ENABLE=truenur Container mit Labelcom.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 behoben —
containrrr/watchtower:latestpinnt intern Docker-API1.25(Daemon verlangt min1.40). Fix:DOCKER_API_VERSION=1.40in der watchtower-environment(in/opt/infrastructure/docker-compose.yml). Läuft seitdem sauber als „Watchtower 1.7.1".