Skip to content
Security hardening, live updates and lease fixes
Verlocx

Architecture

One server runs Verlocx: a reverse proxy, the portal, the backend relay and PostgreSQL. Guests connect out to it; it connects to your hypervisor and directory.

USERS & GUESTSVERLOCX SERVERYOUR INFRASTRUCTUREHTTPS 443:3000/vnc · wsswss :8788 /ws/portalSQLwss :8787 · outboundBrowserusers · adminsGuest VMsVerlocx agent (Windows service)Reverse proxyTraefik · TLS · :80 / :443PortalNext.js · container :3000BackendRust relay · wss :8787 · :8788PostgreSQL 16host · :5432Proxmox VEAPI :8006 · SSH :22Active DirectoryLDAP :389 / :636Mail serverSMTP :587Microsoft Entra IDsign-in · HTTPS :443VMware vCenterAPI :443 · in preparation
Arrows point from the side that opens the connection. The dashed frame is the Verlocx server; everything inside it runs on one host.

Components

ComponentRuns asDoes
Reverse proxyTraefik containerTLS for the portal; routes the portal and the browser console (/vnc) to the right container.
PortalNext.js container, port 3000The web app and REST API. Holds the rules — RBAC, quotas, templates, leases — and runs the scheduler, deployments and configuration runs.
BackendRust container, ports 8787 (agents, console relays) and 8788 (portal only, internal)Relay between portal and agents: commands, live status, metrics, deployment progress, console sessions. Proves its identity to agents with an Ed25519 key; accepts the portal only with the portal's own secret.
PostgreSQL 16On the host, port 5432All portal data. Credentials (domain-join account, cluster tokens, SMTP) are stored encrypted with VERLOCX_DB_ENCRYPTION_KEY.
Verlocx agentWindows service in the guestIdentity (rename, domain join, local admins), workflow steps, scripts, metrics, disk scans, self-updates.

How a VM gets deployed

  1. A user requests a VM. The portal checks the project's rules (template, size, quota, name, VMID) and stores the request.
  2. The portal clones the template on Proxmox, gives the clone a unique SMBIOS UUID and starts it.
  3. On first boot the agent reads that UUID, connects out to the backend and authenticates — the portal now knows which VM it is.
  4. The portal sends the workflow's guest steps through the backend: rename, domain join (reboots are resumed), local admins, scripts.
  5. Last, the portal places the VM in its backup job and HA rule. Every step and its timing is visible live on the VM page.

Design principles

  • Guests only connect out. No inbound port is opened on a VM for Verlocx.
  • Pinned identity. Agents trust exactly one backend key; a different host can't impersonate it.
  • The database is the truth. Live hypervisor state is reconciled into it; the UI reads one consistent model.
  • Everything is audited. Every change — in the UI or through the API — writes an activity entry.

The exact rules for each connection are in Firewall & ports.

Connection flows

A command to a guest

  1. A user clicks an action, or a workflow step is due — the portal checks the permission and writes an activity entry.
  2. The portal sends the command to the backend over its /ws/portal connection.
  3. The backend forwards it to the agent of that VM over the agent's own outbound connection.
  4. The agent runs it locally and reports progress and the result back the same way.

A browser console session

  1. The user opens the console; the portal asks Proxmox for a one-time console ticket.
  2. The browser opens a WebSocket to /vnc on the Verlocx server; the proxy hands it to the backend.
  3. The backend relays the session to the node — the user never connects to the hypervisor directly.

Live status in the browser

  1. Agents report metrics every few seconds; the backend passes them to the portal.
  2. The portal pushes changes to open browsers as server-sent events — bursts are coalesced so many tabs stay fast.

Security model

  • Agents authenticate with their own key after a one-time enrollment, and verify the backend's key on every connection. An enrolled identity can't be taken over: enrolling again with a different key needs the agent offboarded first.
  • The portal authenticates to the backend with its own secret, on a separate listener guests can't reach. The agents' bootstrap secret only enrolls agents — a VM can't pose as the portal.
  • Users sign in with directory accounts; every action is checked against their roles in that project.
  • Secrets — domain-join password, cluster credentials, SMTP — are encrypted at rest and never sent to browsers. The join password reaches only the agent that needs it.
  • API keys act with their owner's rights, limited further by scopes and projects.

Availability

Verlocx runs as one portal instance: the scheduler, deployment runners and live updates live in that process. If the server restarts, interrupted deployments are picked up again and interrupted configuration runs are marked as such. Agents simply reconnect. For recovery, back up the database, .env.local and the backend's key files — see Back up and move.

Next up

See Verlocx in action

A 30-minute walkthrough on your use case — deployments, workflows, governance.

Hypervisor

We use your details only to handle this request — privacy policy.

Type to search the docs, the user guide, all features, the product pages and the changelog.

↑ ↓ to move↵ to openesc to close