# Netcup RS G12 Server Consolidation Plan ## Overview Replace 9 Hetzner Cloud VPSes (~$150/mo) with 2-4 Netcup RS G12 dedicated servers in Manassas, VA (US East Coast) for ~$55-86/mo with dedicated EPYC cores, DDR5 ECC RAM, NVMe storage, and 2.5Gbps networking. ## Current Estate (Hetzner, ~$150/mo) | Server | Type | Role | IP | |--------|------|------|-----| | `agent` | CPX11 | Hermes, VPN, backups | 5.161.114.8 | | `wphost02` | CPX21 | WordPress (RunCloud) | 5.161.62.38 | | `unms.forefrontwireless.com` | CPX21 | UNMS (UISP) | 5.161.225.131 | | `unifi` | CPX21 | UniFi Controller | 178.156.131.57 | | `hudu.itpropartner.com` | CPX21 | Hudu docs | 178.156.130.130 | | `fleettracker360` | CPX11 | Traccar GPS | 178.156.149.32 | | `docker` | CPX11 | Docker host (N8N, Mautic) | (internal) | | `ai.itpropartner.com` | CPX41 | Open WebUI, LiteLLM | 178.156.167.181 | | `app1.itpropartner.com` | CPX11 | Apps/API | 87.99.144.163 | ## Proposed Architecture — 4-Box Layout (User-Approved) The user prefers **multiple isolated boxes** (not a single consolidated server) for fault isolation. One box goes down, others keep running. Acceptable: app1+app4 can share if needed for cost optimization. ### Box Layout | Box | DNS | Plan | Resources | Apps | Monthly (Manassas) | |-----|-----|------|-----------|------|--------------------| | **app1** | portal.itpropartner.com | RS 1000 G12 | 4 core, 8GB, 256GB | IT Pro Partner Portal | ~€14.55 (~$16) | | **app2** | ai.itpropartner.com, admin-ai, ollama.itpropartner.com | RS 2000 G12 | 8 core, 16GB, 512GB | Open WebUI, LiteLLM, Ollama | ~€25.51 (~$27) | | **app3** | auto.itpropartner.com, marketing, docs, gps, unifi, unms | RS 2000 G12 | 8 core, 16GB, 512GB | N8N, Mautic, Hudu, Traccar, UniFi, UISP | ~€25.51 (~$27) | | **app4** | WordPress websites | RS 1000 G12 | 4 core, 8GB, 256GB | Nginx + PHP-FPM + MySQL | ~€14.55 (~$16) | | **Total** | | | | | **~€80/mo ($86)** | ### Alternative: 2-Box Lean (app1+app4 together) | Box | Plan | Cost | |-----|------|------| | **app1+app4** (shared RS 1000) | RS 1000 G12 | ~$16 | | **app2+app3** (shared RS 2000) | RS 2000 G12 | ~$27 | | **Total** | | **~$43/mo** | ### Alternative: Single RS 4000 (user rejected — want isolation) An RS 4000 G12 (12 core, 32GB, 1TB NVMe, ~€40/mo) can run everything. User rejected this approach — prefers multiple boxes so a failure takes down only one service group. ## Netcup vs Hetzner Comparison (July 2026) ### Dedicated Servers — The Real Need IT Pro Partner needs US servers (all customers US-based). Hetzner has NO US datacenters for cloud servers — only Germany/Finland. Netcup has Manassas, VA. | Spec | Netcup RS 2000 G12 | Hetzner CCX23 | |------|-------------------|---------------| | **CPU** | **8 dedicated** EPYC 9645 (Zen 5) | 4 dedicated EPYC | | **RAM** | 16 GB DDR5 ECC | 16 GB | | **Storage** | **512 GB NVMe** | 160 GB NVMe | | **Network** | **2.5 Gbps** (dedicated bandwidth) | 10 Gbps (shared) | | **Traffic** | Flat (3TB/24h soft cap ≈ 90 TB/mo) | 20 TB | | **US Location** | **✅ Manassas, VA** | ❌ No | | **12-mo price** | €21.22/mo | €85.99/mo | | **Monthly billing** | **~€25.51/mo (~$27)** | ~€85.99/mo | | **Cores per euro** | **0.37 cores/€** | 0.05 cores/€ | | **GB storage per €** | **23.8 GB/€** | 1.9 GB/€ | Netcup is **3.4x cheaper** with double the cores and triple the storage — and actually in the US. ### VPS Lineup (for comparison) | Spec | Netcup VPS 2000 G12 | Netcup VPS 4000 G12 | Hetzner CX43 | |------|-------------------|-------------------|--------------| | vCores | **8 vCore** (EPYC 9645) | **12 vCore** | 8 shared | | RAM | 16 GB DDR5 ECC | 32 GB DDR5 ECC | 16 GB | | Storage | **512 GB NVMe** | **1 TB NVMe** | 160 GB | | Network | 2.5 Gbps | 2.5 Gbps | 10 Gbps (shared) | | US Location | ✅ | ✅ | ❌ | | Monthly (Manassas) | ~€19.08 (~$20) | ~€30.14 (~$32) | ~€15.99 | | Notes | Shared vCPU, no dedicated guarantee | Shared vCPU, no dedicated guarantee | Grandfathered price, shared + throttled | **Note:** VPS pricing at Netcup is competitive but uses **shared vCPU** — the RS (dedicated) line costs ~€6 more per tier for guaranteed cores. For production workloads, the RS line is a better choice. ### Verdict | Factor | Winner | |--------|--------| | **Price per dedicated core** | Netcup (8x more cores/€) | | **US datacenter** | Netcup (only option) | | **Storage** | Netcup (12x more GB/€) | | **Monthly billing flexibility** | Both offer month-to-month | | **Cloud API polish** | Hetzner (snapshots-as-service) | | **Hourly billing** | Hetzner (more flexible) | | **ARM instances** | Hetzner (CAX line) | For IT Pro Partner: **Netcup RS G12 in Manassas**. No contest. ## Migration Phases ### Phase 1: Provision Netcup (Day 1) 1. Order RS 2000 G12 (app2) + RS 2000 G12 (app3) in Manassas — 1-month billing 2. Add RS 1000 G12 (app1+app4) optionally later 3. Base OS: Ubuntu 24.04 LTS per box 4. Deploy wisp_rsa SSH key to each 5. Establish L2TP/IPsec VPN from app3 (management hub) 6. Point Cloudflare DNS at new IPs via Cloudflare API 7. Cancel RunCloud (~€15-20/mo savings) after WordPress migrated ### Phase 2: Move Hermes + VPN (Day 1-2) 1. Install Hermes on app3 2. Transfer profiles, skills, sessions from old `agent` box 3. Point Telegram bot webhook at new Hermes instance 4. Keep old agent running 48h as rollback ### Phase 3: Move Apps (Day 2-5) 1. **Docker containers** (N8N, Mautic) → app3 — docker save/load + env vars 2. **Traccar** → app3 — PostgreSQL dump + restore 3. **UniFi Controller** → app3 — backup export from old, import + readopt devices 4. **UNMS/UISP** → app3 — MongoDB dump + Ubiquiti migration tools 5. **Hudu** → app3 — Docker compose transfer + PostgreSQL restore 6. **Open WebUI + Ollama + LiteLLM** → app2 — model volumes, chroma DB, proxy config 7. **WordPress** → app4 — WP-CLI DB dump + rsync wp-content 8. **Portal** → app1 — fresh FastAPI project deployment ### Phase 4: Decommission (Day 7+) After 7 days with zero issues: 1. Cancel Hetzner (save ~$150/mo) 2. Cancel RunCloud (save ~€15-20/mo) 3. Update all DNS records 4. Final S3 backup before teardown ## What We Need From User | Item | When | Blocking | |------|------|----------| | Netcup account + order in Manassas | Phase 1 | Yes — can't start without servers | | SSH key (wisp_rsa already exists) | Phase 1 | Deployable | | Cloudflare API token (Zone:DNS:Edit) | Phase 1 | Replaces RunCloud DNS | | Hudu API key + URL | Phase 3 | For docs sync | | UniFi API key | Phase 3 | For monitoring | | SyncroMSP API key | Phase 3 | For ticketing | | RingLogix OAuth | Future | VoIP provisioning | | Stripe/Xero API keys | Future | Billing integration | ## Per-Box Docker Compose Stack Notes ### app1 — Portal - FastAPI + HTMX + Tailwind - PostgreSQL (portal DB) - Redis (sessions/cache) - Nginx (reverse proxy + SSL) ### app2 — AI - Open WebUI (Docker) - Ollama (Docker + model volumes under `/opt/ollama`) - LiteLLM (Docker config with `config.yaml`) - Nginx (reverse proxy + SSL per subdomain) ### app3 — Apps (management hub) - N8N (Docker + SQLite or PostgreSQL for workflow state) - Mautic (Docker + MySQL/MariaDB) - Hudu (Docker + PostgreSQL) - Traccar (Docker + PostgreSQL) - UniFi Controller (Docker, needs `--net=host` for device adoption) - UISP (Docker + MongoDB) - StrongSwan + xl2tpd (VPN to home CCR) - Nginx (reverse proxy per subdomain) ### app4 — WordPress - Nginx + PHP-FPM - MariaDB - certbot or Cloudflare origin certs - Redis object cache (optional) - WP-CLI for backup/sync ## RunCloud Replacement Details RunCloud only backs up web apps — it has no reach into UNMS, UniFi, Traccar, Hudu, Docker containers, or anything that isn't a PHP web app. The S3 pipeline already built handles everything: | RunCloud Feature | Replacement | |---|---| | WordPress Nginx/PHP config | Manual nginx config + certbot | | Staging sites | `wp-cli` clone + DB dump | | SSL certs | Certbot cron or Cloudflare edge certs | | Cloudflare DNS | Cloudflare v4 API (portal will handle this) | | Backups (web apps only) | S3 pipeline covers ALL apps, not just web | | Monitoring | Beszel on the box | Savings: ~€15-20/mo Prerequisite: Cloudflare API token with Zone:DNS:Edit permission ## Portal Viewer/Observer Role The portal will need RBAC for scenarios like: - Customer employees who need to see phone logs but NOT modify anything - Read-only access to call recordings, ticket history, billing Role hierarchy: 1. **Admin** — full access, billing, user management, server controls 2. **Manager** — customer CRUD, team management, device operations 3. **Agent** — ticket handling, phone system ops, read customer data 4. **Viewer** — read-only: phone logs, call recordings, ticket history. No create/edit/delete. No server controls (reboot/restart). No billing/admin access.