Docs/Appendix/Ports & Service Matrix

Ports & Service Matrix

Which service listens on which port, which Compose profile or Helm chart provides it, and whether it is reachable from outside. Three views: the Docker Compose stack, the public hostnames of a domain deployment, and the Dockerfile EXPOSE lines.

Compose
deploy/compose/docker-compose.yml (Full) and lite.yml (Lite). See Docker Compose Stack.
Kubernetes
deploy/helm/charts/*; container ports match the Compose ones, exposure is decided by your Ingress values.
Host binding
Compose publishes ports on BIND_ADDR (default 127.0.0.1). Exceptions: LiveKit (LIVEKIT_BIND_ADDR) and Caddy in the domain overlay (PUBLIC_BIND_ADDR, default all interfaces).

Jump to: 1. Compose · 2. Public hostnames · 3. Dockerfile EXPOSE

1. Docker Compose stack

"Host" is the published mapping (host : container). "internal" means no ports: block — reachable only on the compose network by service name (e.g. http://sidecar:8001). Most host ports can be moved with the matching *_HOST_PORT variable.

ServiceImageHost : containerProfileNotes
postgresghcr.io/cd-lc/postgres:16 (pgvector + AGE; deploy/postgres)5432 : 5432core set, LiteApp database.
pgbounceredoburu/pgbouncer:v1.24.1-p1internal (6432)core setMust stay session pooling (schema-per-tenant); see ADR-0002.
valkeyvalkey/valkey:8.1-alpine6379 : 6379core set, LiteRedis API.
seaweedfschrislusf/seaweedfs:3.978333 : 8333core setS3 gateway; Lite uses local disk instead.
keycloak-dbpostgres:16-alpineinternalcore setKeycloak's dedicated Postgres (Lite uses a dev-file store).
keycloakquay.io/keycloak/keycloak:26.0.78180 : 8080core set, LiteIssuer http://localhost:8180/realms/agentic-ai locally; admin console only on 127.0.0.1 in domain mode.
sidecarghcr.io/cd-lc/sidecar8001 : 8001core set; Lite ragEmbeddings, extraction, rerank, STT/TTS.
coreghcr.io/cd-lc/core8080 : 8080core set, LiteAPI.
webghcr.io/cd-lc/web3000 : 3000core set, LiteTenant console.
web-adminghcr.io/cd-lc/web-admin3001 : 3001core setPlatform-operator console.
core-worker, core-jobsghcr.io/cd-lc/core-worker, core-jobsinternaltemporal, jobsTemporal worker; scheduled sweeps.
temporal, temporal-ui, temporal-postgresqltemporalio/auto-setup:1.24.2, temporalio/ui:2.31.2, postgres:16-alpine7233 : 7233; 8088 : 8080; internaltemporal
redpandaredpandadata/redpanda:v24.2.189092 : 9092eventsKafka API (BSL-1.1, see NOTICE).
prometheus, alertmanager, grafana, lokiprom/prometheus:v2.55.1, prom/alertmanager:v0.27.0, grafana/grafana:11.3.1, grafana/loki:3.2.19090; 9093; 3003 : 3000; 3100observabilitypromtail and valkey-exporter are internal.
langfuse-weblangfuse/langfuse:33002 : 3000tracingTrace UI. langfuse-worker, -postgres, -clickhouse, -valkey, -s3 are internal.
livekitlivekit/livekit-server:v1.13.97880; 7881; 50000-50100/udp (default; LIVEKIT_RTC_PORT_RANGE_START / _END move it)voiceBound to LIVEKIT_BIND_ADDR; set it to 0.0.0.0 for remote callers.
voice-agentghcr.io/cd-lc/voice-agentinternalvoiceOutbound-only LiveKit worker.
code-intelghcr.io/cd-lc/code-intel8090 : 8090code-intel, builder
code-intel-dockerdocker:27-dindinternalcode-intel, builderPrivileged Docker-in-Docker executor.
app-builderghcr.io/cd-lc/app-builder8091 : 8091builder
tool-sandboxghcr.io/cd-lc/tool-sandboxinternal (8095)sandboxCore reaches it at http://tool-sandbox:8095.
mcp-stdio-runnerghcr.io/cd-lc/mcp-stdio-runner (-browser variant)internal (8097)tools, browser, sandboxCore reaches it at mcp-stdio-runner:8097.
rl-trainerghcr.io/cd-lc/rl-trainer8095 : 8095rlSame number as tool-sandbox's internal port, different container.
caddycaddy:2.11.7-alpine80, 443 (tcp + udp)domain overlayAutomatic Let's Encrypt; CADDY_AUTO_HTTPS=off with CADDY_SITE_SCHEME=http:// behind your own TLS proxy or tunnel.

Overlays. docker-compose.ci.yml and docker-compose.local-llm.yml each publish 127.0.0.1:9101:9101 (the deploy/mock-provider OpenAI-compatible mock).

2. Public hostnames (domain deployment)

With scripts/vegaduta up --full --domain <your-domain>, Caddy routes these hosts (deploy/caddy/Caddyfile). With Helm, the same names are set in your Ingress values.

PurposeHostUpstream
Consoleapp.<your-domain>web:3000
Admin consoleadmin.<your-domain>web-admin:3001
APIapi.<your-domain>core:8080
Keycloakauth.<your-domain> (realm agentic-ai)keycloak:8080
Code intelligence (optional)codeintel.<your-domain>code-intel:8090
App builder (optional)builder.<your-domain>app-builder:8091
LiveKit (optional)livekit.<your-domain>livekit:7880

Keep sidecar, the databases, Langfuse, Temporal and the sandboxes internal. Never point a browser-facing or token-issuer URL at localhost on a server; internal compose DNS names such as http://keycloak:8080 are the sanctioned exception. scripts/vegaduta doctor checks this.

3. Dockerfile EXPOSE

DockerfileEXPOSEBase image (FROM)
core/Dockerfile8080maven:3.9-eclipse-temurin-21 (build), eclipse-temurin:21-jre-jammy
web/Dockerfile3000node:22.23.3-bookworm-slim
web-admin/Dockerfile3001node:22.23.3-bookworm-slim
services/sidecar/Dockerfile8001python:3.12.15-slim-trixie
services/code-intel/Dockerfile8090python:3.12.15-slim-trixie
services/app-builder/Dockerfile8091python:3.12.15-slim-trixie
services/tool-sandbox/Dockerfile8095eclipse-temurin:21-jdk-jammy, python:3.12.15-slim-trixie
services/rl-trainer/Dockerfile8095python:3.12.15-slim-trixie
services/voice-agent/Dockerfile8081python:3.12.15-slim-trixie
services/mcp-stdio-runner/Dockerfileno EXPOSE linenode:22.23.3-bookworm-slim
examples/mcp-servers/http-gateway/Dockerfile8099node:22.23.3-bookworm-slim
deploy/mock-provider/Dockerfile9101python:3.12.15-slim-trixie
deploy/postgres/Dockerfileno EXPOSE line${BASE_IMAGE} (PostgreSQL 16)

Cross-references

Evidence & references