We recognize that in certain scenarios, you may want the utmost isolation while testing our product
and offer a “full” deployment mode that includes the control plane and data plane. This is only available
for testing with the intent of using the hybrid configuration in production. Please reach out to
support for more information.
Data plane configuration
To launch the data plane:Important for AWS Users: If you plan to run these containers on EC2 with IMDSv2,
you need to increase the instance metadata hop limit from the default value of 1 to 2. This is because containers require at least one extra network hop to access instance metadata. Without increasing the hop limit, requests to the metadata service will fail which means that the containers will not be able to auto discover the AWS region or credentials.
docker compose as well:
http://localhost:8000, which will work as long as the browser is running on the same machine as the API server. The external port can be configured by adjusting the first value of the port mapping in the compose file.

Set up HTTPS
If you wish to deploy the API server to a non-localhost URL, it will need to be exposed on an HTTPS endpoint. A common way to accomplish this is to obtain an SSL certificate for your domain, and forward traffic to your API server using a reverse proxy, such as nginx.Deploy other services
In addition to the API server, you may also deploy the realtime service through docker. The realtime server transfers end-to-end encrypted user data using a key that’s only available to the data plane. Self-hosting may be desirable to have complete control over these services and ensure that sensitive data in any form goes through only your own servers. The realtime service is bundled in the full configuration, and you can include it in the API configuration with minor modifications. The modifieddocker-compose.api.yml might look as follows:
braintrust-standalone-api service accordingly.
Finally, point the webapp to your realtime URL in the API URLs page .
You will want to use the publicly-accessible form of the URL, rather than the
docker-accessible form, so make sure to substitute host.docker.internal with
localhost if that applies.

Detailed reference
To see a full list of the containers and environment variables you can configure, see the docker-compose.api.yml file in the braintrust-deployment repository.Recommendations for Production
When deploying Braintrust in production, consider these minimum and recommended hardware requirements for reliable performance and uptime. These requirements assume typical production usage patterns. For high-utilization deployments, you may need to scale these resources up significantly. Monitor your resource utilization and adjust accordingly.API Service
- CPU: At least 2 vCPUs per instance
- Memory: Minimum 4GB RAM, recommended 8GB+
- Instance count: Minimum 2, recommended 4+
- Environment Variables:
NODE_MEMORY_PERCENT: recommended80to90if the API is running on a dedicated instance or container orchestrator with cgroup memory limits (e.g. Kubernetes, ECS).
Database (PostgreSQL)
- CPU: Minimum 4 vCPUs, recommended 8+ vCPUs
- Memory: Minimum 32GB RAM, recommended 64GB+
- Storage Size: 1000GB, monitor for growth.
- Storage IOPS: Minimum 10,000 IOPS, recommended 15,000+
- Minimum Version: 15
- Recommended Version: 17+
Redis Cache
- CPU: 2 vCPUs
- Memory: Minimum 2GB RAM, recommended 4GB+ for production workloads
- Minimum Version: 7
- Recommended Version: 7+
S3
Certain features require S3 buckets, namely: attachments, bundled code, overflowing responses, and Brainstore. The response overflow bucket is namedRESPONSE_BUCKET_NAME and must have a CORS configuration that enables
GET and HEAD requests from the browser, equivalent to:
CODE_BUNDLE_BUCKET variable. This bucket must have
a CORS rule which enables PUT requests from the browser, equivalent to:
ATTACHMENT_BUCKET variable. This bucket must
have a CORS rule as described above.
Brainstore
- CPU: Minimum 8 vCPUs, recommended 16+ vCPUs, ARM architecture recommended
- Memory: Minimum 16GB RAM, recommended 32GB+
- Storage Size: Minimum 256GB, recommended 1024GB+
- Storage IOPS: Use NVME (storage is ephemeral)
Troubleshooting
The state of the Braintrust deployment is fully managed on docker. Therefore, if something is not running as expected, you should be able to inspect the container, either by dumping its logs or opening up a shell inside the container to poke around. For instance, after launching the API configuration, you should see three containers:docker logs [CONTAINER ID],
or spawn a shell inside the container using docker exec -it [CONTAINER ID] bash.
For further questions, feel free to reach out at
[email protected].