Skip to main content
本指南展示如何部署独立的 ,无需 LangSmith UI 或控制平面。这是运行一个或少数几个代理作为独立服务的最轻量级自托管选项。
此部署选项提供了灵活性,但需要您自行管理基础设施和配置。对于生产工作负载,请考虑自托管完整的 LangSmith 平台使用控制平面进行部署,它们提供标准化的部署模式和基于 UI 的管理。
这是直接部署 Agent Server 而无需 LangSmith 平台的设置页面。请查看自托管选项以了解:在继续之前,请查看独立服务器概述

先决条件

  1. 使用 LangGraph CLI本地测试您的应用程序
  2. 使用 LangGraph CLI 构建 Docker 镜像(即 langgraph build)。
  3. 数据平面部署需要以下环境变量。
  4. REDIS_URI:连接到 Redis 实例的详细信息。Redis 将用作发布-订阅代理,以实现从后台运行流式传输实时输出。REDIS_URI 的值必须是有效的 Redis 连接 URI
    共享 Redis 实例 多个自托管部署可以共享同一个 Redis 实例。例如,对于 部署 AREDIS_URI 可以设置为 redis://<hostname_1>:<port>/1;对于 部署 BREDIS_URI 可以设置为 redis://<hostname_1>:<port>/212 是同一实例中的不同数据库编号,但 <hostname_1> 是共享的。相同的数据库编号不能用于不同的部署
  5. DATABASE_URI:Postgres 连接详细信息。Postgres 将用于存储助手、线程、运行、持久化线程状态和长期记忆,并使用“恰好一次”语义管理后台任务队列的状态。DATABASE_URI 的值必须是有效的 Postgres 连接 URI
    共享 Postgres 实例 多个自托管部署可以共享同一个 Postgres 实例。例如,对于 部署 ADATABASE_URI 可以设置为 postgres://<user>:<password>@/<database_name_1>?host=<hostname_1>;对于 部署 BDATABASE_URI 可以设置为 postgres://<user>:<password>@/<database_name_2>?host=<hostname_1><database_name_1>database_name_2 是同一实例中的不同数据库,但 <hostname_1> 是共享的。相同的数据库不能用于不同的部署
    您可以选择将检查点数据存储在 MongoDB 中,而不是 PostgreSQL 中。PostgreSQL 仍然需要用于所有其他服务器数据。有关详细信息,请参阅配置检查点后端
  6. LANGSMITH_API_KEY:LangSmith API 密钥。
  7. LANGGRAPH_CLOUD_LICENSE_KEY:LangSmith 许可证密钥。这将在服务器启动时用于一次性身份验证。
  8. LANGSMITH_ENDPOINT:要将跟踪发送到自托管的 LangSmith 实例,请将 LANGSMITH_ENDPOINT 设置为自托管 LangSmith 实例的主机名。
  9. 从您的网络可以访问 https://beacon.langchain.com。如果未在隔离模式下运行,则许可证验证和使用情况报告需要此访问。有关更多详细信息,请参阅出口文档

Kubernetes

使用此 Helm chart 将 Agent Server 部署到 Kubernetes 集群。 Helm chart(v0.2.6+)支持使用捆绑实例(开发/测试)或外部部署(生产)进行 MongoDB 检查点存储。在您的 values 文件中设置 mongo.enabled: true。有关完整配置详情,请参阅配置检查点后端

Docker

运行以下 docker 命令:
docker run \
    --env-file .env \
    -p 8123:8000 \
    -e REDIS_URI="foo" \
    -e DATABASE_URI="bar" \
    -e LANGSMITH_API_KEY="baz" \
    my-image
  • 您需要将 my-image 替换为先决条件步骤中构建的镜像名称(来自 langgraph build),并且应为 REDIS_URIDATABASE_URILANGSMITH_API_KEY 提供适当的值。
  • 如果您的应用程序需要额外的环境变量,可以以类似的方式传递它们。

Docker Compose

Docker Compose YAML 文件:
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
在同一文件夹中使用此文件运行 docker compose up
要将检查点存储在 MongoDB 中而不是 PostgreSQL 中,请添加 MongoDB 服务并配置检查点后端。在您的 langgraph.json 中将后端设置为 "mongo",或使用 LS_DEFAULT_CHECKPOINTER_BACKEND 环境变量。PostgreSQL 仍然需要用于所有其他服务器数据。
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
有关 MongoDB 配置选项的更多详细信息,请参阅配置检查点后端
这将在端口 8123 上启动一个 Agent Server(如果需要,可以在 langgraph-api 中更改端口映射)。测试应用程序是否健康:
curl --request GET --url 0.0.0.0:8123/ok
假设一切运行正常,您应该会看到类似以下的响应:
{"ok":true}