在 Docker 上部署 Langflow
本指南演示了如何使用 Docker 和 Docker Compose 部署 Langflow。
有三种可用选项
- “快速入门”选项使用默认值启动一个 Docker 容器。
- “Docker Compose”选项构建 Langflow,并带有一个持久化 PostgreSQL 数据库服务。
- “将您的流程打包为 Docker 镜像”选项演示了如何使用 Dockerfile 打包现有流程。
有关配置 Docker 镜像的更多信息,请参阅用您自己的代码定制 Langflow Docker 镜像。
先决条件
快速入门
在您的系统上安装并运行 Docker 后,运行此命令
docker run -p 7860:7860 langflowai/langflow:latest
Langflow 现在可通过 https://:7860/ 访问。
克隆仓库并构建 Langflow Docker 容器
-
克隆 Langflow 仓库
git clone https://github.com/langflow-ai/langflow.git -
导航到
docker_example目录cd langflow/docker_example -
运行 Docker Compose 文件
docker compose up
Langflow 现在可通过 https://:7860/ 访问。
配置 Docker 服务
Docker Compose 配置启动两个服务:langflow 和 postgres。
要在容器启动时配置这些服务的值,请将它们包含在您的 .env 文件中。
一个示例 .env 文件可在项目仓库中找到。
要传递 .env 值,请在您的 docker run 命令中包含 --env-file 标志
_10docker run -it --rm \_10-p 7860:7860 \_10--env-file .env \_10langflowai/langflow:latest
Langflow 服务
该 langflow 服务同时提供 Langflow Web 应用程序的后端 API 和前端 UI。
该 langflow 服务使用 langflowai/langflow:latest Docker 镜像并暴露端口 7860。它依赖于 postgres 服务。
环境变量
LANGFLOW_DATABASE_URL:PostgreSQL 数据库的连接字符串。LANGFLOW_CONFIG_DIR:Langflow 存储日志、文件存储、监控数据和密钥的目录。
卷
langflow-data:此卷被映射到容器中的/app/langflow。
PostgreSQL 服务
该 postgres 服务是一个数据库,用于存储 Langflow 的持久化数据,包括流程、用户和设置。
该服务运行在端口 5432 上,并包含一个专用于数据存储的卷。
该 postgres 服务使用 postgres:16 Docker 镜像。
环境变量
POSTGRES_USER:PostgreSQL 数据库的用户名。POSTGRES_PASSWORD:PostgreSQL 数据库的密码。POSTGRES_DB:PostgreSQL 数据库的名称。
卷
langflow-postgres:此卷被映射到容器中的/var/lib/postgresql/data。
使用 Docker Compose 部署特定版本的 Langflow
如果您想部署特定版本的 Langflow,可以修改 Docker Compose 文件中 langflow 服务下的 image 字段。例如,要使用版本 1.0-alpha,将 langflowai/langflow:latest 更改为 langflowai/langflow:1.0-alpha。
将您的流程打包为 Docker 镜像
您可以将 Langflow 流程包含在应用程序镜像中。构建镜像时,您保存的 .JSON 流程会被包含进去。这使您能够从容器中提供流程服务,将镜像推送到 Docker Hub,并在 Kubernetes 上进行部署。
示例流程可在 Langflow Helm Charts 仓库中找到,或者您可以提供自己的 JSON 文件。
- 创建项目目录
_10mkdir langflow-custom && cd langflow-custom
- 下载示例流程或将您的流程
.JSON文件包含在langflow-custom目录中。
_10wget https://raw.githubusercontent.com/langflow-ai/langflow-helm-charts/refs/heads/main/examples/flows/basic-prompting-hello-world.json
- 创建 Dockerfile
_10FROM langflowai/langflow-backend:latest_10RUN mkdir /app/flows_10COPY ./*json /app/flows/._10ENV LANGFLOW_LOAD_FLOWS_PATH=/app/flows
该 COPY ./*json 命令将您当前目录中的所有 JSON 文件复制到 /flows 文件夹。
该 ENV LANGFLOW_LOAD_FLOWS_PATH=/app/flows 命令设置 Docker 容器内的环境变量。通过将其指向 /app/flows,您可以确保应用程序能够找到并利用在镜像构建过程中已复制到该目录中的 JSON 流程文件。
- 在本地构建并运行镜像。
_10docker build -t myuser/langflow-hello-world:1.0.0 ._10docker run -p 7860:7860 myuser/langflow-hello-world:1.0.0
- 构建并将镜像推送到 Docker Hub。将
myuser替换为您的 Docker Hub 用户名。
_10docker build -t myuser/langflow-hello-world:1.0.0 ._10docker push myuser/langflow-hello-world:1.0.0
要使用 Helm 部署该镜像,请参阅在 Kubernetes 上部署 Langflow 生产环境。
用您自己的代码定制 Langflow Docker 镜像
您可以通过添加自己的代码或修改现有组件来定制 Langflow Docker 镜像。
此示例 Dockerfile 演示了如何通过替换 astradb_graph.py 组件来定制 Langflow,但此模式可适用于任何其他组件或自定义代码。
_20FROM langflowai/langflow:latest_20# Set working directory_20WORKDIR /app_20# Copy your modified astradb_graph.py file_20COPY src/backend/base/langflow/components/vectorstores/astradb_graph.py /tmp/astradb_graph.py_20# Find the site-packages directory where langflow is installed_20RUN python -c "import site; print(site.getsitepackages()[0])" > /tmp/site_packages.txt_20# Replace the file in the site-packages location_20RUN SITE_PACKAGES=$(cat /tmp/site_packages.txt) && \_20echo "Site packages at: $SITE_PACKAGES" && \_20mkdir -p "$SITE_PACKAGES/langflow/components/vectorstores" && \_20cp /tmp/astradb_graph.py "$SITE_PACKAGES/langflow/components/vectorstores/"_20# Clear Python cache in the site-packages directory only_20RUN SITE_PACKAGES=$(cat /tmp/site_packages.txt) && \_20find "$SITE_PACKAGES" -name "*.pyc" -delete && \_20find "$SITE_PACKAGES" -name "__pycache__" -type d -exec rm -rf {} +_20# Expose the default Langflow port_20EXPOSE 7860_20# Command to run Langflow_20CMD ["python", "-m", "langflow", "run", "--host", "0.0.0.0", "--port", "7860"]
要使用此自定义 Dockerfile,请执行以下操作
- 为您的自定义 Langflow 设置创建一个目录
_10mkdir langflow-custom && cd langflow-custom
- 为您的自定义代码创建必要的目录结构。在此示例中,Langflow 期望
astradb_graph.py存在于/vectorstores目录中,因此您在该位置创建一个目录。
_10mkdir -p src/backend/base/langflow/components/vectorstores
-
将您修改后的
astradb_graph.py文件放在/vectorstores目录中。 -
创建名为
Dockerfile的新文件,位于您的langflow-custom目录中,然后将上面显示的 Dockerfile 内容复制到其中。 -
构建并运行镜像
_10docker build -t myuser/langflow-custom:1.0.0 ._10docker run -p 7860:7860 myuser/langflow-custom:1.0.0
通过修改文件路径和组件名称,此方法可适用于您想添加到 Langflow 的任何其他组件或自定义代码。