Аудиокниги в S3-совместимом хранилище
Обновлено 27 октября 2026 г.
Berth может хранить книги в любом S3-совместимом бакете вместо диска сервера. Сервер держит библиотеку и решает, кому можно слушать, а само аудио может идти из бакета или CDN прямо на телефоны.
Зачем объектное хранилище
- Маленькому VPS или Raspberry Pi не нужен большой диск.
- Телефоны скачивают прямо из хранилища, так что канал сервера не становится узким местом.
- База данных и её бэкапы остаются небольшими; с S3 сервер может ещё и ежедневно класть копию базы в бакет.
Поддерживаемые провайдеры
Подходит любой S3-совместимый сервис. В админке есть пресеты, которые заполняют endpoint и регион для AWS S3, Cloudflare R2, Yandex Cloud, Backblaze B2, Bunny Storage и MinIO. Для Cloudflare R2 есть ещё и мастер, который сам создаёт бакет и ключи.
Подключение бакета
- Создайте в консоли провайдера бакет и ключ доступа с правами на чтение и запись в него.
- Добавьте бакету правило CORS: origin — ваш адрес Berth, методы GET, HEAD, PUT, заголовки
*. Админка загружает файлы из браузера прямо в бакет, поэтому это правило обязательно. - В админке Berth откройте настройки хранилищ, добавьте хранилище, выберите «S3-бакет» и возьмите пресет или заполните поля сами.
- Укажите название, бакет, endpoint (пусто для AWS), регион (
us-east-1, если пусто), ID ключа доступа и секретный ключ. Для MinIO включите адреса в стиле path; для IP-адреса или localhost они включаются сами. - Нажмите «Проверить»: Berth запишет, прочитает и удалит небольшой тестовый файл и проверит CORS с адресов вашего сервера.
- Сделайте хранилище хранилищем по умолчанию: новые книги попадают в хранилище по умолчанию.
Ключи хранятся зашифрованными серверным ключом secret.key и больше никогда не показываются.
Как аудио попадает на телефоны
Без подписи файлы за CDN открываются по ссылке, которая никогда не истекает. Их имена — хеши SHA-256, угадать их нельзя, но отзыв устройства не закрывает ссылки, которые у него уже есть. С токен-аутентификацией Bunny CDN ссылки истекают через 6 часов.
| Режим | Как работает | Когда использовать |
|---|---|---|
| Прямые ссылки (по умолчанию) | Телефоны получают подписанную ссылку на бакет, которая действует 15 минут | Снимает нагрузку с сервера |
| Через сервер | Сервер стримит файл; ссылки действуют 6 часов и сразу перестают работать, когда устройство отозвано | Телефоны не могут достучаться до бакета |
| Через CDN | Ссылки ведут на CDN или публичный адрес бакета | Быстрее всего, когда у бакета есть CDN |
Полезно знать
- Можно держать несколько хранилищ сразу; у каждой книги видно, в каком она лежит.
- Перенос уже загруженных книг между хранилищами пока недоступен: выберите хранилище по умолчанию до загрузки.
- Хранилище, в котором есть книги, удалить нельзя. Удаление профиля никогда не удаляет файлы в бакете.
Вопросы
Нужен ли Berth публичный доступ к бакету?
Нет. В режиме по умолчанию бакет остаётся закрытым, а телефоны получают подписанные ссылки, которые истекают через 15 минут.
Проверка пишет, что бакет не принимает загрузки из браузера. Что делать?
Добавьте правило CORS: origin — адрес Berth, методы GET, HEAD, PUT, заголовки *. Затем запустите проверку ещё раз.