Infrastructure
This document describes the infrastructure design for mutx.dev, including VPC architecture, bare-metal provisioning, network topology, and security zones.
VPC Design
Overview
mutx.dev uses a multi-tenant VPC architecture where each customer receives a dedicated Virtual Private Cloud. This ensures complete isolation and eliminates "noisy neighbor" problems.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β mutx.dev Control Plane β
β (Railway + Vercel) β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β mutx API (FastAPI) β β
β β - Agent management β β
β β - Deployment orchestration β β
β β - Tenant provisioning β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β β API Calls β
β βΌ β
β ββββββββββββββββββββββββββββ β
β β Terraform Cloud/Local β β
β β Provisioning Engine β β
β ββββββββββββββ¬βββββββββββββ β
ββββββββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββββββββββββ
β
ββββββββββββββββββββΌβββββββββββββββββββ
β β β
βΌ βΌ βΌ
ββββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββββββββ
β Tenant VPC A β β Tenant VPC B β β Tenant VPC C β
β (Customer 1) β β (Customer 2) β β (Customer 3) β
β 10.0.1.0/24 β β 10.0.2.0/24 β β 10.0.3.0/24 β
ββββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββββββββ
VPC Specification
Each tenant VPC is provisioned on DigitalOcean with the following configuration:
| Parameter | Value |
|---|---|
| Region | Customer-selected (NYC, SFO, AMS, etc.) |
| VPC CIDR | /24 (256 addresses) |
| Subnets | 1x /24 (agent tier) |
| Internet Gateway | Egress only (no inbound) |
| DHCP | Managed (10.0.x.0/24 range) |
Bare-Metal Provisioning
Provisioning Pipeline
The provisioning pipeline follows a two-stage approach:
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β User Request β ββββΆ β Terraform β ββββΆ β Ansible β
β (API/CLI) β β (IaC) β β (Config) β
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β β β
β β β
βΌ βΌ βΌ
βββββββββββ βββββββββββββββ βββββββββββββββ
β Create β β VPC + β β Docker + β
β Tenant β β Compute β β Services β
βββββββββββ βββββββββββββββ βββββββββββββββ
Terraform Configuration
The Terraform provisioning (infrastructure/ansible/playbooks/provision.yml) creates:
- Droplet (Compute)
- Size: Customer-selected (starting 4GB RAM)
- Image: Ubuntu 22.04 LTS
- VPC: Tenant VPC
- Networking
- Private networking enabled
- Floating IP (optional, for management)
- Storage
- Volume for data (optional)
- Snapshots enabled
Ansible Configuration
After Terraform provisions the compute, Ansible configures:
| Role | Purpose |
|---|---|
| docker | Install Docker, configure daemon |
| postgresql | PostgreSQL 15 with pgvector |
| redis | Redis with password auth |
| tailscale | Zero-trust VPN mesh |
| ufw | Firewall rules |
| fail2ban | Intrusion prevention |
| agent | Deploy agent containers |
Inventory Structure
# infrastructure/ansible/inventory.ini
[agents]
agent-01 ansible_host=10.0.1.10 ansible_user=ubuntu
agent-02 ansible_host=10.0.1.11 ansible_user=ubuntu
agent-03 ansible_host=10.0.1.12 ansible_user=ubuntu
[monitoring]
monitor-01 ansible_host=10.0.2.10 ansible_user=ubuntu
[all:vars]
ansible_python_interpreter=/usr/bin/python3
ansible_ssh_common_args='-o StrictHostKeyChecking=no'
Network Topology
Network Diagram
βββββββββββββββββββββββββββββββββββββββ
β Public Internet β
βββββββββββββββββββββββββββββββββββββββ
β
β HTTPS/WSS
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β EDGE (Vercel/Railway) β
β ββββββββββββββββββββββββββββ β
β β TLS Termination β β
β β DDoS Protection β β
β β CDN (Static Assets) β β
β ββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
β Private Network
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CONTROL PLANE (Railway) β
β ββββββββββββββββββββββββββββ β
β β mutx API (FastAPI) β β
β β PostgreSQL (Metadata) β β
β β Redis (Queue/Cache) β β
β ββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
β Tailscale ZTNA
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β TENANT VPC (10.0.1.0/24) β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Agent Subnet (10.0.1.0/24) β β
β β β β
β β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β β
β β β Agent 01 β β Agent 02 β β Agent 03 β β β
β β β 10.0.1.10 β β 10.0.1.11 β β 10.0.1.12 β β β
β β β ββββββββββ β β ββββββββββ β β ββββββββββ β β β
β β β βDocker β β β βDocker β β β βDocker β β β β
β β β βAgent 10β β β βn8n β β β βLangChn β β β β
β β β ββββββββββ β β ββββββββββ β β ββββββββββ β β β
β β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β β
β β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β EvalView Guard (10.0.1.5) - Local LLM Judge β β β
β β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β β
β β β β Input Validation β Output Sanitization β Anomaly β β β β
β β β β β β Detection β β β β
β β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Data Services Subnet (10.0.1.128/25) β β
β β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β β
β β β PostgreSQL β β Redis β β Vector DB β β β
β β β 10.0.1.130 β β 10.0.1.131 β β 10.0.1.132 β β β
β β β (pgvector) β β (Cache) β β (Embeddings)β β β
β β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Management Subnet (10.0.2.0/24) β β
β β ββββββββββββββββ ββββββββββββββββ β β
β β β Monitoring β β Tailscale β β β
β β β 10.0.2.10 β β Gateway β β β
β β ββββββββββββββββ ββββββββββββββββ β β
β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
IP Address Allocation
| Range | Purpose | Hosts |
|---|---|---|
| 10.0.1.0/27 | Reserved | - |
| 10.0.1.32/27 | Agent pool | 30 agents |
| 10.0.1.64/27 | EvalView | 1 guardrail VM |
| 10.0.1.128/27 | Data services | PostgreSQL, Redis, Vector DB |
| 10.0.1.192/26 | Reserved | Future use |
| 10.0.2.0/24 | Management | Monitoring, Tailscale node |
Security Zones
Zone Architecture
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SECURITY ZONES β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β ZONE 0: UNTRUSTED β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Public Internet β β β
β β β - No direct access to tenant resources β β β
β β β - All traffic through edge + Tailscale β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β ZONE 1: SEMI-TRUSTED β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Control Plane (Railway) β β β
β β β - mutx API β β β
β β β - Tenant management β β β
β β β - Terraform orchestration β β β
β β β Auth: JWT, API keys β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β Tailscale ZTNA β
β βΌ β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β ZONE 2: TRUSTED β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β Tenant VPC (Isolated) β β β
β β β β β β
β β β βββββββββββββββ βββββββββββββββ βββββββββββββββ β β β
β β β β DMZ Layer β β App Layer β β Data Layer β β β β
β β β β (EvalView) β β (Agents) β β (DBs) β β β β
β β β β β β β β β β β β
β β β β - Input β β - Agent 10 β β - PostgreSQLβ β β β
β β β β filter β β - n8n β β - Redis β β β β
β β β β - Output β β - LangChainβ β - Vector β β β β
β β β β sanitizeβ β β β Store β β β β
β β β βββββββββββββββ βββββββββββββββ βββββββββββββββ β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Firewall Rules (UFW)
From infrastructure/ansible/playbooks/provision.yml:
ufw_rules:
- rule: allow
port: "22"
comment: "SSH (restricted via key)"
- rule: allow
port: "5432"
comment: "PostgreSQL (local only)"
- rule: allow
port: "6379"
comment: "Redis (local only)"
- rule: allow
port: "8080"
comment: "Agent API (Tailscale only)"
Network Segmentation
| Component | Zone | Access | Notes |
|---|---|---|---|
| EvalView Guard | DMZ | Agents β Guard β Out | Input/output validation |
| Agent Containers | App | Guard β Agent | Tool execution |
| PostgreSQL | Data | Agent β DB | Via Unix socket |
| Redis | Data | Agent β Redis | Password protected |
| Tailscale | Mgmt | All | WireGuard mesh |
Service Communication
Internal Communication
All inter-service communication within a tenant VPC uses:
- Private Networking: 10.0.x.x addresses
- Service Mesh: Tailscale for encryption
- Authentication: Service-specific tokens
External Communication
| Direction | Method | Security |
|---|---|---|
| Agent β LLM Provider | HTTPS | API key in Vault |
| Agent β Vector DB | Unix socket | Local only |
| Tenant β Agent | Tailscale | WireGuard + Auth |
| Control β Tenant | Tailscale | mTLS via Tailscale |
