# 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//` (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//` 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](../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 | ## Bekannte Probleme - ⚠️ **`infrastructure-watchtower-1` crash-loopt** (`Restarting`). Log: *„client version 1.25 is too old. Minimum supported API version is 1.40"* — watchtowers Docker-API-Client ist zu alt für den Docker-Daemon. **Auto-Updates der Container laufen dadurch nicht.** Fix: watchtower-Image aktualisieren (`docker compose pull && up -d` in `/opt/infrastructure`) oder entfernen.