跳到内容

LangGraph 自托管部署指南

先决条件

本操作指南将引导您完成如何从现有的 LangGraph 应用程序创建 Docker 镜像的过程,以便您可以将其部署在您自己的基础设施上。

工作原理

使用自托管部署选项,您需要负责管理基础设施,包括设置和维护必要的数据库、Redis 实例以及其他服务。

您需要执行以下操作

  1. 在您自己的基础设施上部署 Redis 和 Postgres 实例。
  2. 使用 LangGraph CLI,使用 LangGraph Server 构建 Docker 镜像。
  3. 部署一个 Web 服务器,该服务器将运行 Docker 镜像并传入必要的环境变量。

Helm Chart

如果您想在 Kubernetes 上部署 LangGraph Cloud,可以使用此 Helm Chart

环境变量

您最终需要将以下环境变量传递给 LangGraph Deploy 服务器

  • REDIS_URI:Redis 实例的连接详情。Redis 将用作发布-订阅代理,以实现来自后台运行的实时输出流式传输。REDIS_URI 的值必须是有效的 Redis 连接 URI

    共享 Redis 实例

    多个自托管部署可以共享同一个 Redis 实例。例如,对于 部署 AREDIS_URI 可以设置为 redis://<hostname_1>:<port>/1,对于 部署 BREDIS_URI 可以设置为 redis://<hostname_1>:<port>/2

    12 是同一实例中不同的数据库编号,但 <hostname_1> 是共享的。同一数据库编号不能用于单独的部署

  • 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> 是共享的。同一数据库不能用于单独的部署

  • LANGSMITH_API_KEY:(如果使用 Self-Hosted Lite)LangSmith API 密钥。这将用于在服务器启动时进行一次性身份验证。

  • LANGGRAPH_CLOUD_LICENSE_KEY:(如果使用 Self-Hosted Enterprise)LangGraph 平台许可证密钥。这将用于在服务器启动时进行一次性身份验证。
  • LANGCHAIN_ENDPOINT:要将追踪发送到 自托管 LangSmith 实例,请将 LANGCHAIN_ENDPOINT 设置为自托管 LangSmith 实例的主机名。

构建 Docker 镜像

请阅读应用结构指南,以了解如何构建您的 LangGraph 应用程序。

如果应用程序结构正确,则可以使用 LangGraph Deploy 服务器构建 Docker 镜像。

要构建 Docker 镜像,您首先需要安装 CLI

pip install -U langgraph-cli

然后您可以使用

langgraph build -t my-image

这将构建一个带有 LangGraph Deploy 服务器的 Docker 镜像。-t my-image 用于标记镜像名称。

运行此服务器时,您需要传递三个环境变量

在本地运行应用程序

使用 Docker

docker run \
    --env-file .env \
    -p 8123:8000 \
    -e REDIS_URI="foo" \
    -e DATABASE_URI="bar" \
    -e LANGSMITH_API_KEY="baz" \
    my-image

如果您想快速运行,而无需设置单独的 Redis 和 Postgres 实例,可以使用此 Docker Compose 文件。

注意

  • 您需要将 my-image 替换为您在上一步构建的镜像名称(来自 langgraph build)。并且您应该为 REDIS_URIDATABASE_URILANGSMITH_API_KEY 提供适当的值。
  • 如果您的应用程序需要额外的环境变量,您可以类似的方式传递它们。
  • 如果使用 Self-Hosted Enterprise,您必须提供 LANGGRAPH_CLOUD_LICENSE_KEY 作为额外的环境变量。

使用 Docker Compose

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:
            - "5433: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}
            POSTGRES_URI: postgres://postgres:postgres@langgraph-postgres:5432/postgres?sslmode=disable

然后您可以在同一文件夹中使用此 Docker Compose 文件运行 docker compose up

这将启动端口 8123 上的 LangGraph Deploy(如果您想更改此端口,可以通过更改 langgraph-api 卷中的端口来更改)。

您可以通过检查以下内容来测试应用程序是否已启动

curl --request GET --url 0.0.0.0:8123/ok
假设一切运行正常,您应该看到类似以下的响应

{"ok":true}

评论