---
title: 升级指南
icon: arrow-up-right-dots
---

## 通用指南

**在开始升级流程之前务必备份数据库**，运行：

```bash
docker exec -it {db_container_name_or_id} pg_dumpall -U {postgres_user} > databases_backup.sql
```

从备份恢复：

```bash
cat databases_backup.sql | docker exec -i {db_container_name_or_id} psql -U {postgres_user}
```

如果您使用 Docker Compose，请按照以下步骤操作：

1. 停止 Twenty：`docker compose down`
2. 在与 `docker-compose.yml` 同目录的 `.env` 文件中更改 `TAG` 值
3. 启动 Twenty：`docker compose up -d`

服务器在启动时会自动运行所有所需的升级迁移。 无需手动执行任何命令。

## 跨版本升级（v1.22+）

自 **v1.22** 起，Twenty 支持跨版本升级。 您可以从任意受支持的版本直接跳到最新版本，而无需逐一经过每个中间版本。

例如，从 v1.22 直接升级到 v2.0 完全受支持。

## 升级到 v2.5+ — 静态数据加密信封

从 **v2.5** 开始，Twenty 会将静态存储的机密（OAuth 令牌、应用程序变量、签名密钥的私钥、敏感配置值、TOTP 机密）存储在带版本的 `enc:v2:` 加密信封中，并使用 `ENCRYPTION_KEY`（如果未设置 `ENCRYPTION_KEY`，则使用 `APP_SECRET`）进行加密。

在 v2.5 的首次启动时会运行较慢的升级命令，将现有行**回填**到新的加密信封中。 这些命令是幂等的——中断并重新启动服务器后会从上次停止的位置恢复——但在大型数据库上可能需要一段时间才能完成。 你可以使用 `upgrade:status` 来监控进度。

你应该在 v2.5 升级**之前**设置专用的 `ENCRYPTION_KEY`，这样回填从一开始就会在该密钥下写入行。 在回填完成后再更换密钥，则需要进行一次[轮换](/l/zh/developers/self-host/capabilities/key-rotation)。

## 轮换机密和签名密钥

对于日常运维任务，例如轮换 `ENCRYPTION_KEY`、轮换 JWT 签名密钥或吊销泄露的签名密钥，请参阅专门的[密钥轮换指南](/l/zh/developers/self-host/capabilities/key-rotation)。

## 检查升级状态

`upgrade:status` 命令可用于查看您的实例和工作区迁移的当前状态。 这在调试升级问题或提交支持请求时非常有用。

在服务器容器中运行：

```bash
docker exec -it {server_container_name_or_id} yarn command:prod upgrade:status
```

示例输出:

```sh
APP_VERSION: v1.23.0

Instance
    Inferred version: 1.23.0
    Latest command:   1.23.0_DropWorkspaceVersionColumnFastInstanceCommand_1785000000000
    Status:           Up to date
    Executed by:      v1.23.0
    At:               2026-04-16T11:43:58.823Z

Workspace
  Apple (20202020-1c25-4d02-bf25-6aeccf7ea419)
      Inferred version: 1.23.0
      Latest command:   1.23.0_UpdateGlobalObjectContextCommandMenuItemsCommand_1780000005000
      Status:           Up to date
      Executed by:      v1.23.0
      At:               2026-04-16T11:44:09.361Z

Summary
    Instance: Up to date
    Workspaces: 1 up to date, 0 behind, 0 failed (1 total)
```

### 选项

| 标志                        | 描述                      |
| ------------------------- | ----------------------- |
| `-w, --workspace-id <id>` | 筛选特定工作区。 可多次传递。         |
| `-f, --failed-only`       | 隐藏已是最新的工作区，仅显示落后和失败的条目。 |

## 故障排除

如果某些工作区的升级失败，服务器将不会越过失败的步骤继续进行。 重启服务器（`docker compose up -d`）将从中断处重试升级。

要快速定位问题，运行：

```bash
docker exec -it {server_container_name_or_id} yarn command:prod upgrade:status --failed-only
```

这将仅显示落后或失败的工作区，并附上每个失败的错误信息。

## v1.22 之前

如果您的实例早于 v1.22，您必须按顺序逐步升级经过每个主要标记版本（从 v1.6 到 v1.7，再从 v1.7 到 v1.8，依此类推），直到达到 v1.22。 届时，您可以直接跳到最新版本。
