Running in dev mode
Each component run per-process, straight from source - not containers; see
Docker Compose or Kubernetes for that instead.
Each step below is per-repository; see each repo’s own README.md for detail.
1. Backing services
Section titled “1. Backing services”Run PostgreSQL, RabbitMQ and Valkey (plus guacd for the Console tab, and an
OIDC provider unless you use dev-bypass). Use the
minimal Compose file, or any equivalent -
managed services work too.
Default local endpoints assumed by the other repos’ .env.example files:
| Service | Endpoint | Credentials |
|---|---|---|
| PostgreSQL | localhost:5432 |
ovc / ovc123, db ovc |
| RabbitMQ | localhost:5672 (UI 15672) |
ovc / ovc123 |
| Valkey | localhost:6379 |
- |
| guacd | localhost:4822 |
- (ovc-frontend’s GUACD_URL default) |
2. Backend - ovc-backend
Section titled “2. Backend - ovc-backend”API + worker. The database starts empty.
cp .env.example .env # defaults match the endpoints abovealembic upgrade headuvicorn app.main:app --reload --port 8000 # terminal 1python -m app.worker # terminal 2Or with Docker (API + worker only; reaches the infra via
host.docker.internal):
docker compose up -dcurl localhost:8000/api/health # {"ok":true,"db":true,"cache":true,"rabbit":true}docker compose --profile demo up -d # optional synthetic agent, no Windows host3. Frontend - ovc-frontend
Section titled “3. Frontend - ovc-frontend”Requires Node 24.
npm installcp .env.example .env.local # set OVC_AUTH_MODE=stub for local UI worknpm run dev # http://localhost:30004. Agent - ovc-agent-hyperv (on each Hyper-V host)
Section titled “4. Agent - ovc-agent-hyperv (on each Hyper-V host)”Hosts and agents are registered through the frontend, not by calling the backend directly:
- In the inventory tree, right-click → Add Host (optionally under a cluster).
- Open the new host’s detail pane. While its agent has never checked in, the
only tab is Setup Agent: a paste-ready, elevated-PowerShell one-liner
that creates
C:\Program Files\ovc-agent, downloads and checksums the agent, writesconfig.ini, and installs the Windows service. - On the host, run that command in an elevated PowerShell. It opens the
written
config.iniin Notepad - set the two storage paths (template_path,local_iso_path), save, thenStart-Service ovc-agent.
The tab disappears - and the host’s FQDN/IP fill in - once the agent’s first
agent_status arrives. See the agent’s own README for the config.ini format
and the manual ovc-agent.exe install/start/stop/uninstall commands the
one-liner wraps.
Containerized deployments
Section titled “Containerized deployments”The steps above are for local, per-process development. To run the whole stack as containers instead:
- Docker Compose - one
docker-compose.yamlfor everything (backing services, guacd, backend API + worker, frontend), using the published container images. - Kubernetes - the same stack as plain manifests, with Traefik as the Ingress controller.
Both use the same container images and treat the OIDC provider (Keycloak or any other) as optional, same as local dev.
Deploying behind one domain
Section titled “Deploying behind one domain”A reverse proxy splits one hostname by path prefix:
ovc.domain.net/ → ovc-frontend (SSR pages, assets, /frontend-api/*)ovc.domain.net/api/ → ovc-backend (the REST API)The browser only ever calls the frontend - REST goes through
/frontend-api/api/*, which the frontend server forwards to ovc-backend with
the bearer token attached. See ovc-frontend/README.md for an nginx sketch.