Skip to main content

Self-hosted Setup

For teams with strict data-residency or air-gapped requirements.

What you'll deploy

ComponentTechNotes
Vibecontrols backendA stateful API serviceContainer, 3+ replicas behind a load balancer
Postgres18+ with the graph extension extensionReplication recommended
Redis7+For cache + the event bus events
Web app (the Vibecontrols web app)React 19 + Vite 7 + Tailwind v4Build → S3 + CDN
Plannotator portal (optional)Node serviceIf you use the plan plugin
frps (optional)Free open-sourceOnly if you use VibeTunnels (frp) tunnels

Prerequisites

  • Postgres
  • Redis 7+ (or compatible — Redis, ElastiCache, etc.)
  • Container runtime (Docker/our previous orchestrator/our cloud platform/ECS)
  • TLS-terminating reverse proxy (nginx, Caddy, ingress controller)
  • A schema registry for federation (we use the schema registry; you can self-host)

High-level steps

  1. Provision Postgres + Redis
  2. Apply backend migrations (single command on the backend container; see your release notes for the exact invocation)
  3. Build + push the backend container to your registry
  4. Deploy backend (3+ replicas) behind LB
  5. Build + deploy the web app (bun run build then sync to S3/static host)
  6. Configure the platform gateway to include the Vibecontrols backend
  7. Configure required Configuration entries (see below)
  8. Smoke-test with a fresh install of the agent

Required Configuration entries

After backend is up, set these via vibecontrols config set --scope GLOBAL:

KeyExample
platform.web.publicUrlhttps://app.your-vibecontrols.example.com
platform.graphql.publicUrlhttps://api.your-vibecontrols.example.com/graphql
tunnel.providercloudflare or vibetunnels
tunnel.vibetunnels.frpsUrl(if using VibeTunnels)
tunnel.vibetunnels.frpsAuth(if using VibeTunnels — mark isSecret)
agent.updates.installScriptUrlOptional — for self-hosted agent updates

Reference repos

  • Plannotator portal (only if you use the plan plugin)

Detailed runbook

Internal runbooks are at ~/products/confidential/servers/ (not public). Contact vignesh@burdenoff.com for the redacted public version.

Next steps