---
title: "在生产环境运行 Dex"
description: "在生产环境运行 Dex 的检查清单，从 server 拓扑和容量到备份、升级和监控，每一项都链接到详细说明的页面。"
canonical_url: "https://docs.superdurable.io/zh-Hans/components/production/"
source: "docs/i18n/zh-Hans/docusaurus-plugin-content-docs/current/components/production.mdx"
locale: "zh-Hans"
---

> 供 AI Agent 使用的全部页面索引：https://docs.superdurable.io/zh-Hans/llms.txt

# 在生产环境运行 Dex

**dexcli dev** 在一台机器上运行所有组件，用于开发。这一页介绍自托管的生产 server，它和你自己的 Worker 一起运行。页面列出上线前要决定和配置的事项，每一项都链接到有详细说明的页面。

<a id="smallest-deployment"></a>

## 最小的真实部署

- 一个 Dex Server 节点。需要快速故障转移时，再加一个 hot standby。
- 集群使用一个对象存储 bucket 和 prefix。
- 在 API 可以被访问之前开启身份验证。
- 在 API 端口前加 TLS，或者使用私有网络。见 [TLS](https://docs.superdurable.io/zh-Hans/reference/server/authentication.md#tls)（英文）。
- [保留期](https://docs.superdurable.io/zh-Hans/components/production.md#retention)足够覆盖 Client 的重试。
- 提供 metrics，并针对节点和它的 lease 设置告警。

下面的[最小配置](https://docs.superdurable.io/zh-Hans/components/production.md#minimal-configuration)搭建的就是这种部署。

<a id="before-you-launch"></a>

## 上线之前

| 事项         | 要知道什么                                                                                                                                                                                                                   | 详细说明                                                                                                                                                                                                           |
| ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 拓扑         | 一个 active 节点服务整个集群。hot standby 可以接管。                                                                                                                                                                                    | [Dex Server](https://docs.superdurable.io/zh-Hans/components/server.md)，[Lease, hot standby, and step down](https://docs.superdurable.io/zh-Hans/reference/server/high-availability.md)（英文）                    |
| 容量和成本      | 瓶颈是 CPU。从小规模开始，见 [容量规划](https://docs.superdurable.io/zh-Hans/components/production.md#sizing)。                                                                                                                          | [性能](https://docs.superdurable.io/zh-Hans/intro/performance.md)，[超出一个节点](https://docs.superdurable.io/zh-Hans/intro/limits.md#grow-past-one-node)                                                              |
| 存储         | 对象存储保存 server 的全部状态。可以用 db9 代替它（db9 是一个独立的、兼容 PostgreSQL 的数据库产品；普通 PostgreSQL 不受支持）。                                                                                                                                    | [Object storage and backup](https://docs.superdurable.io/zh-Hans/reference/server/object-storage.md)（英文），[Dex Server 的依赖](https://docs.superdurable.io/zh-Hans/components/server.md#dependencies)              |
| 搜索后端       | 内置搜索不需要数据库。大量搜索可以用 PostgreSQL 或 ParadeDB。                                                                                                                                                                               | [Search backends](https://docs.superdurable.io/zh-Hans/reference/server/search.md)（英文）                                                                                                                         |
| 配置         | `serve` 读取一个 YAML 文件。从[最小配置](https://docs.superdurable.io/zh-Hans/components/production.md#minimal-configuration)开始。                                                                                                    | [Install and configure server-zd](https://docs.superdurable.io/zh-Hans/reference/server/configuration.md)（英文）                                                                                                  |
| 保留期        | 按 Client 重试来设定，见 [保留期](https://docs.superdurable.io/zh-Hans/components/production.md#retention)的说明。默认值见 [需要修改的默认值](https://docs.superdurable.io/zh-Hans/components/production.md#defaults-to-change-before-production)。 | [Retention 参考](https://docs.superdurable.io/zh-Hans/reference/server/configuration.md#retention)（英文）                                                                                                           |
| 备份和恢复      | bucket prefix 是唯一的数据来源。为它开启版本控制或复制，并演练一次恢复。                                                                                                                                                                             | [Backup and restore](https://docs.superdurable.io/zh-Hans/reference/server/object-storage.md#backup-and-restore)（英文）                                                                                           |
| Kubernetes | 把 server 作为 StatefulSet 运行，并配置优雅关闭。                                                                                                                                                                                     | [Kubernetes deployment](https://docs.superdurable.io/zh-Hans/reference/server/kubernetes.md)（英文）                                                                                                               |
| 身份验证       | 默认关闭。在开放 API 之前，要求使用 bearer 凭证。                                                                                                                                                                                         | [Authentication](https://docs.superdurable.io/zh-Hans/reference/server/authentication.md)（英文）                                                                                                                  |
| 监控         | 在单独的监听端口上提供 metrics。节点停止服务和 lease 续约失败时告警。                                                                                                                                                                              | [Metrics and alerts](https://docs.superdurable.io/zh-Hans/reference/server/metrics.md)（英文）                                                                                                                     |
| Worker     | Worker 主动建立出站连接。设定它们的任务槽数量，部署时优雅地停止它们。                                                                                                                                                                                  | [Workers and the task queue](https://docs.superdurable.io/zh-Hans/reference/server/workers.md)（英文）                                                                                                             |
| 升级         | 升级只向前滚动。先读每个版本的发布说明，有些升级需要停止所有进程。                                                                                                                                                                                       | [Upgrades and compatibility](https://docs.superdurable.io/zh-Hans/reference/server/upgrades.md)（英文），[Agent release notes](https://docs.superdurable.io/zh-Hans/reference/agents/upgrades.md#release-notes)（英文） |
| 你的数据库      | Step 里的写入必须可以安全地重复。                                                                                                                                                                                                     | [Dex 和你的数据库](https://docs.superdurable.io/zh-Hans/components/your-database.md)                                                                                                                                 |
| 代码变更       | 保留旧的 Step 类型和 RPC，直到使用它们的 Flow 关闭。                                                                                                                                                                                      | [修改 Flow 代码](https://docs.superdurable.io/zh-Hans/concepts/change-flow-code.md)                                                                                                                                |

<a id="defaults-to-change-before-production"></a>

### 需要修改的默认值

| 默认值                                                  | 怎么改                                                                                                                                                                                                                        |
| ---------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 已关闭的 run 和它的 Step 历史会在 7 天后删除。删除的 run 会释放它的 Flow ID。 | 设置更长的[保留期](https://docs.superdurable.io/zh-Hans/components/production.md#retention)，并把必须保留的数据复制到[你自己的数据库](https://docs.superdurable.io/zh-Hans/components/your-database.md)。                                               |
| 公共 API 的身份验证是关闭的，所以任何能连到 server 的 Client 都能调用它。      | 在开放端口之前配置一个 authenticator，就像[最小配置](https://docs.superdurable.io/zh-Hans/components/production.md#minimal-configuration)那样。见 [Authentication](https://docs.superdurable.io/zh-Hans/reference/server/authentication.md)（英文）。 |
| Step 重试在 4 小时后停止，然后 Flow 失败。                         | 在 [StepOptions](https://docs.superdurable.io/zh-Hans/concepts/step.md#stepoptions) 中设置重试策略或失败路由。                                                                                                                           |

<a id="sizing"></a>

### 容量规划

作为从 benchmark 得出的起点：2 vCPU 的节点峰值接近每秒 1,800 个 SYNC Step，16 vCPU 的节点接近 8,400 个。从小规模开始，观察 CPU。超出一个节点后，运行多个独立的集群。

<a id="retention"></a>

### 保留期

把 `retention.closedFlowDuration` 设得足够覆盖最长的 Client 重试窗口，因为删除的 run 会释放它的 Flow ID。需要保留更久的数据，用 [Attribute Store sync](https://docs.superdurable.io/zh-Hans/components/your-database.md) 复制到你自己的表里。

<a id="minimal-configuration"></a>

## 最小配置

这份配置在 Amazon S3 上运行一个 Dex Server 节点，并开启身份验证：

```yaml
cluster:
  nodeId: dex-zd
objectStore:
  region: us-east-1
  bucket: BUCKET
  prefix: PREFIX
localStorage:
  directory: /var/lib/dex-server-zd/store
lease:
  duration: 60s
retention:
  closedFlowDuration: 7days
metrics:
  listen: 0.0.0.0:9090
auth:
  authenticators:
    - kind: staticTokens
      file: /etc/dex-server-zd/tokens.yaml
```

把 `BUCKET` 和 `PREFIX` 换成你的 bucket 和 key prefix。token 文件列出 Worker 和 Client 发送的 bearer token 的 SHA-256 哈希；[Authentication](https://docs.superdurable.io/zh-Hans/reference/server/authentication.md)（英文）给出它的格式和 JWT 选项。`cluster.nodeId`、`objectStore.bucket` 和 `localStorage.directory` 是必填项，节点 ID 和分区数在首次启动后就不能再改。60 秒的 lease 适合单节点；有 hot standby 时，保留 10 秒的默认值。[Install and configure server-zd](https://docs.superdurable.io/zh-Hans/reference/server/configuration.md#minimal-production-configuration)（英文）解释每个 key。

通过 SDK 的 `credential` 选项把 token 交给每个 Worker 和 Client；文件凭证会重新读取 token 文件，所以轮换 token 时不用重启。[Send credentials from Workers and Clients](https://docs.superdurable.io/zh-Hans/reference/server/authentication.md#sdk-credentials)（英文）列出每个 SDK 中的这个选项。API 端口提供明文 gRPC：在它前面加 TLS，或者把它留在私有网络里。[TLS](https://docs.superdurable.io/zh-Hans/reference/server/authentication.md#tls)（英文）列出对应的 SDK 选项。

<a id="when-something-goes-wrong"></a>

## 出问题时

- Flow 停住不动或已经失败：[Troubleshoot a Flow run](https://docs.superdurable.io/zh-Hans/reference/web/debugging.md)（英文）。
- 修复之后，从更早的 Step 重新运行来恢复 Flow：[Time Travel](https://docs.superdurable.io/zh-Hans/concepts/change-flow-code.md#time-travel)。
- 生产环境中的 Agent Session：[Agents reference](https://docs.superdurable.io/zh-Hans/reference/agents.md)（英文）。

<a id="next"></a>

## 下一步

- [故障转移和部署](https://docs.superdurable.io/zh-Hans/concepts/failover-and-deploys.md)：Worker 崩溃、Dex Server 节点故障转移或部署新代码时，哪些会重新运行，以及你需要怎么做。
- [Dex Cloud](https://docs.superdurable.io/zh-Hans/components/choose-how-to-run.md#dex-cloud)：Super Durable 替你运行 server。
