Skip to main content

配置外部 PostgreSQL 資料庫

AgentBuilder 的預設資料庫是 SQLite,但您可以配置 AgentBuilder 使用 PostgreSQL 代替。

本指南將引導您通過將預設 SQLite 連接字串 sqlite:///./langflow.db 替換為 PostgreSQL,在本地和容器化環境中為 AgentBuilder 設定外部資料庫。

在此配置中,來自 AgentBuilder 的所有結構化應用程式資料,包括FLOW、訊息歷史記錄和日誌,都由 PostgreSQL 管理。 PostgreSQL 更適合生產環境,因為它對並發使用者、先進資料完整性功能和可擴展性的強大支援。 通過使用 PostgreSQL 作為資料庫,AgentBuilder 可以更有效地處理多個使用者和更大的工作負載。

先決條件

將 AgentBuilder 連接到本地 PostgreSQL 資料庫

  1. 如果 AgentBuilder 正在運行,請使用 Ctrl+C 停止 AgentBuilder。

  2. postgresql://user:password@host:port/dbname 格式找到您的 PostgreSQL 資料庫連接字串。

    連接字串中的主機名稱取決於您如何運行 PostgreSQL:

    • 如果您直接在機器上運行 PostgreSQL,請使用 localhost
    • 如果您在 Docker Compose 中運行 PostgreSQL,請使用服務名稱,例如 postgres
    • 如果您在單獨的 Docker 容器中使用 docker run 運行 PostgreSQL,請使用容器的 IP 地址或網路別名。
    • 如果您運行雲端託管的 PostgreSQL,您的提供者將分享您的連接字串,其中包括使用者名稱和密碼。
  3. 編輯或建立 AgentBuilder .env 檔案:


    _10
    touch .env

    您可以使用 AgentBuilder 儲存庫中的 .env.example 檔案作為您自己的 .env 檔案的範本。

  4. 在您的 .env 檔案中,將 LANGFLOW_DATABASE_URL 設定為您的 PostgreSQL 連接字串:


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

    AgentBuilder 使用 SQLAlchemypsycopg 驅動程式直接將 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"

      不要將 AgentBuilder 環境變數 LANGFLOW_SSL_CERT_FILELANGFLOW_SSL_KEY_FILE 用於您的 PostgreSQL 憑證:這些變數是用於在 AgentBuilder 伺服器上啟用 HTTPS,而不是用於 PostgreSQL 資料庫連接。

      有關在 PostgreSQL 中管理 SSL 憑證的更多資訊,請參閱 PostgreSQL 文件

  5. 儲存您的更改,然後使用您的 .env 檔案啟動 AgentBuilder:


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

    有關可選連接池和逾時設定的資訊,請參閱 配置外部記憶體

  6. 在 AgentBuilder 中,運行任何FLOW以建立流量。

  7. 檢查您的 PostgreSQL 資料庫的表格和活動,以驗證在您運行FLOW後是否建立了新表格和流量。

使用 docker-compose.yml 部署 AgentBuilder 和 PostgreSQL 容器

在同一 Docker 網路中啟動 AgentBuilder 和 PostgreSQL 容器可確保服務之間的適當連接。 例如,請參閱 AgentBuilder 儲存庫中的 docker-compose.yml 檔案。

示例 docker-compose.yml 中的配置還為 AgentBuilder 和 PostgreSQL 資料設定了持久性卷。 持久性卷將容器內的目錄映射到主機機器上的儲存,因此資料在容器重新啟動時持續存在。

Docker Compose 為 docker-compose.yml 中定義的所有服務建立隔離網路。這確保服務可以使用它們的服務名稱作為主機名稱相互通信,例如資料庫 URL 中的 postgres。 相反,如果您使用 docker run 單獨運行 PostgreSQL,它會在與 AgentBuilder 容器不同的網路中啟動,這會阻止 AgentBuilder 使用服務名稱連接到 PostgreSQL。

要使用示例 Docker Compose 檔案啟動 AgentBuilder 和 PostgreSQL 服務,請導航到 langflow/docker_example 目錄,然後運行 docker-compose up。 如果您使用不同的 docker-compose.yml 檔案,請從您的 docker-compose.yml 檔案所在的相同目錄運行 docker-compose up 命令。

使用共享 PostgreSQL 資料庫部署多個 AgentBuilder 實例

要配置共享相同 PostgreSQL 資料庫的多個 AgentBuilder 實例,請修改您的 docker-compose.yml 檔案以包含多個 AgentBuilder 服務。

此示例使用來自您的 AgentBuilder .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 存取第一個 AgentBuilder 實例,在 http://localhost:7861 存取第二個 AgentBuilder 實例。

  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。 由於每個 AgentBuilder 實例在 Docker 網路上的自己的容器中運行,使用不同的傳入 IP 地址確認兩個實例都積極連接到 PostgreSQL 資料庫。

  7. 要退出 psql,輸入 quit

另請參閱

Search