如何进行LangGraph的自托管部署¶
本指南将指导您如何从现有的LangGraph应用创建Docker镜像,以便您可以将其部署在自己的基础设施上。
如何工作¶
使用自托管部署选项时,您需要负责管理基础设施,包括设置和维护必要的数据库、Redis 实例和其他服务。
您需要完成以下步骤:
- 在您的基础设施上部署 Redis 和 Postgres 实例。
- 使用 LangGraph CLI 构建包含 LangGraph Server 的 Docker 镜像。
- 部署一个 Web 服务器,运行 Docker 镜像并传入必要的环境变量。
Helm 图表¶
如果您希望在 Kubernetes 上部署 LangGraph Cloud,可以使用此 Helm 图表。
环境变量¶
您最终需要将以下环境变量传递给 LangGraph 部署服务器:
-
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
。1
和2
是同一个实例中的不同数据库编号,但<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
: (如果使用 自托管 Lite) LangSmith API 密钥。这将用于在服务器启动时进行一次身份验证。 LANGGRAPH_CLOUD_LICENSE_KEY
: (如果使用 自托管企业) LangGraph 平台许可证密钥。这将用于在服务器启动时进行一次身份验证。LANGCHAIN_ENDPOINT
: 为了将跟踪发送到 自托管 LangSmith 实例,将LANGCHAIN_ENDPOINT
设置为自托管 LangSmith 实例的主机名。
构建Docker镜像¶
请阅读应用结构指南,以了解如何构建LangGraph应用的结构。
如果应用结构正确,你可以使用LangGraph Deploy服务器来构建Docker镜像。
要构建Docker镜像,首先需要安装CLI:
然后可以使用:
这将使用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_URI
、DATABASE_URI
和LANGSMITH_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
。
这将启动LangGraph Deploy在端口8123
(如果你想更改此端口,可以通过更改langgraph-api
中的端口来实现)。
你可以通过检查以下内容来测试应用程序是否运行:
假设一切运行正常,你应该会看到如下响应: