mirror of
https://github.com/EstrellaXD/Auto_Bangumi.git
synced 2026-11-01 05:06:58 +08:00
- 部署文档、升级指南与 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 地址
194 lines
10 KiB
Markdown
194 lines
10 KiB
Markdown
# 从 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 数据库。
|