用docker 安装 langgraph
使用 Docker 安装和部署 LangGraph,通常有两种主流场景:
本地开发/测试(轻量级):直接在 Docker 容器中运行你编写的 LangGraph Python 应用(结合 Celery 或 FastAPI)。
生产级/官方平台部署(功能完整):使用 LangGraph 官方推出的 LangGraph Server(或 LangGraph Studio 后端),它自带了高可用的图状态管理、持久化存储和 API 路由。
下面为你分别提供这两种场景的 Docker 安装与部署指南。
方案一:使用官方 LangGraph Server 部署(推荐,带 API 和 UI 支持)
LangGraph 官方提供了一个专为生产环境设计的服务器,可以通过 langgraph-cli 快速生成 Docker 配置,自动集成 PostgreSQL(用于图形状态持久化)。
1. 前置准备
首先,在你的项目根目录下确保有以下两个文件:
requirements.txt:包含你的 LangGraph 代码所需的依赖。langgraph.json:LangGraph 的配置文件,指定你的图(Graph)在哪里。
langgraph.json 示例:
JSON
{
"dependencies": ["."],
"graphs": {
"my_agent": "./agent.py:graph"
}
}
2. 生成并运行 Docker 容器
在本地开发环境中,你可以使用 langgraph-cli 直接构建并启动 Docker 镜像。
Bash
# 1. 安装 langgraph 命令行工具
pip install langgraph-cli
# 2. 在项目根目录下执行(它会自动检测 Docker 环境并构建镜像)
langgraph dev
提示:
langgraph dev会在后台自动拉取本地 Docker,并启动一个集成了 LangGraph 运行时和 PostgreSQL 的容器集群。你可以直接访问本地的 LangGraph Studio 网页端(通常是http://localhost:2024)进行可视化调试。
方案二:自定义 Dockerfile 部署(适合生产环境、微服务架构)
如果你想将 LangGraph 作为标准的微服务(例如配合 FastAPI 或 Celery)嵌入到你现有的 Docker 编排(K8s/Docker Compose)中,建议自定义 Dockerfile。
这里以 FastAPI + LangGraph + PostgreSQL 为例:
1. 编写 Dockerfile
在项目根目录下创建 Dockerfile:
Dockerfile
# 使用官方轻量级 Python 镜像
FROM python:3.11-slim
# 设置工作目录
WORKDIR /app
# 安装系统依赖(如 psycopg2 编译所需的工具)
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
libpq-dev \
&& rm -rf /var/lib/apt/lists/*
# 复制依赖文件并安装
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Rebuild 你的应用代码
COPY . .
# 暴露 FastAPI 端口
EXPOSE 8000
# 启动命令(以 uvicorn 运行 FastAPI 为例)
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
2. 编写 docker-compose.yml(管理状态持久化)
由于 LangGraph 的核心优势在于状态管理(State Management)和断点续传(Time-travel),它必须依赖数据库(推荐 PostgreSQL)。通过 Docker Compose 可以一键拉取应用和数据库。
YAML
version: '3.8'
services:
# LangGraph 应用服务
langgraph_app:
build: .
ports:
- "8000:8000"
environment:
- DATABASE_URL=postgresql://postgres:secret@postgres_db:5432/langgraph_storage
- OPENAI_API_KEY=your_openai_key_here
- DEEPSEEK_API_KEY=your_deepseek_key_here
depends_on:
- postgres_db
# PostgreSQL 状态存储服务
postgres_db:
image: postgres:16-alpine
ports:
- "5432:5432"
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=secret
- POSTGRES_DB=langgraph_storage
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
3. 在 Python 代码中连接 Docker 数据库
在你的 agent.py 或 main.py 中,使用 ConnPoolPostgresSaver(LangGraph 提供的 Postgres 检查点存储器)来连接 Docker 内的数据库:
Python
import os
from langgraph.checkpoint.postgres import ConnPoolPostgresSaver
from psycopg_pool import ConnectionPool
# 从环境变量获取 Docker 内部的数据库连接串
DB_URI = os.getenv("DATABASE_URL", "postgresql://postgres:secret@localhost:5432/langgraph_storage")
# 创建连接池并初始化 LangGraph 的 Checkpointer
pool = ConnectionPool(conninfo=DB_URI, max_size=10)
memory = ConnPoolPostgresSaver(pool)
# 在编译图时,传入 memory
# graph = workflow.compile(checkpointer=memory)
4. 启动容器
在 docker-compose.yml 所在目录下执行:
Bash
# 后台启动所有容器
docker-compose up -d
# 查看运行日志
docker-compose logs -f langgraph_app
总结:我该选哪种?
如果你处于开发阶段,想要可视化界面调试智能体的工作流:首选 方案一,利用
langgraph dev让官方工具链帮你接管 Docker。如果你准备部署到生产环境、或者需要跟现有的自建 API 网关(如 APISIX)和微服务对接:首选 方案二,通过
Dockerfile+docker-compose(或 K8s)进行标准化容器化部署。