Skip to main content
This guide shows you how to deploy standalone without the LangSmith UI or control plane. This is the most lightweight self-hosting option for running one or a few agents as independent services.
This deployment option provides flexibility but requires you to manage your own infrastructure and configuration.For production workloads, consider self-hosting the full LangSmith platform or deploying with the control plane, which offer standardized deployment patterns and UI-based management.
This is the setup page for deploying Agent Servers directly without the LangSmith platform.Review the self-hosted options to understand:Before continuing, review the standalone server overview.

Prerequisites

  1. Use the LangGraph CLI to test your application locally.
  2. Use the LangGraph CLI to build a Docker image (i.e. langgraph build).
  3. The following environment variables are needed for a data plane deployment.
  4. REDIS_URI: Connection details to a Redis instance. Redis will be used as a pub-sub broker to enable streaming real time output from background runs. The value of REDIS_URI must be a valid Redis connection URI.
    Shared Redis Instance Multiple self-hosted deployments can share the same Redis instance. For example, for Deployment A, REDIS_URI can be set to redis://<hostname_1>:<port>/1 and for Deployment B, REDIS_URI can be set to redis://<hostname_1>:<port>/2.1 and 2 are different database numbers within the same instance, but <hostname_1> is shared. The same database number cannot be used for separate deployments.
  5. DATABASE_URI: Postgres connection details. Postgres will be used to store assistants, threads, runs, persist thread state and long term memory, and to manage the state of the background task queue with ‘exactly once’ semantics. The value of DATABASE_URI must be a valid Postgres connection URI.
    Shared Postgres Instance Multiple self-hosted deployments can share the same Postgres instance. For example, for Deployment A, DATABASE_URI can be set to postgres://<user>:<password>@/<database_name_1>?host=<hostname_1> and for Deployment B, DATABASE_URI can be set to postgres://<user>:<password>@/<database_name_2>?host=<hostname_1>.<database_name_1> and database_name_2 are different databases within the same instance, but <hostname_1> is shared. The same database cannot be used for separate deployments.
    You can optionally store checkpoint data in MongoDB instead of PostgreSQL. PostgreSQL is still required for all other server data. See Configure checkpointer backend for details.
  6. LANGSMITH_API_KEY: LangSmith API key.
  7. LANGGRAPH_CLOUD_LICENSE_KEY: LangSmith license key. This will be used to authenticate ONCE at server start up.
  8. LANGSMITH_ENDPOINT: To send traces to a self-hosted LangSmith instance, set LANGSMITH_ENDPOINT to the hostname of the self-hosted LangSmith instance.
  9. Egress to https://beacon.langchain.com from your network. This is required for license verification and usage reporting if not running in air-gapped mode. See the Egress documentation for more details.

Kubernetes

Use this Helm chart to deploy an Agent Server to a Kubernetes cluster. The Helm chart (v0.2.6+) supports MongoDB checkpointing with a bundled instance (dev/testing) or an external deployment (production). Set mongo.enabled: true in your values file. See Configure checkpointer backend for full configuration details.

Docker

Run the following docker command:
docker run \  --env-file .env \  -p 8123:8000 \  -e REDIS_URI="foo" \  -e DATABASE_URI="bar" \  -e LANGSMITH_API_KEY="baz" \  my-image 
  • You need to replace my-image with the name of the image you built in the prerequisite steps (from langgraph build)
and you should provide appropriate values for REDIS_URI, DATABASE_URI, and LANGSMITH_API_KEY.
  • If your application requires additional environment variables, you can pass them in a similar way.

Docker Compose

Docker Compose YAML file:
volumes:  langgraph-data:  driver: local services:  langgraph-redis:  image: redis:6  healthcheck:  test: redis-cli ping  interval: 5s  timeout: 1s  retries: 5  langgraph-postgres:  image: postgres:16  ports:  - "5432:5432"  environment:  POSTGRES_DB: postgres  POSTGRES_USER: postgres  POSTGRES_PASSWORD: postgres  volumes:  - langgraph-data:/var/lib/postgresql/data  healthcheck:  test: pg_isready -U postgres  start_period: 10s  timeout: 1s  retries: 5  interval: 5s  langgraph-api:  image: ${IMAGE_NAME}  ports:  - "8123:8000"  depends_on:  langgraph-redis:  condition: service_healthy  langgraph-postgres:  condition: service_healthy  env_file:  - .env  environment:  REDIS_URI: redis://langgraph-redis:6379  LANGSMITH_API_KEY: ${LANGSMITH_API_KEY}  DATABASE_URI: postgres://postgres:postgres@langgraph-postgres:5432/postgres?sslmode=disable 
Run docker compose up with this file in the same folder.
To store checkpoints in MongoDB instead of PostgreSQL, add a MongoDB service and configure the checkpointer backend. Set the backend to "mongo" in your langgraph.json or use the LS_DEFAULT_CHECKPOINTER_BACKEND environment variable. PostgreSQL is still required for all other server data.
volumes:  langgraph-data:  driver: local  langgraph-mongo-data:  driver: local services:  langgraph-redis:  image: redis:6  healthcheck:  test: redis-cli ping  interval: 5s  timeout: 1s  retries: 5  langgraph-postgres:  image: postgres:16  ports:  - "5432:5432"  environment:  POSTGRES_DB: postgres  POSTGRES_USER: postgres  POSTGRES_PASSWORD: postgres  volumes:  - langgraph-data:/var/lib/postgresql/data  healthcheck:  test: pg_isready -U postgres  start_period: 10s  timeout: 1s  retries: 5  interval: 5s  langgraph-mongo:  image: mongo:7  command: ["mongod", "--replSet", "rs0"]  ports:  - "27017:27017"  volumes:  - langgraph-mongo-data:/data/db  healthcheck:  test: mongosh --eval "try { rs.status().ok } catch(e) { rs.initiate({_id:'rs0',members:[{_id:0,host:'langgraph-mongo:27017'}]}).ok }" --quiet  interval: 5s  timeout: 10s  retries: 10  start_period: 10s  langgraph-api:  image: ${IMAGE_NAME}  ports:  - "8123:8000"  depends_on:  langgraph-redis:  condition: service_healthy  langgraph-postgres:  condition: service_healthy  langgraph-mongo:  condition: service_healthy  env_file:  - .env  environment:  REDIS_URI: redis://langgraph-redis:6379  LANGSMITH_API_KEY: ${LANGSMITH_API_KEY}  DATABASE_URI: postgres://postgres:postgres@langgraph-postgres:5432/postgres?sslmode=disable  LS_DEFAULT_CHECKPOINTER_BACKEND: mongo  LS_MONGODB_URI: mongodb://langgraph-mongo:27017/langgraph?replicaSet=rs0 
See Configure checkpointer backend for more details on MongoDB configuration options.
This will launch an Agent Server on port 8123 (change the port mapping in langgraph-api if needed). Test if the application is healthy:
curl --request GET --url 0.0.0.0:8123/ok 
Assuming everything is running correctly, you should see a response like:
{"ok":true}