Files
Auto_Bangumi/docs/deploy/upgrade-4.0.md
Estrella Pan b129c4437a chore(release): 准备 4.0.0
- 部署文档、升级指南与 README 改为正式版说法:latest = 4.0,3.3 固定为 3.3.7
- docs/changelog/4.0.md 新增 4.0.0 汇总(升级前必读、破坏性变更、新功能、主要修复),链接改为绝对地址
- 文档站与插件市场改为从 main 发布,插件上架 PR 的目标分支改为 main
- 文档站页脚版本 v4.0.0;en/ja README 的 star history 地址
2026-10-24 11:46:50 +02:00

194 lines
10 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 从 3.3 升级到 4.0
4.0 是插件化重构的大版本:下载器改为可以有多个的实例,重命名、硬链接、种子过滤、媒体库刷新改由内置插件提供。第一次启动时,AB 会自动把 3.3 的配置迁移到新位置。本页说明迁移改了什么、如何升级、升级后检查什么,以及如何回滚到 3.3。
## 升级前
1. **确认当前版本是 3.3.x。** 4.0 只支持从 3.3.x 升级。检测到更早版本的数据(`config/version.info` 记录的版本低于 3.3,或残留 2.x 的 `data/data.json`)时,AB 拒绝启动,并提示先升级到最新的 3.3.x 启动一次。被拒绝时 `config.json` 可能已经被改写为 4.0 格式,请先用 `config.json.v3.bak` 覆盖它,再换回 3.3.x。
2. **停止容器,备份 `config` 与 `data` 两个目录。** 回滚到 3.3 时需要这两份备份(见 [回滚到 3.3](#回滚到-3-3))。
```shell
docker stop AutoBangumi
cp -a ${HOME}/AutoBangumi/config ${HOME}/AutoBangumi/config.bak-3.3
cp -a ${HOME}/AutoBangumi/data ${HOME}/AutoBangumi/data.bak-3.3
```
## 更换镜像标签
4.0 的镜像标签:
| 标签 | 含义 |
| --- | --- |
| `4.0.0` | 指定的版本。**推荐**,升级与回滚都可控 |
| `latest` | 最新正式版,现在是 4.0。仍在使用 `latest` 的 3.3 用户,拉取新镜像就会升级到 4.0,请先完成上面的备份 |
| `3.3.7` | 3.3 的最后一个版本。暂时不升级时把标签固定为它 |
镜像同时发布到 `ghcr.io/estrellaxd/auto_bangumi` 与 Docker Hub 的 `estrellaxd/auto_bangumi`。
Docker Compose:修改 `image` 后重新创建容器。
```yaml
services:
AutoBangumi:
image: "ghcr.io/estrellaxd/auto_bangumi:4.0.0"
```
```shell
docker compose pull
docker compose up -d
```
Docker CLI:删除旧容器,用新标签和原来的参数重新运行 `docker run`。
挂载卷(`/app/config`、`/app/data`)、端口与环境变量都没有变化,4.0 没有新增环境变量。插件安装在 `config/plugins/` 下,已经包含在 `/app/config` 卷里。
### 应用内更新
应用内更新不能把 3.3 升级到 4.0:4.0 的更新包要求镜像版本不低于 `4.0.0-beta.1`。3.3.7 起,**设置 → 软件更新** 在稳定版与测试版渠道都只提供 3.x 版本。更早的 3.3.x 会显示 4.0,点击 **立即更新** 会失败,提示镜像版本过低、需要拉取新镜像。请按上一节更换镜像标签。
## 第一次启动:配置迁移
AB 在读取 `config.json` 之前检查它是不是 3.3 格式。是 3.3 格式时,先把原文件备份为 `config.json.v3.bak`,再把下列字段移到 4.0 的位置:
| 3.3 字段 | 4.0 位置 |
| --- | --- |
| `downloader` | `plugins.instances` 中 id 为 `default` 的下载器实例:`type` 变为 `provider`,其它字段(地址、用户名、密码、下载路径、SSL)放入 `options` |
| — | `plugins.slots.downloader` 设为 `"default"`(默认下载器实例) |
| `bangumi_manage.rename_method` | `plugins.slots.rename_strategy`。已废弃的 `normal` 改为语义相同的 `none` |
| `bangumi_manage.revision_conflict_policy` | `plugins.slots.conflict_policy` |
| Bark 渠道的 `token` | `device_key` |
| WeCom 渠道的 `chat_id` | `webhook_url` |
迁移前后的下载器配置示例:
::: code-group
```json [3.3]
{
"downloader": {
"type": "qbittorrent",
"host": "172.17.0.1:8080",
"username": "admin",
"password": "adminadmin",
"path": "/downloads/Bangumi",
"ssl": false
},
"bangumi_manage": {
"rename_method": "pn",
"revision_conflict_policy": "hold"
}
}
```
```json [4.0]
{
"plugins": {
"slots": {
"downloader": "default",
"rename_strategy": "pn",
"conflict_policy": "hold"
},
"instances": [
{
"id": "default",
"point": "downloader",
"provider": "qbittorrent",
"options": {
"host": "172.17.0.1:8080",
"username": "admin",
"password": "adminadmin",
"path": "/downloads/Bangumi",
"ssl": false
}
}
]
}
}
```
:::
示例只列出相关字段;其它设置保持原样。
- **备份不会被覆盖。** 已有 `config.json.v3.bak` 时(例如回滚到 3.3 后再次升级),新的备份另存为 `config.json.v3.bak.1`、`config.json.v3.bak.2` 等。第一份备份里是最早的 3.3 配置。
- **迁移成功**时,日志出现 `Migrated config.json to 4.0 (...); the 3.3 file is kept as config.json.v3.bak`,括号里列出被移动的字段。
- **迁移失败**时,`config.json` 保持 3.3 的内容,AB 拒绝启动,日志写明出错的字段。修正该字段后重新启动即可。
- 已经是 4.0 格式的配置不会再迁移,也不会再生成备份。
- 环境变量(`AB_DOWNLOADER_HOST`、`AB_METHOD` 等)照常生效,仍然只在没有 `config.json` 的首次启动时读取;它们的值写入默认下载器实例与 `plugins.slots`。
数据库在同一次启动中自动升级到 schema v28:新增插件存储表 `plugin_kv`,番剧、电影、RSS 订阅与种子新增 `downloader_id` 列;aria2 的任务映射表按下载器实例重建;从搜索结果建立的订阅,关键词中的集号被去掉(每条改动记入日志)。已有种子归属 `default` 实例;已有规则与订阅的 `downloader_id` 为空,表示跟随默认实例。
## 4.0 中改变的行为
### 多个下载器
**设置 → 下载设置** 可以添加多个下载器实例(qBittorrent、aria2 或插件提供的下载器)并指定默认实例。规则与 RSS 订阅可以选择下载器,留空时用默认实例。每个种子记录它所在的下载器,重命名与删除都在该下载器上进行。详见 [下载器设置](../config/downloader)。
### 重命名改为插件
`pn`、`advance` 与新增的 `template` 由默认启用的内置插件「重命名」(`rename`)提供,`none` 由 AB 本身提供。`pn` 与 `advance` 的输出与 3.3 逐字一致。
- `template` 用自定义模板生成文件名。保存设置时 AB 试渲染模板,不合法的模板直接拒绝保存。
- 运行时某个文件的模板渲染失败,该文件保留原名,并发送「文件未重命名」通知;不会退回 `pn`。
- 在 **设置 → 插件** 中停用「重命名」插件后,所有番剧按 `none` 处理,保留原文件名。
详见 [番剧管理设置](../config/manager)。
### 硬链接到媒体库
新增内置插件「硬链接到媒体库」(`hardlink`),**默认停用**。启用后,种子整理完成时把正片与字幕链接到媒体库目录,下载目录保持原样继续做种。
- 下载器与 AB 看到的路径不同时(例如分别运行在不同容器中),按下载器实例在 `path_map` 中配置路径映射。
- 无法创建硬链接(跨文件系统)时,默认复制文件(`cross_device: copy`)。
- 在 Docker 中,媒体库目录也要挂载进 AB 容器。要使用硬链接,请把下载目录与媒体库放在同一块盘上,并以同一个挂载点映射进容器。
详见 [番剧管理设置](../config/manager)。
### 其它内置插件
- 「种子过滤」(`ingest-filters`)默认启用。「包含过滤」留空时不过滤任何种子。
- 「媒体库刷新」(`media-server-refresh`)默认启用。填写 Jellyfin / Emby / Plex 的地址与 API Key 后才会请求刷新媒体库。
### 第三方插件
本地目录(`config/plugins/local/`)与 pip 安装的插件没有签名,需要在 **设置 → 插件** 中开启「允许未签名插件」(`plugins.allow_unsigned`)才会加载。插件开发见 [插件开发](../dev/plugins)。
### 移除的功能
- 3.2 兼容的 GET 控制端点(`/api/v1/restart`、`/start`、`/stop`、`/shutdown`)和 `GET /api/v1/auth/refresh_token`。请改用 POST。调用这些端点的脚本需要修改。
- 旧版 `experimental_openai` 配置节与通知的单渠道旧字段。3.3 已把它们迁移到 `llm` 与 `notification.providers`。
## 升级后检查
- [ ] 日志中有 `Migrated config.json to 4.0` 一行,`config` 目录中有 `config.json.v3.bak`。
- [ ] **设置 → 下载设置** 中有 id 为 `default` 的实例,地址、用户名与下载路径与 3.3 相同,并且能连接。
- [ ] 重命名方式与 3.3 相同。3.3 中的 `normal` 现在显示为 `none`,行为相同:不重命名文件。
- [ ] **设置 → 插件** 中「重命名」插件处于启用状态。
- [ ] 使用 Bark 或 WeCom 通知时,发送一条测试通知。
- [ ] 需要硬链接或媒体库刷新时,在 **设置 → 插件** 中启用并配置它们。
- [ ] 使用 3.2 的 GET 控制端点的脚本已改为 POST。
## 回滚到 3.3
4.x 把运行版本写入 `config/version_v4.info`,不改动 `config/version.info`,所以 3.3 启动时不会误判数据版本。4.x 每次启动时,如果数据库还是 3.3 的结构,AB 先把它备份为 `data/data.db.v3.bak`(替换旧的备份)。
**有升级前的完整备份时**(推荐):
1. 停止容器。
2. 用 `config.bak-3.3` 与 `data.bak-3.3` 替换 `config` 与 `data` 目录。
3. 把镜像标签改回 3.3(例如 `3.3.6`),重新创建容器。
升级后在 4.0 中做的修改(新番剧、新订阅、新设置)全部丢失。
**没有完整备份时:**
1. 停止容器。
2. 用编号最大的 `config/config.json.v3.bak.N` 覆盖 `config/config.json`(只有一份时就是 `config.json.v3.bak`)。3.3 不认识 `plugins.instances`,不还原时下载器设置会变成默认值。
3. 删除 `data/data.db-wal` 与 `data/data.db-shm`(如果存在),再用 `data/data.db.v3.bak` 覆盖 `data/data.db`。3.3 不认识 4.0 改动过的数据表,不能继续使用 4.0 的数据库。不删除这两个文件时,SQLite 会把其中 4.0 的改动重新写回还原的数据库。
4. 如果在 4.0 中使用过应用内更新,删除 `config/updates/` 目录。否则 3.3 镜像启动时会加载其中更新的 4.0 代码。
5. 把镜像标签改回 3.3(例如 `3.3.6`),重新创建容器。
这种方式回到升级 4.0 时的状态:在 4.0 中新增的番剧、种子记录与修改的设置全部丢失。
以后再次升级到 4.0 时,迁移会重新运行:配置的新备份另存为 `config.json.v3.bak.1` 等,数据库备份 `data.db.v3.bak` 被替换为回滚后的 3.3 数据库。