在 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 现在可通过 http://localhost: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 现在可通过 http://localhost: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 的任何其他组件或自定义代码。