Files
smueller e37ea87b35
Some checks failed
CI / Go — node-agent tests (push) Has been cancelled
CI / Go — edge-gateway build (push) Has been cancelled
CI / Node — lint, typecheck, test, build (push) Has been cancelled
initial commit
2026-06-26 10:45:08 +02:00

2.9 KiB
Raw Permalink Blame History

Architecture overview

HexaHost GameCloud is a self-hosted, multi-tenant platform for on-demand Minecraft servers.

High-level diagram

flowchart TB
    subgraph users [Users]
        Browser[Web Browser]
        MC[Minecraft Client]
    end

    subgraph control [Control Plane]
        Web[Next.js Web]
        API[NestJS API]
        Worker[BullMQ Worker]
        PG[(PostgreSQL)]
        Redis[(Redis)]
        S3[(S3 / MinIO)]
    end

    subgraph nodes [Game Nodes]
        Agent[Go Node Agent]
        Docker[Docker Engine]
        Server[Minecraft Containers]
    end

    subgraph future [Phase 8+]
        Edge[Edge Gateway]
    end

    Browser --> Web
    Web --> API
    API --> PG
    API --> Redis
    Worker --> Redis
    Worker --> PG
    Worker --> S3
    API <-->|mTLS WebSocket| Agent
    Agent --> Docker
    Docker --> Server
    MC --> Server
    MC -.-> Edge
    Edge -.-> API

Component responsibilities

Control plane

Runs on one or more VMs (Ubuntu 24.04 / Debian 13). Handles authentication, server metadata, scheduling decisions, billing projection, and job orchestration. Never mounts the Docker socket.

Game nodes

Dedicated Linux VMs with Docker Engine (cgroup v2). Each node runs the node-agent as a systemd service. The agent connects outbound to the API via mTLS WebSocket and executes signed lifecycle commands locally.

Data flow

  1. User creates a server via the web UI.
  2. API persists state in PostgreSQL and enqueues provisioning jobs.
  3. Worker selects a node, reserves resources, and sends server.provision to the agent.
  4. Agent creates an isolated container and reports server.state transitions.
  5. Backups stream to S3; metadata stays in PostgreSQL.

Security boundaries

Boundary Mechanism
User → API HTTPS, session cookies, CSRF, rate limits
API → Agent mTLS, node token, signed JSON messages
Agent → Docker Local Unix socket only, no remote exposure
Game container → Internet Egress rules, no internal network access by default

Repository layout

See ADR 0001 for the full monorepo structure.

Protocol

Agent communication uses versioned JSON envelopes over WebSocket. Message types include agent.hello, agent.heartbeat, server.start, and server.state. See apps/node-agent/internal/protocol/messages.go.

Deployment models

Environment Mechanism
Local development deploy/compose/compose.dev.yml
Production control plane Docker Compose + Traefik
Game nodes Ansible + systemd node-agent

Phase roadmap

Phase Focus
0 Repository, infra, CI, docs
1 Authentication
2 Single-node vertical slice
37 Panel features, multi-node, idle shutdown
8 DNS, edge gateway, join-to-start
9 Billing, production hardening