Skip to content

如何进行LangGraph的自托管部署

先决条件

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

如何工作

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

您需要执行以下操作:

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

Helm 图表

如果您希望在 Kubernetes 上部署 LangGraph Cloud,可以使用此Helm 图表

环境变量

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

  • REDIS_URI:连接到Redis实例的详细信息。Redis将用作发布/订阅代理,以实现实时输出流传输。REDIS_URI的值必须是有效的Redis连接URI

    共享Redis实例

    多个自托管部署可以共享同一个Redis实例。例如,对于部署AREDIS_URI可以设置为redis://<主机名_1>:<端口>/1,而对于部署BREDIS_URI可以设置为redis://<主机名_1>:<端口>/2

    12是同一实例中的不同数据库编号,但<主机名_1>是共享的。不能在同一数据库编号中使用不同的部署

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

    共享Postgres实例

    多个自托管部署可以共享同一个Postgres实例。例如,对于部署ADATABASE_URI可以设置为postgres://<用户>:<密码>@/<数据库名称_1>?host=<主机名_1>,而对于部署BDATABASE_URI可以设置为postgres://<用户>:<密码>@/<数据库名称_2>?host=<主机名_1>

    <数据库名称_1>数据库名称_2是同一实例中的不同数据库,但<主机名_1>是共享的。不能在不同的部署中使用相同的数据库

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

  • LANGGRAPH_CLOUD_LICENSE_KEY:(如果使用自托管企业版)LangGraph平台许可证密钥。这将在服务器启动时一次性用于身份验证。
  • LANGCHAIN_ENDPOINT:要将跟踪发送到self-hosted LangSmith实例,请将LANGCHAIN_ENDPOINT设置为self-hosted 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文件。

Note

  • 您需要将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}

Comments