> For the complete documentation index, see [llms.txt](https://summerain-1.gitbook.io/summerain/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://summerain-1.gitbook.io/summerain/zh-cn/fa-bu-shuo-ming/v2.1.0.md).

# V2.1.0

> 正式版。从 `main` 发布；本版本更新稳定别名（`latest`、`main`、`2.1`、`2` 与精确标签）及 Docker Hub 描述。V2 仍处于早期大版本阶段。

## 概述

v2.1.0 是 v2.0.0 之后的首个正式版，将完整的开发序列 v2.0.1–v2.0.15 整合为一个受支持版本：资源感知的上传管线、服务端图片配方、已本地化的 Web 应用与有文档的 Docker 部署。不包含仅开发期的行为；所有变更此前均已在 `dev` 通道发布并验证。

## 亮点

### 上传管线与图片策略

* 浏览器处理预检与断点续传上传恢复，含可恢复会话与客户端轮询截止时间。
* 固定图片策略（变体、像素与体积上限、可接受的源格式）位于服务端配方文件，并提供用于生产初始化的 schema SQL 快照。
* 配方端点返回客户端提示，前端遵循服务器上传策略并带边界兜底。
* 其余 V1 兼容限制均可配置，启动性能配置均有界。

### Web 应用

* 有界的客户端崩溃上报端点将渲染崩溃、未捕获错误与未处理拒绝记录到服务器日志，不落库。
* 服务端错误消息为英文，前端将错误码映射为三语界面文本。

### 文档与本地化

* 英文优先的三语文档，加固的 GitBook 校验器，第三方署名与公开的第三方软件页面。
* 审计跟进：回滚集成测试纳入 CI；开发 imgproxy 可读取宿主数据；V1 动态有界拒绝已写入文档。

### 部署与运维

* 快速失败的数据库引导（advisory lock 与不可变校验和迁移）；受监督的 worker 关闭；明确的配置边界。
* 生产部署使用精简目录布局（Compose 文件、`.env` 与 `config/image-recipe.json`），配方以只读方式覆盖镜像内置配方。

## 验证

发布时：后端标准套件与定向 MySQL 集成测试通过；前端 lint、build 与 22 个测试文件 164 项测试通过；requirements lock 校验通过；GitBook 文档校验三语各 39 页通过。本地压测验证记录了在文档化并发边界下的稳定行为，以及动态转换饱和时的有界拒绝。

## 安装

稳定镜像使用精确版本拉取：

```bash
docker pull jaykserks/summerain:2.1.0
```

等效精确标签：

```
jaykserks/summerain:v2.1.0
```

稳定别名（`latest`、`main`、`2.1`、`2`）、commit 标签与 OCI 多平台索引同样可用。生产请固定精确标签或 OCI 索引摘要。

## 升级说明

* 从 v2.0.0（上一正式版）升级：启动时自动应用增量迁移；请先备份 MySQL 与图片卷。
* 将 `.env` 与 `backend/.env.example` 对比；开发序列新增了配置变量与配方文件。
* 部署 Compose 会以只读方式挂载 `config/image-recipe.json`，缺失时拒绝启动；请在 Compose 文件旁创建它。
* 开发通道仍为 `dev`；正式版仅从 `main` 发布。

## 已知限制

* V2 仍处于早期大版本阶段，后续小版本仍可能调整行为。
* 不支持动图与 GIF；V2 仅持久化固定变体。
* 现有 V1 图片不会自动转换，历史 R2 迁移委托给独立工具。
* CI 仅运行定向 MySQL 集成子集；全量集成套件需要按文档配置 DSN 变量。

## 相关工作

各项变更详见开发发布说明 v2.0.1–v2.0.15，它们仍是本正式版的详细记录。


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://summerain-1.gitbook.io/summerain/zh-cn/fa-bu-shuo-ming/v2.1.0.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
