把有声书存放在兼容 S3 的存储中
更新于 2026 年 10 月 27 日
Berth 可以把书存放在任意兼容 S3 的存储桶中,而不是服务器磁盘上。服务器保存书库并决定谁可以收听;音频本身可以从存储桶或 CDN 直接传到手机。
为什么用对象存储
- 小型 VPS 或树莓派不需要大容量磁盘。
- 手机直接从存储下载,服务器带宽不会成为瓶颈。
- 数据库及其备份保持小巧;使用 S3 时,服务器还可以每天把一份数据库副本放进存储桶。
支持的服务商
任何兼容 S3 的服务都可以使用。后台为以下服务提供预设,可自动填写端点和区域:AWS S3、Cloudflare R2、Yandex Cloud、Backblaze B2、Bunny Storage 和 MinIO。Cloudflare R2 还有一个向导,可以替你创建存储桶和密钥。
连接存储桶
- 在服务商的控制台中创建一个存储桶,以及一个对其有读写权限的访问密钥。
- 为存储桶添加 CORS 规则:来源为你的 Berth 地址,方法为 GET、HEAD、PUT,请求头为
*。后台会从浏览器把文件直接上传到存储桶,因此这条规则是必需的。 - 在 Berth 后台打开存储设置,添加存储,选择“S3 存储桶”,然后选一个预设或自行填写各字段。
- 填写名称、存储桶、端点(AWS 留空)、区域(留空则为
us-east-1)、访问密钥 ID 和私有访问密钥。MinIO 需开启路径样式地址;使用 IP 地址或 localhost 时会自动开启。 - 点击“检查连接”:Berth 会写入、读回并删除一个小测试文件,并从你的服务器地址检查 CORS。
- 将该存储设为默认存储:新书会进入默认存储。
密钥使用服务器密钥 secret.key 加密保存,之后不会再显示。
音频如何到达手机
不签名时,CDN 后面的文件通过永不过期的链接打开。文件名是 SHA-256 哈希,无法猜到,但撤销设备并不会让它已经拿到的链接失效。Bunny CDN 令牌认证可以让链接在 6 小时后过期。
| 模式 | 工作方式 | 适用场景 |
|---|---|---|
| 直链(默认) | 手机获得指向存储桶的签名链接,有效期 15 分钟 | 减轻服务器负载 |
| 通过服务器 | 由服务器串流文件;链接有效期 6 小时,设备被撤销后立即失效 | 手机无法访问存储桶 |
| 通过 CDN | 链接指向 CDN 或存储桶的公开地址 | 存储桶配有 CDN 时最快 |
须知
- 可以同时使用多个存储;每本书都会显示它位于哪个存储中。
- 暂不支持在存储之间移动已有的书:请在上传前选好默认存储。
- 存有书籍的存储无法删除。删除配置永远不会删除存储桶中的文件。
常见问题
Berth 需要存储桶公开访问吗?
不需要。在默认模式下,存储桶保持私有,手机获得 15 分钟后过期的签名链接。
检查提示存储桶不接受来自浏览器的上传,怎么办?
添加 CORS 规则:来源为 Berth 地址,方法为 GET、HEAD、PUT,请求头为 *。然后重新检查。