跳到主要内容

配置外部 PostgreSQL 数据库

Langflow 的默认数据库是 SQLite,但你可以配置 Langflow 改用 PostgreSQL。

本指南将引导你配置 Langflow 使用外部数据库,方法是将默认的 SQLite 连接字符串 sqlite:///./langflow.db 替换为 PostgreSQL。

先决条件

将 Langflow 连接到 PostgreSQL

要将 Langflow 连接到 PostgreSQL,请按照以下步骤操作。

  1. 找到你的 PostgreSQL 数据库连接字符串。它看起来像 postgresql://user:password@host:port/dbname

连接字符串中的主机名取决于你运行 PostgreSQL 的方式。

  • 如果你直接在你的机器上运行 PostgreSQL,请使用 localhost
  • 如果你在 Docker Compose 中运行 PostgreSQL,请使用服务名称,例如 postgres
  • 如果你在使用 docker run 命令的独立 Docker 容器中运行 PostgreSQL,请使用容器的 IP 地址或网络别名。
  1. 创建一个用于配置 Langflow 的 .env 文件。

_10
touch .env

  1. 要设置数据库 URL 环境变量,请将其添加到你的 .env 文件中

_10
LANGFLOW_DATABASE_URL="postgresql://user:password@localhost:5432/dbname"

提示

Langflow 项目包含一个 .env.example 文件,可帮助你入门。你可以将此文件的内容复制到你自己的 .env 文件中,并将示例值替换为你自己的首选设置。将 LANGFLOW_DATABASE_URL 的值替换为你的 PostgreSQL 连接字符串。

  1. 使用 .env 文件运行 Langflow

_10
uv run langflow run --env-file .env

  1. 在 Langflow 中,通过运行流程来生成流量。
  2. 检查你的 PostgreSQL 部署中的表和活动。将创建新的表和流量。

Langflow 和 PostgreSQL docker-compose.yml 示例

Langflow 项目包含一个 docker-compose.yml 文件,用于快速部署 PostgreSQL。

此配置在同一个 Docker 网络中启动 Langflow 和 PostgreSQL 容器,确保服务之间的正确连接。它还为 Langflow 和 PostgreSQL 数据设置了持久卷。

要启动服务,请导航到 /docker_example 目录,然后运行 docker-compose up


_29
services
_29
langflow
_29
image: langflowai/langflow:latest # or another version tag on https://hub.docker.com/r/langflowai/langflow
_29
pull_policy: always # set to 'always' when using 'latest' image
_29
ports
_29
- "7860:7860"
_29
depends_on
_29
- postgres
_29
environment
_29
- LANGFLOW_DATABASE_URL=postgresql://langflow:langflow@postgres:5432/langflow
_29
# This variable defines where the logs, file storage, monitor data, and secret keys are stored.
_29
- LANGFLOW_CONFIG_DIR=app/langflow
_29
volumes
_29
- langflow-data:/app/langflow
_29
_29
postgres
_29
image: postgres:16
_29
environment
_29
POSTGRES_USER: langflow
_29
POSTGRES_PASSWORD: langflow
_29
POSTGRES_DB: langflow
_29
ports
_29
- "5432:5432"
_29
volumes
_29
- langflow-postgres:/var/lib/postgresql/data
_29
_29
volumes
_29
langflow-postgres: # PostgreSQL 数据持久卷
_29
langflow-data: # Langflow 数据持久卷

注意

Docker Compose 会为 docker-compose.yml 文件中定义的所有服务创建一个隔离的网络。这确保了服务可以使用其服务名称作为主机名互相通信,例如数据库 URL 中的 postgres。如果你使用 docker run 单独运行 PostgreSQL,它将位于不同的网络中,Langflow 将无法使用服务名称连接到它。

使用共享数据库部署多个 Langflow 实例

要配置共享同一个 PostgreSQL 数据库的多个 Langflow 实例,请修改你的 docker-compose.yml 文件以包含多个 Langflow 服务。

使用环境变量进行更集中的配置管理

  1. 使用你的 PostgreSQL 数据库的值更新你的 .env 文件

_10
POSTGRES_USER=langflow
_10
POSTGRES_PASSWORD=your_secure_password
_10
POSTGRES_DB=langflow
_10
POSTGRES_HOST=postgres
_10
POSTGRES_PORT=5432
_10
LANGFLOW_CONFIG_DIR=app/langflow
_10
LANGFLOW_PORT_1=7860
_10
LANGFLOW_PORT_2=7861
_10
LANGFLOW_HOST=0.0.0.0

  1. 在你的 docker-compose.yml 中引用这些变量

_46
services
_46
postgres
_46
image: postgres:16
_46
environment
_46
- POSTGRES_USER=${POSTGRES_USER}
_46
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
_46
- POSTGRES_DB=${POSTGRES_DB}
_46
ports
_46
- "${POSTGRES_PORT}:5432"
_46
volumes
_46
- langflow-postgres:/var/lib/postgresql/data
_46
_46
langflow-1
_46
image: langflowai/langflow:latest
_46
pull_policy: always
_46
ports
_46
- "${LANGFLOW_PORT_1}:7860"
_46
depends_on
_46
- postgres
_46
environment
_46
- LANGFLOW_DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}
_46
- LANGFLOW_CONFIG_DIR=${LANGFLOW_CONFIG_DIR}
_46
- LANGFLOW_HOST=${LANGFLOW_HOST}
_46
- PORT=7860
_46
volumes
_46
- langflow-data-1:/app/langflow
_46
_46
langflow-2
_46
image: langflowai/langflow:latest
_46
pull_policy: always
_46
ports
_46
- "${LANGFLOW_PORT_2}:7860"
_46
depends_on
_46
- postgres
_46
environment
_46
- LANGFLOW_DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}
_46
- LANGFLOW_CONFIG_DIR=${LANGFLOW_CONFIG_DIR}
_46
- LANGFLOW_HOST=${LANGFLOW_HOST}
_46
- PORT=7860
_46
volumes
_46
- langflow-data-2:/app/langflow
_46
_46
volumes
_46
langflow-postgres
_46
langflow-data-1
_46
langflow-data-2

  1. 使用 docker-compose up 部署文件。你可以通过 http://localhost:7860 访问第一个 Langflow 实例,通过 http://localhost:7861 访问第二个 Langflow 实例。

  2. 要确认两个实例都使用同一个数据库,请运行 docker exec 命令在你的 PostgreSQL 容器中启动 psql。你的容器名称可能会有所不同。


_10
docker exec -it docker-test-postgres-1 psql -U langflow -d langflow

  1. 查询数据库中的活动连接

_10
langflow=# SELECT * FROM pg_stat_activity WHERE datname = 'langflow';

  1. 检查查询结果中是否存在多个 client_addr 值不同的连接,例如 172.21.0.3172.21.0.4

由于每个 Langflow 实例都在 Docker 网络上的独立容器中运行,因此使用不同的传入 IP 地址证实了两个实例都已主动连接到 PostgreSQL 数据库。

  1. 要退出 psql,输入 quit
Search