跳到主要内容

配置外部PostgreSQL数据库

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

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

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

先决条件

将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"

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

  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,请输入quit

另请参阅

Search