在 Docker 上部署 Langflow
在 Docker 容器中运行应用程序确保了在不同系统上的一致性行为,并消除了依赖项冲突。
您可以使用 Langflow Docker 镜像来启动 Langflow 容器。
本指南演示了使用 Docker 和 Docker Compose 部署 Langflow 的几种方式:
- 使用默认值启动 Langflow 容器
- 克隆仓库并使用 Docker Compose 构建 Langflow Docker 容器,具有持久性 PostgreSQL 数据库服务
- 使用 Dockerfile 将流程打包为 Docker 镜像
- 使用您自己的代码自定义 Langflow Docker 镜像
使用默认值启动 Langflow 容器
在您的系统上安装并运行 Docker 后,运行以下命令:
docker run -p 7860:7860 langflowai/langflow:latest
然后,在 http://localhost:7860/
访问 Langflow。
克隆仓库并构建 Langflow Docker 容器
使用 Docker Compose 构建具有持久性 PostgreSQL 数据库服务的 Langflow:
-
克隆 Langflow 仓库:
git clone https://github.com/langflow-ai/langflow.git
-
导航到
docker_example
目录:cd langflow/docker_example
-
运行 Docker Compose 文件:
docker compose up
-
在
http://localhost:7860/
访问 Langflow。
配置 Docker 服务
Docker Compose 配置启动两个服务:langflow
和 postgres
。
要在容器启动时配置这些服务的值,请在 .env
文件中定义相关的 Langflow 环境变量。
然后,在您的 docker run
命令中包含 --env-file
标志:
_10docker 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
文件。
- 创建项目目录:
_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# 设置工作目录_20WORKDIR /app_20# 复制您修改的 astradb_graph.py 文件_20COPY src/backend/base/langflow/components/vectorstores/astradb_graph.py /tmp/astradb_graph.py_20# 查找安装 langflow 的 site-packages 目录_20RUN python -c "import site; print(site.getsitepackages()[0])" > /tmp/site_packages.txt_20# 在 site-packages 位置替换文件_20RUN 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 缓存_20RUN 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 端口_20EXPOSE 7860_20# 运行 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
目录中。 -
在您的
langflow-custom
目录中创建名为Dockerfile
的新文件,然后将上面显示的 Dockerfile 内容复制到其中。 -
构建并运行镜像:
_10docker build -t myuser/langflow-custom:1.0.0 ._10docker run -p 7860:7860 myuser/langflow-custom:1.0.0
这种方法可以适用于您想要添加到 Langflow 的任何其他组件或自定义代码,只需修改文件路径和组件名称即可。