> For AI agents: the complete documentation index is available at /zh/llms.txt, the full documentation bundle is available at /zh/llms-full.txt.

# 破坏性变更

## v1.8.0

**破坏性变更**

- **已移除 Docker Swarm 支持**，请使用 Kubernetes 以获得更好的安全性和可扩展性。

- **`ChallengeNetwork` 现在被视为网络前缀。** GZCTF 会自动创建 `<ChallengeNetwork>-open` 和 `<ChallengeNetwork>-isolated` 网络（默认前缀为 `gzctf`）。对于 `custom` 网络模式，请自行创建 `<ChallengeNetwork>-custom` 网络。更多细节参见 [appsettings](/zh/config/appsettings.md)。

- **`ForwardedOptions` 新增 `KnownIPNetworks` / `KnownProxies` 配置项。** 旧的 `KnownNetworks`、`TrustedNetworks` 和 `TrustedProxies` 键仍保留用于向后兼容。

- **自动管理的 NetworkPolicy。** GZCTF 现在会在题目命名空间中创建并维护 `gzctf-network-open` 和 `gzctf-network-isolated` NetworkPolicy，分别用于 open 和 isolated 网络模式的访问控制。请勿手动修改或删除它们。

## v1.7.0

**存储系统重构 - 参数名变更 (⚠️ 需要更新配置)**

### 存储连接字符串变更

| 存储类型       | 旧格式                 | 新格式                           | 状态      |
| ---------- | ------------------- | ----------------------------- | ------- |
| 本地磁盘       | `disk://path=...`   | `disk://path=...`             | ✅ 无变化   |
| AWS S3     | `keyId=...;key=...` | `accessKey=...;secretKey=...` | ❌ 参数名变更 |
| MinIO S3   | `keyId=...;key=...` | `accessKey=...;secretKey=...` | ❌ 参数名变更 |
| Azure Blob | `azure.blobs://...` | ❌ 不再支持                        | ❌ 已移除   |

### ⚠️ 必须更新

**AWS S3 / MinIO 用户：**

更新 `ConnectionStrings:Storage`：

```
# 旧格式
aws.s3://keyId=AKIA...;key=secret...;bucket=my-bucket;region=us-east-1
# 新格式
aws.s3://accessKey=AKIA...;secretKey=secret...;bucket=my-bucket;region=us-east-1

# 旧格式
minio.s3://keyId=admin;key=admin;bucket=gzctf;serviceUrl=http://minio:9000
# 新格式
s3://accessKey=admin;secretKey=admin;bucket=gzctf;endpoint=http://minio:9000;forcePathStyle=true
```

**Azure Blob 用户：**

Azure Blob 存储不再受支持，请迁移到 AWS S3 或 MinIO：

1. 选择替代存储
2. 迁移文件数据
3. 更新 GZCTF 配置
4. 重启 GZCTF

### S3 参数

- `accessKey`（必需\*）：AWS Access Key ID
- `secretKey`（必需\*）：AWS Secret Access Key
- `bucket`（必需）：存储桶名称
- `region`（必需\*\*）：AWS 区域
- `endpoint`（可选）：MinIO 的自定义 URL
- `useHttp`（可选）：使用 HTTP（默认：false）
- `forcePathStyle`（可选）：使用路径样式 URL（默认：false）。使用自定义 `endpoint` 时必须为 `true`，否则会走虚拟托管风格（`<bucket>.<endpoint-host>`）导致失败。
- `sessionToken`（可选）：临时凭据

\* 如果省略，则使用 AWS 默认凭据链
\*\* 必须指定 `region` 或 `endpoint` 其中之一

⚠️ **数据库自动升级，不支持降级。**

## v1.2.2

**破坏性变更**

- 移除 `Google ReCaptcha` 验证码配置项

  更新步骤：删除 `Google ReCaptcha` 验证码配置项，选用其他验证方式，如 `Cloudflare Turnstile` 验证码。

## v0.24

**破坏性变更**

- **配置项 `SendMailAddress` 已更名为 `SenderAddress`**

  更新步骤：将 `SendMailAddress` 配置项更改为 `SenderAddress`

## v0.18

- **新增**：初步支持了 i18n 多语言支持，目前支持中文、日文、英文

**破坏性变更**

- **数据库结构不再与之前兼容，需要重新初始化数据库，如需保持数据请使用 `v0.17` 版本**

  更新步骤：删除原有数据库，重新初始化数据库

- **容器默认暴露端口从 `80` 变为 `8080`**

  更新步骤：修改容器暴露端口为 `8080`

  参考资料：[Default ASP.NET Core port changed from 80 to 8080](https://learn.microsoft.com/en-us/dotnet/core/compatibility/containers/8.0/aspnet-port)

## v0.17

**破坏性变更**

- **将原有 `uploads` 目录移动至 `files/uploads`，移除了此目录的配置项，更改了日志存储位置**

  更新步骤：将原有 `uploads` 目录移动至 `files/uploads`，并重新挂载相关目录，删除 `uploads` 目录的配置项和原有 `log` 目录

## v0.16-v0.1

见 Release 记录：[https://github.com/GZTimeWalker/GZCTF/releases](https://github.com/GZTimeWalker/GZCTF/releases)
