Self-Hosted POC Environments
A POC (proof-of-concept) runs the entire Confident AI stack on a single machine with Docker Compose, using the confident-compose repository. It bundles the app together with its Postgres, Redis, ClickHouse, and object storage, so you can try the product against your own data before provisioning any cloud infrastructure.
What you need
- A host with Docker and Docker Compose: a laptop, a VM, or an on-prem server.
- From Confident AI: access to the
confident-composerepository, credentials to pull the container images, and aCONFIDENT_LICENSE_KEY. Ask the platform team for all three. - An LLM provider key (for example
OPENAI_API_KEY) if you want to run evaluations.
Deploy
Clone confident-compose
Once Confident AI has granted access:
git clone https://github.com/confident-ai/confident-compose cd confident-composeConfigure the environment
Copy the example environment file and fill it in:
cp .env.example .envSet your
CONFIDENT_LICENSE_KEY, your LLM provider key, and the image registry login Confident AI gave you. The repository README lists every variable and its default.Start the stack
docker compose up -dThis brings up the app along with Postgres, Redis, ClickHouse, and object storage on the single host. Give it a minute to become healthy:
docker compose psOpen the app
Open
http://localhost:3000and sign in. To reach it from elsewhere, put it behind your existing VPN or an internal load balancer.
Set base URL to your deployment
DeepEval and the Evals API talk to https://api.confident-ai.com by default, and regions only switch that host between our US, EU, and other managed regions. A POC is neither, so deepeval set-confident-region will not reach it — you have to set the base URL explicitly, otherwise your traces and test runs land in Confident AI Cloud instead of your own stack.
Compose exposes the backend on port 3001 and the OTEL collector on port 4318 of the POC host, so with the stack running on <IP>:
export CONFIDENT_API_KEY="<key-from-your-poc>"
export CONFIDENT_BASE_URL="http://<IP>:3001"
export CONFIDENT_OTEL_URL="http://<IP>:4318"CONFIDENT_BASE_URL covers everything the SDK and the Evals API send (test runs, datasets, prompts, evaluations), and CONFIDENT_OTEL_URL covers trace ingestion. If you export traces with the OpenTelemetry SDK directly rather than through DeepEval, point OTEL_EXPORTER_OTLP_ENDPOINT at the same collector:
export OTEL_EXPORTER_OTLP_ENDPOINT="http://<IP>:4318"Once a POC becomes a cloud deployment, the same variables point at the api. and otel. subdomains you configured in config.backendUrl and ingress.hosts.otel:
export CONFIDENT_BASE_URL="https://api.yourdomain.com"
export CONFIDENT_OTEL_URL="https://otel.yourdomain.com"Limitations
A POC trades production hardening for speed:
- No high availability. One host, no failover, no redundancy.
- Datastores are not production-grade. Postgres, Redis, and ClickHouse run as single containers with no backups or replication.
- No persistence guarantees. Data lives with the containers unless you configure volumes.
- Reduced surface. Managed secrets, managed Redis, and the cloud code executor are not part of a Compose setup.
Moving to production
When the POC has proven the fit, deploy on your cloud. Each guide provisions managed Kubernetes, a managed database, backed-up storage, keyless identity, and horizontal scaling.
Last updated on