langgraph Docker & Self-Hosted Deployment

GitHub

Python agents & ai repository by @langchain-ai. AI agent rules & system prompts with 40k stars.

39,559 stars Python Python 1 file ยท ~11,971 tokens #agents#ai#ai-agents#chatgpt#deepagents#enterprise#framework#gemini
RAW Compose
1. Pull Image (DOCKERHUB) docker pull library/langgraph-v3-integration-api
2. Docker Run (1-Click Launch) docker run -d --name langgraph -p 5443:5443 --restart always langgraph-v3-integration-api:local
3. Podman Run podman run -d --name langgraph -p 5443:5443 --restart always langgraph-v3-integration-api:local
4. Skopeo Inspect (Zero-Pull Manifest) skopeo inspect docker://docker.io/library/langgraph-v3-integration-api:local
5. ORAS Pull (OCI Artifact) oras pull langgraph-v3-integration-api:local
6. Compose Deployment docker compose up -d
libs/sdk-py/integration/docker-compose.yml
Download .yml
name: langgraph-v3-integration

services:
  postgres:
    image: pgvector/pgvector:pg16
    environment:
      POSTGRES_DB: postgres
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
    command: ["postgres", "-c", "shared_preload_libraries=vector", "-c", "max_connections=150"]
    ports:
      - "5443:5432"
    healthcheck:
      test: pg_isready -U postgres
      interval: 5s
      timeout: 1s
      retries: 5
      start_period: 10s
    tmpfs:
      - /var/lib/postgresql/data

  redis:
    image: redis:7-alpine
    command: redis-server --maxmemory 256mb --maxmemory-policy allkeys-lru
    ports:
      - "6380:6379"
    healthcheck:
      test: redis-cli ping
      interval: 5s
      timeout: 1s
      retries: 5
      start_period: 2s
    tmpfs:
      - /data

  api:
    # Thin layer on top of langchain/langgraph-api:latest-py3.12 โ€”
    # see ./Dockerfile. The base image bundles langgraph-api +
    # langgraph_runtime_postgres + langgraph_license + the Go core-server;
    # on top we add graph deps (deepagents), the graph files, and this
    # monorepo's local langgraph *core* and *checkpoint* (so the server runs
    # the code under test, not the released langgraph).
    build:
      context: .
      dockerfile: Dockerfile
      additional_contexts:
        # The monorepo's local langgraph core (libs/langgraph) and checkpoint
        # (libs/checkpoint), installed over the base image so the server runs
        # the langgraph under test. See the Dockerfile for why.
        langgraph_src: ../../langgraph
        checkpoint_src: ../../checkpoint
    image: langgraph-v3-integration-api:local
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_healthy
    environment:
      # Database + cache (the production-shape postgres+redis runtime).
      # Recent langgraph-api reads DATABASE_URI first and falls back to
      # POSTGRES_URI; set both so older code paths also work.
      DATABASE_URI: postgres://postgres:postgres@postgres:5432/postgres?sslmode=disable
      POSTGRES_URI: postgres://postgres:postgres@postgres:5432/postgres?sslmode=disable
      REDIS_URI: redis://redis:6379
      LANGGRAPH_RUNTIME_EDITION: postgres

      LANGGRAPH_AUTH_TYPE: noop
      LANGSMITH_TRACING: "false"

      PORT: "8000"

      # Required for the v3 thread-centric streaming protocol. Without this
      # flag the API falls back to the legacy v2 streaming surface and the
      # client's v3 endpoints (POST /threads/{id}/stream/events, /commands,
      # etc.) won't be exposed.
      FF_OPTIMIZED_STREAMING: "true"

      # Tell langgraph-api which graphs to register. The langgraph CLI sets
      # this from langgraph.json; we're bypassing the CLI (running uvicorn
      # directly) so we set it manually.
      LANGSERVE_GRAPHS: '{"agent":"/app/graph/streaming_graph.py:graph","tools_agent":"/app/graph/tools_agent.py:graph","deep_agent":"/app/graph/deep_agent.py:graph","factory_agent":"/app/graph/factory_graph.py:make_graph"}'

      # The published langgraph-api image is the `licensed` variant and
      # requires a real LANGSMITH_API_KEY (or LANGGRAPH_CLOUD_LICENSE_KEY)
      # at runtime. Passed through from the host shell / CI secrets.
      LANGSMITH_API_KEY: ${LANGSMITH_API_KEY:-}
      LANGGRAPH_CLOUD_LICENSE_KEY: ${LANGGRAPH_CLOUD_LICENSE_KEY:-}
    # Mount the graph + config so edits don't require a rebuild.
    volumes:
      - ./graph:/app/graph:ro
      - ./langgraph.json:/app/langgraph.json:ro
    ports:
      - "2024:8000"
    healthcheck:
      test: ["CMD-SHELL", "wget -q -O- http://localhost:8000/ok || exit 1"]
      interval: 5s
      timeout: 3s
      retries: 30
      start_period: 30s