跳到主要内容

在 Docker 上部署 Langflow

在 Docker 容器中运行应用程序确保了在不同系统上的一致性行为,并消除了依赖项冲突。

您可以使用 Langflow Docker 镜像来启动 Langflow 容器。

本指南演示了使用 DockerDocker Compose 部署 Langflow 的几种方式:

使用默认值启动 Langflow 容器

在您的系统上安装并运行 Docker 后,运行以下命令:

docker run -p 7860:7860 langflowai/langflow:latest

然后,在 http://localhost:7860/ 访问 Langflow。

克隆仓库并构建 Langflow Docker 容器

使用 Docker Compose 构建具有持久性 PostgreSQL 数据库服务的 Langflow:

  1. 克隆 Langflow 仓库:

    git clone https://github.com/langflow-ai/langflow.git

  2. 导航到 docker_example 目录:

    cd langflow/docker_example

  3. 运行 Docker Compose 文件:

    docker compose up

  4. http://localhost:7860/ 访问 Langflow。

配置 Docker 服务

Docker Compose 配置启动两个服务:langflowpostgres

要在容器启动时配置这些服务的值,请在 .env 文件中定义相关的 Langflow 环境变量。 然后,在您的 docker run 命令中包含 --env-file 标志:


_10
docker run -it --rm \
_10
-p 7860:7860 \
_10
--env-file .env \
_10
langflowai/langflow:latest

如果您的 .env 文件不在同一目录中,请提供 .env 文件的路径。

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 文件。

  1. 创建项目目录:

_10
mkdir langflow-custom && cd langflow-custom

  1. 下载示例流程或将您的流程 .JSON 文件包含在 langflow-custom 目录中。

_10
wget https://raw.githubusercontent.com/langflow-ai/langflow-helm-charts/refs/heads/main/examples/flows/basic-prompting-hello-world.json

  1. 创建 Dockerfile:

_10
FROM langflowai/langflow-backend:latest
_10
RUN mkdir /app/flows
_10
COPY ./*.json /app/flows/
_10
ENV LANGFLOW_LOAD_FLOWS_PATH=/app/flows

COPY ./*json 命令将当前目录中的所有 JSON 文件复制到 /flows 文件夹。

ENV LANGFLOW_LOAD_FLOWS_PATH=/app/flows 命令在 Docker 容器内设置环境变量。通过将其指向 /app/flows,您可以确保应用程序能够找到并使用在镜像构建过程中复制到该目录的 JSON 流程文件。

  1. 在本地构建并运行镜像。

_10
docker build -t myuser/langflow-hello-world:1.0.0 .
_10
docker run -p 7860:7860 myuser/langflow-hello-world:1.0.0

  1. 构建镜像并推送到 Docker Hub。 将 myuser 替换为您的 Docker Hub 用户名。

_10
docker build -t myuser/langflow-hello-world:1.0.0 .
_10
docker push myuser/langflow-hello-world:1.0.0

要使用 Helm 部署镜像,请参阅在 Kubernetes 上部署 Langflow 生产环境

使用您自己的代码自定义 Langflow Docker 镜像

您可以通过添加自己的代码或修改现有组件来自定义 Langflow Docker 镜像。

此示例 Dockerfile 演示了如何通过替换 astradb_graph.py 组件来自定义 Langflow,但这种模式可以适用于任何其他组件或自定义代码。


_20
FROM langflowai/langflow:latest
_20
# 设置工作目录
_20
WORKDIR /app
_20
# 复制您修改的 astradb_graph.py 文件
_20
COPY src/backend/base/langflow/components/vectorstores/astradb_graph.py /tmp/astradb_graph.py
_20
# 查找安装 langflow 的 site-packages 目录
_20
RUN python -c "import site; print(site.getsitepackages()[0])" > /tmp/site_packages.txt
_20
# 在 site-packages 位置替换文件
_20
RUN SITE_PACKAGES=$(cat /tmp/site_packages.txt) && \
_20
echo "Site packages at: $SITE_PACKAGES" && \
_20
mkdir -p "$SITE_PACKAGES/langflow/components/vectorstores" && \
_20
cp /tmp/astradb_graph.py "$SITE_PACKAGES/langflow/components/vectorstores/"
_20
# 仅清理 site-packages 目录中的 Python 缓存
_20
RUN SITE_PACKAGES=$(cat /tmp/site_packages.txt) && \
_20
find "$SITE_PACKAGES" -name "*.pyc" -delete && \
_20
find "$SITE_PACKAGES" -name "__pycache__" -type d -exec rm -rf {} +
_20
# 暴露默认的 Langflow 端口
_20
EXPOSE 7860
_20
# 运行 Langflow 的命令
_20
CMD ["python", "-m", "langflow", "run", "--host", "0.0.0.0", "--port", "7860"]

要使用此自定义 Dockerfile,请执行以下操作:

  1. 为您的自定义 Langflow 设置创建目录:

_10
mkdir langflow-custom && cd langflow-custom

  1. 为您的自定义代码创建必要的目录结构。 在此示例中,Langflow 期望 astradb_graph.py 存在于 /vectorstores 目录中,因此您需要在该位置创建目录。

_10
mkdir -p src/backend/base/langflow/components/vectorstores

  1. 将您修改的 astradb_graph.py 文件放在 /vectorstores 目录中。

  2. 在您的 langflow-custom 目录中创建名为 Dockerfile 的新文件,然后将上面显示的 Dockerfile 内容复制到其中。

  3. 构建并运行镜像:


_10
docker build -t myuser/langflow-custom:1.0.0 .
_10
docker run -p 7860:7860 myuser/langflow-custom:1.0.0

这种方法可以适用于您想要添加到 Langflow 的任何其他组件或自定义代码,只需修改文件路径和组件名称即可。

Search