配置外部 PostgreSQL 資料庫
AgentBuilder 的預設資料庫是 SQLite,但您可以配置 AgentBuilder 使用 PostgreSQL 代替。
本指南將引導您通過將預設 SQLite 連接字串 sqlite:///./langflow.db 替換為 PostgreSQL,在本地和容器化環境中為 AgentBuilder 設定外部資料庫。
在此配置中,來自 AgentBuilder 的所有結構化應用程式資料,包括FLOW、訊息歷史記錄和日誌,都由 PostgreSQL 管理。 PostgreSQL 更適合生產環境,因為它對並發使用者、先進資料完整性功能和可擴展性的強大支援。 通過使用 PostgreSQL 作為資料庫,AgentBuilder 可以更有效地處理多個使用者和更大的工作負載。
先決條件
- PostgreSQL 資料庫
將 AgentBuilder 連接到本地 PostgreSQL 資料庫
-
如果 AgentBuilder 正在運行,請使用 Ctrl+C 停止 AgentBuilder。
-
以
postgresql://user:password@host:port/dbname格式找到您的 PostgreSQL 資料庫連接字串。連接字串中的主機名稱取決於您如何運行 PostgreSQL:
- 如果您直接在機器上運行 PostgreSQL,請使用
localhost。 - 如果您在 Docker Compose 中運行 PostgreSQL,請使用服務名稱,例如
postgres。 - 如果您在單獨的 Docker 容器中使用
docker run運行 PostgreSQL,請使用容器的 IP 地址或網路別名。 - 如果您運行雲端託管的 PostgreSQL,您的提供者將分享您的連接字串,其中包括使用者名稱和密碼。
- 如果您直接在機器上運行 PostgreSQL,請使用
-
編輯或建立 AgentBuilder
.env檔案:_10touch .env您可以使用 AgentBuilder 儲存庫中的
.env.example檔案作為您自己的.env檔案的範本。 -
在您的
.env檔案中,將LANGFLOW_DATABASE_URL設定為您的 PostgreSQL 連接字串:_10LANGFLOW_DATABASE_URL="postgresql://user:password@localhost:5432/dbname"AgentBuilder 使用 SQLAlchemy 和 psycopg 驅動程式直接將 SSL 參數傳遞給 PostgreSQL 連接。支援以下 SSL 模式:
-
sslmode=require:需要 SSL 連接但不驗證伺服器憑證。此選項最不安全,但對大多數使用案例來說是可以接受的 。_10LANGFLOW_DATABASE_URL="postgresql://user:password@localhost:5432/dbname?sslmode=require" -
sslmode=verify-ca:需要 SSL 並根據憑證授權機構 (CA) 驗證伺服器憑證。將憑證路徑新增到您的連接字串:_10LANGFLOW_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 匹配。此選項最安全。_10LANGFLOW_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_FILE和LANGFLOW_SSL_KEY_FILE用於您的 PostgreSQL 憑證:這些變數是用於在 AgentBuilder 伺服器上啟用 HTTPS,而不是用於 PostgreSQL 資料庫連接。有關在 PostgreSQL 中管理 SSL 憑證的更多資訊,請參閱 PostgreSQL 文件。
-
-
儲存您的更改,然後使用您的
.env檔案啟動 AgentBuilder:_10uv run langflow run --env-file .env有關可選連接池和逾時設定的資訊,請參閱 配置外部記憶體。
-
在 AgentBuilder 中,運行任何FLOW以建立流量。
-
檢查您的 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 中的值。
這種方法意味著您只需要在一檔案中管理部署變數,而不是跨多個檔案複製值。
-
使用您的 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存取第一個 AgentBuilder 實例,在http://localhost:7861存取第二個 AgentBuilder 實例。 -
要確認兩個實例都在使用相同的資料庫,請運行
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。 由於每個 AgentBuilder 實例在 Docker 網路上的自己的容器中運行,使用不同的傳入 IP 地址確認兩個實例都積極連接到 PostgreSQL 資料庫。 -
要退出
psql,輸入quit。