import { CodeBlock } from "../components/CodeBlock"; import { Callout } from "../components/Callout"; export function DockerComposePage() { return (

Docker Compose Setup

The recommended way to run Veylant IA locally or in a single-server staging environment is Docker Compose. The full stack is defined in docker-compose.yml at the repository root.

Services

{[ { service: "proxy", image: "Custom (Go, distroless)", port: "8090", purpose: "Main AI gateway" }, { service: "pii", image: "Custom (Python FastAPI)", port: "8091 / 50051", purpose: "PII detection" }, { service: "postgres", image: "postgres:16-alpine", port: "5432", purpose: "Config, users, policies" }, { service: "redis", image: "redis:7-alpine", port: "6379", purpose: "Sessions, rate limits, PII maps" }, { service: "clickhouse", image: "clickhouse:24.3-alpine", port: "8123 / 9000", purpose: "Audit logs & analytics" }, { service: "keycloak", image: "keycloak:24.0", port: "8080", purpose: "IAM & SSO" }, { service: "prometheus", image: "prom/prometheus:v2.53.0", port: "9090", purpose: "Metrics scraper" }, { service: "grafana", image: "grafana:11.3.0", port: "3001", purpose: "Dashboards" }, { service: "web", image: "node:20-alpine", port: "3000", purpose: "React dashboard" }, ].map((row) => ( ))}
Service Image Port Purpose
{row.service} {row.image} {row.port} {row.purpose}

Make Commands

Startup Order & Health Checks

Services start in dependency order:

  1. PostgreSQL → Redis → ClickHouse (databases)
  2. Keycloak (waits for PostgreSQL health check)
  3. PII service (independent)
  4. Go proxy (waits for PostgreSQL, uses service_started for others)
  5. React web (waits for proxy)
  6. Prometheus → Grafana (monitoring)
The proxy Docker image uses distroless/static — no shell, no{" "} wget. Services that depend on the proxy use{" "} condition: service_started rather than a health check command.

First Run: Database Migrations

On first start, the proxy automatically applies PostgreSQL migrations (9 migration files) and ClickHouse DDL. You can also run migrations manually:

Protocol Buffer Generation

If the gen/ or services/pii/gen/ directories are missing (e.g., fresh clone), regenerate the gRPC stubs before starting:

The PII service starts but rejects all gRPC requests if services/pii/gen/ is missing. Run make proto first.

Viewing Logs

); }