# 生產環境

> 為團隊執行 PentAGI — 強化、隔離、Podman 與多個執行個體。

## [檢查清單](https://pentagi.com/zh-tw/docs/deployment/production/#checklist)

* 在首次啟動前設定所有憑證，包括 `COOKIE_SIGNING_SALT` — 請參閱[安全性](https://pentagi.com/zh-tw/docs/configuration/security/)。安裝程式會產生 salt 與服務密碼，但不會產生 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-tw/docs/glossary/#tool) 執行移至專用的 [worker node](https://pentagi.com/zh-tw/docs/deployment/worker-node/)。
* 啟用[可觀測性](https://pentagi.com/zh-tw/docs/configuration/observability/)，以便您追蹤成本與失敗情況。
* 將 [knowledge graph](https://pentagi.com/zh-tw/docs/glossary/#knowledge-graph) 與 Langfuse 置於私有網路中。

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

PentAGI 可在 Podman 及 Docker 上執行。在無根模式下，`scraper` 服務需要額外設定，因為無根容器無法綁定特權連接埠；儲存庫 README 中說明了無根與有根模式的設定方式。

## [多個實例 (`TENANT_ID`)](https://pentagi.com/zh-tw/docs/deployment/production/#several-instances-tenant_id)

單一安裝時請將 `TENANT_ID` 留空，並在現有安裝上保持其為空：稍後設定此值會將實例移至一個新的、空的 schema，該 schema 會以預設的 `admin@pentagi.com` 帳戶開始，而其 [flow](https://pentagi.com/zh-tw/docs/glossary/#flow)、使用者和設定將不再顯示。當多個 PentAGI 實例共用外部資源（例如一部 PostgreSQL 伺服器、一個 [worker node](https://pentagi.com/zh-tw/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-tw/docs/glossary/#tenant) 識別碼 |
| 遙測              | Langfuse 與 OpenTelemetry 資料會標記 tenant 識別碼           |

該值必須與 `^[a-z][a-z0-9_]{0,31}$` 相符。主機資源不具備命名空間隔離。同一部伺服器上的實例需要各自的 `DATA_DIR` 與公開連接埠。[sandbox](https://pentagi.com/zh-tw/docs/glossary/#sandbox) 執行於同一個 Docker 主機（無論是在單一伺服器或共用的 worker node）的實例，需要各自的 `DOCKER_PORTS_BASE`，以及若已設定則需各自的 `DOCKER_WORK_DIR`；否則它們的 sandbox 會佔用相同的連接埠，導致 flow 無法啟動。每個 base 會開啟一個 2000 個連接埠的區間，預設從 `28000` 開始，因此例如可使用 `28000` 與 `30000`。