备份与迁移
完整备份
设置 → 完整备份,输入当前操作管理员的密码及至少 12 字符的独立备份密码,下载加密 JSON。请将备份密码单独保管;丢失后无法恢复。
备份包括所有用户的用户名、角色、启用状态、密码哈希及数据归属,以及订阅规则与名称、聚合订阅及其成员和密钥、Cookie、RSS 密钥、历史和管理员视图偏好;不包括登录会话、访问令牌、截图、日志和未完成任务。文件使用 scrypt 派生密钥与 AES-256-GCM 加密。翻译片段缓存只导出最近使用的 20000 条,缓存可以重新生成,不影响已有译文。
完整备份格式现为 version 3,包含多个管理员及所有用户的个人 Bark 设置,支持恢复 version 1、2 备份;旧备份里的全部订阅和凭据归备份中的管理员。新版备份不能由旧版程序恢复。加入聚合订阅前的 version 3 备份仍可恢复(视为没有聚合订阅);包含聚合订阅的备份需要支持聚合订阅的版本才能恢复。恢复后全部用户需要重新登录,停用账号仍保持停用。普通用户保存在浏览器中的视图偏好不随备份迁移。
多用户数据库升级
启动时事务迁移 SQLite 至最新版本(当前为 user_version=23),保留原管理员用户名和密码,原订阅、Cookie 与批量任务全部归原管理员;RSS 密钥和历史不变。从单用户版本升级时旧登录会话被撤销。v0.5.1 移除单管理员约束,原全局 Bark 迁移给原管理员,保留账号与 RSS 地址。升级前按维护指南停机备份完整数据卷;如需退回旧版,应同时恢复升级前的数据卷,不要让旧程序直接读取新版数据库。
翻译统计使用的 translations(feed_id,status) 索引会在启动时自动补建,已有实例无需手工执行 SQL。索引不修改订阅、条目或译文,也不改变数据库版本号和备份格式。
翻译服务升级(迁移 13)
v0.7 起数据库迁移 13 为订阅增加目标语言 target_language(默认 zh-CN)和翻译服务 translation_provider(默认空,跟随全局默认),并把输出模式 chinese 改名为 translated(仅译文)。已有订阅的 RSS 输出、条目 ID 和译文缓存保持不变。旧版完整备份和轻量配置中的 chinese 仍可导入;新版备份不能由旧版程序恢复。
完整恢复
已有实例:设置 → 完整恢复,选择文件、输入当前操作管理员的密码与备份密码,预览数量、版本、账号及服务器与网络设置的差异,确认覆盖。
新实例:初始化页 → 从备份恢复,使用目标主机一次性设置码和备份密码。完成后使用备份中的管理员账号密码登录。
恢复时暂停新请求、等待后台操作完成并关闭编辑会话;在数据库事务中整体替换应用数据。错误密码、格式错误和事务失败保留原数据。恢复成功使旧会话和全部访问令牌失效,需要的令牌请在恢复后重新创建。备份使用目标服务器的密钥重新加密,不需要复制旧 master.key。
服务器与网络设置默认保留本机
完整备份里有一份“设置 → 服务器与网络”,但这些设置描述的是备份所在的那台机器,搬到另一台机器往往不适用。例如把正式服务器(反向代理后的 https://feeds.example.com、端口 8080、强制安全 Cookie)的备份恢复到本机测试实例 http://127.0.0.1:4400:如果连这些设置一起恢复,公开访问地址立即变成正式域名,页面马上提示“请求来源不被允许”;重启后还会换成 8080 端口,测试实例就再也打不开了。
因此恢复时默认保留当前实例的服务器与网络设置,恢复后仍可从原地址访问。保留的是整组设置:
| 设置 | 默认 | 说明 |
|---|---|---|
| 公开访问地址、监听地址、监听端口 | 保留本机 | 决定从哪个地址访问、监听哪个端口,换机器后几乎总是不同 |
| 强制安全会话 Cookie、可信反向代理 | 保留本机 | 取决于本机前面有没有 HTTPS 反向代理、代理的 IP 是多少 |
网络访问白名单(allowedHosts) | 保留本机 | 允许访问的内网 host:port 只对原机器所在的网络有意义;随备份带过来会在新机器上意外放开内网地址 |
| DNS over HTTPS | 保留本机 | 是否需要取决于本机的 DNS 环境(例如代理软件的 Fake-IP),与订阅数据无关 |
| 后台并发数、登录会话有效期 | 保留本机 | 与机器性能和本机安全要求相关 |
订阅、用户、凭据、通知渠道、翻译服务、日志保留天数等其他设置照常从备份恢复。
恢复预览会列出本机与备份不同的服务器与网络设置(左边是本机、右边是备份)。确实要沿用备份里的设置时(例如把备份恢复回原来的服务器,或新服务器沿用原域名和端口),勾选“同时恢复备份中的服务器与网络设置”。勾选前请确认:公开访问地址、可信代理和安全 Cookie 会立即生效,与当前访问方式不一致时页面会提示“请求来源不被允许”;监听地址和端口重启后生效。该选项默认不勾选,接口对应 POST /api/backups/restore 的 restoreServerSettings(默认 false)。
恢复不复制文件路径和 .env,也不会自动扩大本机的私网白名单;确需同等网络权限时,审核差异后在本机的“设置 → 服务器与网络”中修改,或勾选上述选项。旧版备份中没有应用设置时,始终保留本机设置。
更换服务器
- 旧实例导出完整备份,记下版本及外部域名。
- 新服务器部署相同或兼容版本,初始化页恢复。
- 配置 Nginx 和相同
PUBLIC_ORIGIN(或在恢复时勾选“同时恢复备份中的服务器与网络设置”沿用原地址),检查登录、Cookie 抓取和历史。 - 切换原域名 DNS,保留订阅 ID 和密钥后阅读器地址无需更改。
- 如使用新域名,批量复制新 RSS 地址并更新阅读器;仅保留 ID 和密钥不能保留旧域名前缀。
切换前可暂停旧实例订阅,验证新实例后再停旧服务,避免两个实例持续抓取。
轻量配置
轻量配置导入导出仅管理员可操作,订阅和个人通知部分只涉及操作管理员自己的数据,不导出其他用户的密钥。配置导出含订阅名称、规则、加载参数、刷新间隔、输出模式、目标语言、翻译服务、条目过滤、输出条数及启停状态,以及聚合订阅的名称、条数上限和成员(以订阅在文件中的序号表示),不含凭据、RSS 密钥、聚合密钥、管理员或历史。应用设置中的 DeepL 与 OpenAI 兼容接口 API Key 不导出,导入时保留本机已保存的 Key;完整加密备份包含它们。网址本身仍可能包含私人信息。
配置导入先预览再确认,追加新项目,按规范化网址与字段规则跳过完全重复项,不覆盖现有订阅。聚合订阅按名称跳过同名项,成员指向新导入的订阅或已存在的相同订阅;没有 bundles 字段的旧配置文件照常导入。新项目生成新密钥;需要 Cookie 的项目暂停,需编辑绑定凭据后恢复。网络配置只导出不含密钥的部分(名称、代理地址、User-Agent、Referer),导入时按相同设置复用或新建;带代理密码或额外请求头的网络配置不导出,对应订阅导入后暂停,需在订阅设置中重新选择网络配置后恢复。完整备份包含全部网络配置及其密钥(在加密包内)。
网页完整恢复请求上限 100 MB(加密包内数据约 67 MB),轻量导入上限 10 MB;界面为传输开销预留余量。一个有 170 多个订阅、近 5000 篇翻译文章的实例,备份快照约 34 MB,距离上限还有一倍余量;快照主要由文章和译文构成。导出失败时界面会显示出错的表和字段,例如校验没通过的是 tables.settings,请据此检查对应数据。超过上限时使用停机数据卷备份,保留数据库和 master.key,见维护指南。
抓取日志、故障去重状态和通知待发送队列属于本机运行历史,不包含在配置导出或网页加密备份中。恢复备份会清空这些记录,避免重放旧告警;后续实际抓取重新生成日志。应用及服务器设置、每个用户的通知渠道(Bark、Webhook、ntfy、Telegram 及其密钥)随完整备份一起迁移;轻量配置仅包含操作管理员本人的通知设置(settings.bark 和可选的 notificationChannels);完整备份跨服务器恢复时会重新加密这些密钥。普通配置含通知密钥明文,请私密保存。新增渠道是备份格式中的可选字段,完整备份仍为 version 3、轻量配置仍为 version 2,旧文件可直接恢复或导入。
新版配置(version 2)导入前预览将覆盖的应用、服务器和通知设置(通知密钥只显示是否已配置),确认后与订阅一起保存;不含 notificationChannels 的配置保留当前的 Webhook、ntfy 和 Telegram 设置;旧版配置(version 1)没有应用设置时保留当前设置。不含应用设置的旧备份恢复时使用默认通知设置并保留目标服务器设置;含全局 Bark 的旧备份将其迁移给原管理员。监听地址与端口恢复后重启生效。