8.7 KiB
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 | |
| app2 | ai.itpropartner.com, admin-ai, ollama.itpropartner.com | RS 2000 G12 | 8 core, 16GB, 512GB | Open WebUI, LiteLLM, Ollama | |
| app3 | auto.itpropartner.com, marketing, docs, gps, unifi, unms | RS 2000 G12 | 8 core, 16GB, 512GB | N8N, Mautic, Hudu, Traccar, UniFi, UISP | |
| app4 | WordPress websites | RS 1000 G12 | 4 core, 8GB, 256GB | Nginx + PHP-FPM + MySQL | |
| 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 | ~€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) | ~€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)
- Order RS 2000 G12 (app2) + RS 2000 G12 (app3) in Manassas — 1-month billing
- Add RS 1000 G12 (app1+app4) optionally later
- Base OS: Ubuntu 24.04 LTS per box
- Deploy wisp_rsa SSH key to each
- Establish L2TP/IPsec VPN from app3 (management hub)
- Point Cloudflare DNS at new IPs via Cloudflare API
- Cancel RunCloud (~€15-20/mo savings) after WordPress migrated
Phase 2: Move Hermes + VPN (Day 1-2)
- Install Hermes on app3
- Transfer profiles, skills, sessions from old
agentbox - Point Telegram bot webhook at new Hermes instance
- Keep old agent running 48h as rollback
Phase 3: Move Apps (Day 2-5)
- Docker containers (N8N, Mautic) → app3 — docker save/load + env vars
- Traccar → app3 — PostgreSQL dump + restore
- UniFi Controller → app3 — backup export from old, import + readopt devices
- UNMS/UISP → app3 — MongoDB dump + Ubiquiti migration tools
- Hudu → app3 — Docker compose transfer + PostgreSQL restore
- Open WebUI + Ollama + LiteLLM → app2 — model volumes, chroma DB, proxy config
- WordPress → app4 — WP-CLI DB dump + rsync wp-content
- Portal → app1 — fresh FastAPI project deployment
Phase 4: Decommission (Day 7+)
After 7 days with zero issues:
- Cancel Hetzner (save ~$150/mo)
- Cancel RunCloud (save ~€15-20/mo)
- Update all DNS records
- 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=hostfor 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:
- Admin — full access, billing, user management, server controls
- Manager — customer CRUD, team management, device operations
- Agent — ticket handling, phone system ops, read customer data
- Viewer — read-only: phone logs, call recordings, ticket history. No create/edit/delete. No server controls (reboot/restart). No billing/admin access.