配置外部 PostgreSQL 数据库
Langflow 的默认数据库是 SQLite,但你可以配置 Langflow 改用 PostgreSQL。
本指南将引导你配置 Langflow 使用外部数据库,方法是将默认的 SQLite 连接字符串 sqlite:///./langflow.db
替换为 PostgreSQL。
先决条件
- 一个 PostgreSQL 数据库
将 Langflow 连接到 PostgreSQL
要将 Langflow 连接到 PostgreSQL,请按照以下步骤操作。
- 找到你的 PostgreSQL 数据库连接字符串。它看起来像
postgresql://user:password@host:port/dbname
。
连接字符串中的主机名取决于你运行 PostgreSQL 的方式。
- 如果你直接在你的机器上运行 PostgreSQL,请使用
localhost
。 - 如果你在 Docker Compose 中运行 PostgreSQL,请使用服务名称,例如
postgres
。 - 如果你在使用
docker run
命令的独立 Docker 容器中运行 PostgreSQL,请使用容器的 IP 地址或网络别名。
- 创建一个用于配置 Langflow 的
.env
文件。
_10touch .env
- 要设置数据库 URL 环境变量,请将其添加到你的
.env
文件中
_10LANGFLOW_DATABASE_URL="postgresql://user:password@localhost:5432/dbname"
Langflow 项目包含一个 .env.example
文件,可帮助你入门。你可以将此文件的内容复制到你自己的 .env
文件中,并将示例值替换为你自己的首选设置。将 LANGFLOW_DATABASE_URL
的值替换为你的 PostgreSQL 连接字符串。
- 使用
.env
文件运行 Langflow
_10uv run langflow run --env-file .env
- 在 Langflow 中,通过运行流程来生成流量。
- 检查你的 PostgreSQL 部署中的表和活动。将创建新的表和流量。
Langflow 和 PostgreSQL docker-compose.yml 示例
Langflow 项目包含一个 docker-compose.yml 文件,用于快速部署 PostgreSQL。
此配置在同一个 Docker 网络中启动 Langflow 和 PostgreSQL 容器,确保服务之间的正确连接。它还为 Langflow 和 PostgreSQL 数据设置了持久卷。
要启动服务,请导航到 /docker_example
目录,然后运行 docker-compose up
。
_29services_29langflow_29image: langflowai/langflow:latest # or another version tag on https://hub.docker.com/r/langflowai/langflow_29pull_policy: always # set to 'always' when using 'latest' image_29ports_29 - "7860:7860"_29depends_on_29- postgres_29environment_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_29volumes_29- langflow-data:/app/langflow_29_29postgres_29image: postgres:16_29environment_29POSTGRES_USER: langflow_29POSTGRES_PASSWORD: langflow_29POSTGRES_DB: langflow_29ports_29 - "5432:5432"_29volumes_29- langflow-postgres:/var/lib/postgresql/data_29_29volumes_29langflow-postgres: # PostgreSQL 数据持久卷_29langflow-data: # Langflow 数据持久卷
Docker Compose 会为 docker-compose.yml 文件中定义的所有服务创建一个隔离的网络。这确保了服务可以使用其服务名称作为主机名互相通信,例如数据库 URL 中的 postgres
。如果你使用 docker run
单独运行 PostgreSQL,它将位于不同的网络中,Langflow 将无法使用服务名称连接到它。
使用共享数据库部署多个 Langflow 实例
要配置共享同一个 PostgreSQL 数据库的多个 Langflow 实例,请修改你的 docker-compose.yml
文件以包含多个 Langflow 服务。
使用环境变量进行更集中的配置管理
- 使用你的 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
。