跳到内容

如何进行 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 server 传入以下环境变量

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

    共享 Redis 实例

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

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

  • DATABASE_URI:Postgres 连接详情。Postgres 将用于存储助手、线程、运行、持久化线程状态和长期记忆,并以“恰好一次”语义管理后台任务队列的状态。DATABASE_URI 的值必须是有效的 Postgres 连接 URI

    共享 Postgres 实例

    多个自托管部署可以共享同一个 Postgres 实例。例如,对于部署 A,可以将 DATABASE_URI 设置为 postgres://<user>:<password>@/<database_name_1>?host=<hostname_1>;对于部署 B,可以将 DATABASE_URI 设置为 postgres://<user>:<password>@/<database_name_2>?host=<hostname_1>

    <database_name_1>database_name_2 是同一实例中不同的数据库,但 <hostname_1> 是共享的。不能将相同的数据库用于不同的部署

  • LANGSMITH_API_KEY:(如果使用 自托管数据平面)LangSmith API 密钥。这将在服务器启动时验证一次。

  • LANGGRAPH_CLOUD_LICENSE_KEY:(如果使用 自托管企业版)LangGraph Platform 许可证密钥。这将在服务器启动时验证一次。
  • LANGCHAIN_ENDPOINT:要将跟踪发送到 自托管 LangSmith 实例,请将 LANGCHAIN_ENDPOINT 设置为自托管 LangSmith 实例的主机名。

构建 Docker 镜像

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

如果应用程序结构正确,您可以使用 LangGraph Deploy server 构建 Docker 镜像。

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

pip install -U langgraph-cli

然后可以使用

langgraph build -t my-image

这将构建包含 LangGraph Deploy server 的 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 提供适当的值。
  • 如果您的应用程序需要额外的环境变量,可以以类似的方式传入。
  • 如果使用 自托管企业版,您必须提供 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}

评论