# 生产环境

> 为团队运行 PentAGI——加固、隔离、Podman 及多实例部署。

## [检查清单](https://pentagi.com/zh-cn/docs/deployment/production/#checklist)

* 在首次启动前设置所有凭据，包括 `COOKIE_SIGNING_SALT` — 请参阅[安全](https://pentagi.com/zh-cn/docs/configuration/security/)。安装程序会生成盐值和服务密码，但不会生成 Langfuse 和 Grafana 管理员密码：请在 Langfuse 首次启动前，在模板中设置 `LANGFUSE_INIT_USER_PASSWORD`、`password`，并在 Grafana 首次启动后更改其默认 `admin` / `admin`。对于正在运行的安装，请先在数据库中更改 PostgreSQL 和 Neo4j 密码，然后再在 `.env` 中更改它们。
* 使用正式证书并提供稳定的 `PUBLIC_URL`。
* 在反向代理后面，将 `TRUSTED_PROXIES` 设置为代理的地址或 CIDR。否则，所有用户将共享代理的地址，且在 5 分钟内出现 30 次失败的登录尝试会导致所有人被锁定 15 分钟。
* 将 [tool](https://pentagi.com/zh-cn/docs/glossary/#tool) 执行迁移到专用的 [worker node](https://pentagi.com/zh-cn/docs/deployment/worker-node/)。
* 启用[可观测性](https://pentagi.com/zh-cn/docs/configuration/observability/)，以便您跟踪成本和故障情况。
* 将 [knowledge graph](https://pentagi.com/zh-cn/docs/glossary/#knowledge-graph) 和 Langfuse 部署在私有网络中。

## [Podman](https://pentagi.com/zh-cn/docs/deployment/production/#podman)

PentAGI 既可在 Docker 上运行，也可在 Podman 上运行。在无根模式下，`scraper` 服务需要额外配置，因为无根容器无法绑定特权端口；仓库的 README 中描述了无根和有根模式的设置方法。

## [多实例（`TENANT_ID`）](https://pentagi.com/zh-cn/docs/deployment/production/#several-instances-tenant_id)

对于单实例安装，请将 `TENANT_ID` 留空；在现有安装中也请保持其为空：稍后设置该值会将实例迁移到一个新的、空的 schema，该 schema 以默认的 `admin@pentagi.com` 账户开始，其原有的 [flow](https://pentagi.com/zh-cn/docs/glossary/#flow)、用户和设置将不再显示。当多个 PentAGI 实例共享外部资源（例如同一个 PostgreSQL 服务器、同一个 [worker node](https://pentagi.com/zh-cn/docs/glossary/#worker-node)、同一个 Neo4j 或同一个 Langfuse）时，请在您添加的实例上设置该值：

| 领域              | `TENANT_ID=acme` 的影响                               |
| --------------- | -------------------------------------------------- |
| PostgreSQL      | 在模式 `acme` 内运行，而非 `public`                         |
| 工作容器            | 命名为 `acme-pentagi-terminal-<flow>`                 |
| Knowledge graph | 组 ID 变为 `acme-flow-<id>`                           |
| 认证              | Cookie 和令牌密钥包含 [tenant](https://pentagi.com/zh-cn/docs/glossary/#tenant) 信息 |
| 遥测              | Langfuse 和 OpenTelemetry 数据会标记 tenant 信息           |

该值必须与 `^[a-z][a-z0-9_]{0,31}$` 匹配。主机资源未进行命名空间隔离。同一台服务器上的实例需要拥有自己的 `DATA_DIR` 和发布端口。[sandbox](https://pentagi.com/zh-cn/docs/glossary/#sandbox) 运行在同一 Docker 主机（无论是单台服务器还是共享的 worker node）上的实例，需要拥有自己的 `DOCKER_PORTS_BASE`，以及自己的 `DOCKER_WORK_DIR`（如果已设置）；否则，它们的 sandbox 会占用相同的端口，导致 flow 无法启动。每个 base 开启一个 2000 个端口的窗口，默认为 `28000`，因此例如可使用 `28000` 和 `30000`。