跳到主要内容

在 Docker 上部署 Langflow

提示

Podman can be used instead of Docker for all commands shown here. For more information, see the Podman documentation.

在 Docker 容器中运行应用程序可以确保在不同系统之间保持一致的行为,并消除依赖冲突。

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

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

  • 快速入门:使用默认值启动 Langflow 容器。
  • 使用 Docker Compose:克隆 Langflow 仓库,然后使用 Docker Compose 构建 Langflow Docker 容器。 这种方案提供了对配置的更多控制,包括持久化的 PostgreSQL 数据库服务,同时仍使用基础 Langflow Docker 镜像。
  • 将工作流打包为 Docker 镜像:使用 Dockerfile 将工作流打包为 Docker 镜像。
  • 创建自定义 Langflow 镜像:使用 Dockerfile 打包自定义 Langflow Docker 镜像,其中包含您自己的代码、自定义依赖项或其他修改。

快速入门:使用默认值启动 Langflow 容器

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


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

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

此容器运行一个带有默认设置的预构建 Docker 镜像。 要对配置进行更多控制,请参阅克隆仓库并运行 Langflow Docker 容器

克隆仓库并运行 Langflow Docker 容器

克隆 Langflow 仓库并使用 Docker Compose 可以让您更好地控制配置,允许您自定义环境变量、使用持久化的 PostgreSQL 数据库服务(而不是默认的 SQLite 数据库),并包含自定义依赖项。

使用 Docker Compose 的默认部署包括以下内容:

  • Langflow 服务:运行最新的 Langflow 镜像,并使用 PostgreSQL 作为数据库。
  • PostgreSQL 服务:为工作流、用户和设置提供持久数据存储。
  • 持久化卷:确保您的数据在容器重启后依然存在。

完整的 Docker Compose 配置可在 docker_example/docker-compose.yml 中找到。

  1. 克隆 Langflow 仓库:


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

  2. 导航到 docker_example 目录:


    _10
    cd langflow/docker_example

  3. 运行 Docker Compose 文件:


    _10
    docker compose up

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

自定义您的部署

您可以自定义 Docker Compose 配置以适应您的特定部署。

例如,要使用 .env 文件配置容器的数据库凭据,请执行以下操作:

  1. docker-compose.yml 所在的目录中创建一个包含数据库凭据的 .env 文件:


    _10
    # 数据库凭据
    _10
    POSTGRES_USER=myuser
    _10
    POSTGRES_PASSWORD=mypassword
    _10
    POSTGRES_DB=langflow
    _10
    _10
    # Langflow 配置
    _10
    LANGFLOW_DATABASE_URL=postgresql://myuser:mypassword@postgres:5432/langflow
    _10
    LANGFLOW_CONFIG_DIR=/app/langflow

  2. 修改 docker-compose.yml 文件,为 langflowpostgres 服务引用 .env 文件:


    _10
    services:
    _10
    langflow:
    _10
    environment:
    _10
    - LANGFLOW_DATABASE_URL=${LANGFLOW_DATABASE_URL}
    _10
    - LANGFLOW_CONFIG_DIR=${LANGFLOW_CONFIG_DIR}
    _10
    postgres:
    _10
    environment:
    _10
    - POSTGRES_USER=${POSTGRES_USER}
    _10
    - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    _10
    - POSTGRES_DB=${POSTGRES_DB}

有关可用环境变量的完整列表,请参阅 Langflow 环境变量

有关更多自定义选项,请参阅使用您自己的代码自定义 Langflow Docker 镜像

将工作流打包为 Docker 镜像

本节介绍如何创建 Dockerfile,以构建包含您的 Langflow 工作流的 Docker 镜像。当您想要将特定的工作流作为独立容器分发或将其部署到 Kubernetes 等环境时,此方法非常有用。

与之前使用预构建镜像的章节不同,此方法构建了一个嵌入了您的工作流的自定义镜像。

  1. 创建一个项目目录,并进入该目录。


    _10
    mkdir langflow-custom && cd langflow-custom

  2. 将您的工作流 JSON 文件添加到该目录。您可以下载示例,或使用您自己的文件:


    _10
    # 下载示例工作流
    _10
    wget https://raw.githubusercontent.com/langflow-ai/langflow-helm-charts/refs/heads/main/examples/flows/basic-prompting-hello-world.json
    _10
    _10
    # 或复制您自己的工作流文件
    _10
    cp /path/to/your/flow.json .

  3. 创建一个 Dockerfile 来构建您的自定义镜像:


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

这个 Dockerfile 使用官方 Langflow 镜像作为基础,为您的工作流创建一个目录,将您的 JSON 工作流文件复制到该目录中,并设置环境变量以告知 Langflow 在何处查找工作流。

  1. 构建并测试您的自定义镜像:


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

  2. 将您的镜像推送到 Docker Hub(可选):


    _10
    docker push myuser/langflow-custom:1.0.0

您的自定义镜像现在包含您的工作流,并且可以部署在任何运行 Docker 的地方。对于 Kubernetes 部署,请参阅在 Kubernetes 上部署 Langflow 生产环境

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

虽然上一节展示了如何将工作流与 Docker 镜像打包,但本节展示了如何自定义 Langflow 应用程序本身。当您需要添加自定义 Python 包或依赖项、修改 Langflow 的配置或设置、包含自定义组件或工具,或添加您自己的代码以扩展 Langflow 的功能时,这非常有用。

此示例演示了如何自定义 Message History 组件,但相同的方法可用于任何代码修改。


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

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

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


    _10
    mkdir langflow-custom && cd langflow-custom

  2. 为您的自定义代码创建必要的目录结构。 在此示例中,Langflow 期望 memory.py 存在于 /helpers 目录中,因此您在该位置创建一个目录。


    _10
    mkdir -p src/lfx/src/lfx/components/helpers

  3. 将修改后的 memory.py 文件放入 /helpers 目录。

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

  5. 构建并运行镜像:


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

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

Search