配置外部 PostgreSQL 数据库
Langflow 的默认数据库是 SQLite,但您可以配置 Langflow 使用 PostgreSQL 代替。
本指南将带您了解如何通过将默认的 SQLite 连接字符串 sqlite:///./langflow.db
替换为 PostgreSQL 来为 Langflow 设置外部数据库,既适用于本地环境也适用于容器化环境。
在此配置中,来自 Langflow 的所有结构化应用程序数据(包括流程、消息历史和日志)都由 PostgreSQL 管理。 由于 PostgreSQL 对并发用户、高级数据完整性功能和可扩展性的强大支持,它更适合生产环境。 通过使用 PostgreSQL 作为数据库,Langflow 可以更高效地处理多个用户和更大的工作负载。
先决条件
- 安装和启动 Langflow
- 创建一个 PostgreSQL 数据库
将 Langflow 连接到本地 PostgreSQL 数据库
-
如果 Langflow 正在运行,请使用 Ctrl+C 停止 Langflow。
-
找到您的 PostgreSQL 数据库的连接字符串,格式为
postgresql://user:password@host:port/dbname
。连接字符串中的主机名取决于您如何运行 PostgreSQL:
- 如果您在机器上直接运行 PostgreSQL,请使用
localhost
。 - 如果您在 Docker Compose 中运行 PostgreSQL,请使用服务名称,如
postgres
。 - 如果您使用
docker run
在单独的 Docker 容器中运行 PostgreSQL,请使用容器的 IP 地址或网络别名。 - 如果您运行云托管的 PostgreSQL,您的提供商将分享您的连接字符串,其中包括用户名和密码。
- 如果您在机器上直接运行 PostgreSQL,请使用
-
创建一个 Langflow
.env
文件:_10touch .env您可以使用 Langflow 存储库中的
.env.example
文件作为您自己的.env
文件的模板。 -
在您的
.env
文件中,将LANGFLOW_DATABASE_URL
设置为您的 PostgreSQL 连接字符串:_10LANGFLOW_DATABASE_URL="postgresql://user:password@localhost:5432/dbname" -
保存您的更改,然后使用您的
.env
文件启动 Langflow:_10uv run langflow run --env-file .env -
在 Langflow 中,运行任何流程以创建流量。
-
检查您的 PostgreSQL 数据库的表和活动,以验证在您运行流程后创建了新表和流量。
使用 docker-compose.yml 部署 Langflow 和 PostgreSQL 容器
在同一个 Docker 网络中启动 Langflow 和 PostgreSQL 容器可以确保服务之间的正常连接。
有关示例,请参阅 Langflow 存储库中的 docker-compose.yml
文件。
示例 docker-compose.yml
中的配置还为 Langflow 和 PostgreSQL 数据设置了持久卷。
持久卷将容器内的目录映射到主机上的存储,因此数据在容器重启时仍然存在。
Docker Compose 为 docker-compose.yml
中定义的所有服务创建一个隔离的网络。这确保服务可以使用它们的服务名称作为主机名相互通信,例如数据库 URL 中的 postgres
。
相比之下,如果您使用 docker run
单独运行 PostgreSQL,它会在与 Langflow 容器不同的网络中启动,这会阻止 Langflow 使用服务名称连接到 PostgreSQL。
要使用示例 Docker Compose 文件启动 Langflow 和 PostgreSQL 服务,请导航到 langflow/docker_example
目录,然后运行 docker-compose up
。
如果您使用不同的 docker-compose.yml
文件,请从与您的 docker-compose.yml
文件相同的目 录运行 docker-compose up
命令。
使用共享 PostgreSQL 数据库部署多个 Langflow 实例
要配置共享同一个 PostgreSQL 数据库的多个 Langflow 实例,请修改您的 docker-compose.yml
文件以包含多个 Langflow 服务。
此示例使用您的 Langflow .env
文件中的值填充 docker-compose.yml
中的值。
这种方法意味着您只需要在一个文件中管理部署变量,而不是在多个文件中复制值。
-
使用您的 PostgreSQL 数据库的值更新您的
.env
文件:_10POSTGRES_USER=langflow_10POSTGRES_PASSWORD=your_secure_password_10POSTGRES_DB=langflow_10POSTGRES_HOST=postgres_10POSTGRES_PORT=5432_10LANGFLOW_CONFIG_DIR=app/langflow_10LANGFLOW_PORT_1=7860_10LANGFLOW_PORT_2=7861_10LANGFLOW_HOST=0.0.0.0 -
在您的
docker-compose.yml
中引用这些变量。 例如:_46services:_46postgres:_46image: postgres:16_46environment:_46- POSTGRES_USER=${POSTGRES_USER}_46- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}_46- POSTGRES_DB=${POSTGRES_DB}_46ports:_46- "${POSTGRES_PORT}:5432"_46volumes:_46- langflow-postgres:/var/lib/postgresql/data_46_46langflow-1:_46image: langflowai/langflow:latest_46pull_policy: always_46ports:_46- "${LANGFLOW_PORT_1}:7860"_46depends_on:_46- postgres_46environment:_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_46volumes:_46- langflow-data-1:/app/langflow_46_46langflow-2:_46image: langflowai/langflow:latest_46pull_policy: always_46ports:_46- "${LANGFLOW_PORT_2}:7860"_46depends_on:_46- postgres_46environment:_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_46volumes:_46- langflow-data-2:/app/langflow_46_46volumes:_46langflow-postgres:_46langflow-data-1:_46langflow-data-2: -
使用
docker-compose up
部署文件。 您可以在http://localhost:7860
访问第一个 Langflow 实例,在http://localhost:7861
访问第二个 Langflow 实例。 -
要确认两个实例都使用同一个数据库,请运行
docker exec
命令在您的 PostgreSQL 容器中启动psql
。 您的容器名称可能不同。_10docker exec -it docker-test-postgres-1 psql -U langflow -d langflow -
查询数据库的活动连接:
_10langflow=# SELECT * FROM pg_stat_activity WHERE datname = 'langflow'; -
检查查询结果中具有不同
client_addr
值的多个连接,例如172.21.0.3
和172.21.0.4
。 由于每个 Langflow 实例都在 Docker 网络上的自己的容器中运行,使用不同的传入 IP 地址确认了两个实例都积极连接到 PostgreSQL 数据库。 -
要退出 psql,请输入
quit
。