# Final Server Architecture (Approved Jul 9, 2026) ## Base Standard All new netcup servers: RS 4000 G12 (12C/32GB/1TB, ~$44/mo). Exceptions: Core (existing RS 2000), app1-bu (Hetzner CPX11). ## Server Roles | Box | Model | ~$/mo | Role | What it runs | |-----|-------|-------|------|-------------| | Core | RS 2000 | $24 | Ops hub | Hermes, Caddy, Portal, Docker (Vaultwarden, DocuSeal, Twenty, SearXNG), Prometheus/Grafana, Ollama (fallback), Uptime-Kuma, WireGuard, Tailscale | | app1 | RS 4000 | $44 | AI/ML | LiteLLM (primary, admin-ai.itpropartner.com), Open WebUI, Ollama (primary), Qdrant, n8n | | app2 | RS 4000 | $44 | Infrastructure | UNMS/UISP (10 containers), UniFi Controller (Java+MongoDB), Hudu (5 containers), Traccar (Java+26 ports) | | app3 | RS 4000 | $44 | Web apps | WordPress/Apex, other WP sites (from wphost02/SiteGround) | | app1-bu | CPX11 | $8 | Warm standby | Stays at Hetzner, StrongSwan/L2TP, watchdog | ## Migration Status | Source | Target | Status | |--------|--------|--------| | ai.itpropartner.com (Hetzner CPX41) | app1 | Pending — admin-ai zero downtime critical | | n8n (Hetzner CPX11) | app1 | Pending | | unms.forefrontwireless.com (CPX21) | app2 | Planned | | unifi (CPX21) | app2 | Planned | | hudu.itpropartner.com (CPX21) | app2 | Planned | | fleettracker360 (CPX11) | app2 | Planned | | wphost02 (CPX21) | app3 | Planned | | docker host NPM/RustDesk | Discard | Caddy replaces NPM | ## Constraints - admin-ai zero downtime: provision app1 LiteLLM first, test, switch DNS, 7-day fallback - Ollama on Core stays as secondary fallback (if app1 goes down) - n8n on app1 for direct Ollama access - Docker standard: /root/docker//, healthchecks, resource limits, .env - app1-bu stays at Hetzner - WISP discussion tabled, router API in backlog