跳到主要内容

配置外部 PostgreSQL 数据库 (Configure an external PostgreSQL database)

Langflow 的默认数据库是 SQLite,但您可以将 Langflow 配置为使用 PostgreSQL。

本指南将引导您在本地和容器化环境中,通过将默认的 SQLite 连接字符串 sqlite:///./langflow.db 替换为 PostgreSQL,为 Langflow 设置外部数据库。

在此配置中,来自 Langflow 的所有结构化应用数据(包括工作流、消息历史记录和日志)都将由 PostgreSQL 管理。 PostgreSQL 由于其对并发用户、高级数据完整性功能和可扩展性的强大支持,更适合生产环境。 通过使用 PostgreSQL 作为数据库,Langflow 可以更有效地处理多个用户 e 和更大的工作负载。

前提条件

将 Langflow 连接到本地 PostgreSQL 数据库

  1. 如果 Langflow 正在运行,请使用 Ctrl+C 停止 Langflow。

  2. 找到您的 PostgreSQL 数据库连接字符串,格式为 postgresql://user:password@host:port/dbname

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

    • 如果您直接在机器上运行 PostgreSQL,请使用 localhost
    • 如果您在 Docker Compose 中运行 PostgreSQL,请使用服务名称,例如 postgres
    • 如果您使用 docker run 在单独的 Docker 容器中运行 PostgreSQL,请使用容器的 IP 地址或网络别名。
    • 如果您运行的是云托管的 PostgreSQL,您的提供商将分享您的连接字符串,其中包含用户名和密码。
  3. 编辑或创建一个 Langflow .env 文件:


    _10
    touch .env

    您可以使用 Langflow 代码库中的 .env.example 文件作为您自己的 .env 文件的模板。

  4. 在您的 .env 文件中,将 LANGFLOW_DATABASE_URL 设置为您的 PostgreSQL 连接字符串:


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

    Langflow 使用 SQLAlchemy 配合 psycopg 驱动程序将 SSL 参数直接传递给 PostgreSQL 连接。支持以下 SSL 模式:

    • sslmode=require:需要 SSL 连接,但不验证服务器证书。此选项安全性最低,但对于大多数用例是可以接受的。


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

    • sslmode=verify-ca:需要 SSL 并根据证书颁发机构 (CA) 验证服务器证书。将证书路径添加到连接字符串中:


      _10
      LANGFLOW_DATABASE_URL="postgresql://user@localhost:5432/dbname?sslmode=verify-ca&sslcert=/path/to/client.crt&sslkey=/path/to/client.key&sslrootcert=/path/to/ca.crt"

    • sslmode=verify-full:需要 SSL,验证服务器证书,并根据证书主机名检查请求主机名。本例中的 db.example.com 主机名必须与服务器证书的 CN 匹配。此选项最安全。


      _10
      LANGFLOW_DATABASE_URL="postgresql://user@db.example.com:5432/dbname?sslmode=verify-full&sslcert=/path/to/client.crt&sslkey=/path/to/client.key&sslrootcert=/path/to/ca.crt"

      请勿将 Langflow 环境变量 LANGFLOW_SSL_CERT_FILELANGFLOW_SSL_KEY_FILE 用于您的 PostgreSQL 证书:这些变量用于在 Langflow 服务器上启用 HTTPS,而不是用于 PostgreSQL 数据库连接。

      有关在 PostgreSQL 中管理 SSL 证书的更多信息,请参阅 PostgreSQL 文档

  5. 保存更改,然后使用您的 .env 文件启动 Langflow:


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

    有关可选的连接池和超时设置,请参阅 配置外部存储

  6. 在 Langflow 中运行任何工作流以产生流量。

  7. 检查您的 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 中的值。 这种方法意味着您只需要在一个文件中管理部署变量,而不需要在多个文件中复制值。

  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

    有关可选的连接池和超时设置,请参阅 配置外部存储

  2. 在您的 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:

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

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


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

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


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

  6. 检查查询结果中是否存在具有不同 client_addr 值(例如 172.21.0.3172.21.0.4)的多个连接。 由于每个 Langflow 实例都在 Docker 网络上自己的容器中运行,因此使用不同的传入 IP 地址确认了两个实例都已主动连接到 PostgreSQL 数据库。

  7. 要退出 psql,请输入 \q

另请参阅

Search