tapeshelf на своём сервере

tapeshelf — открытый проект под лицензией AGPL-3.0. Приложение, на котором работает tapeshelf.com, вы сможете запустить и на своём сервере. Публичного репозитория и инструкции по установке пока нет. Здесь расскажем, как будет устроен свой экземпляр, чтобы вы могли решить, нужен ли он вам, и присмотреть сервер.
Один стек
Экземпляр tapeshelf — это один стек Docker Compose:
браузер ──HTTPS──► Caddy ─── веб-приложение, заголовки безопасности
└── /api, /ws ──► api ──► Postgres, Redis
worker (ffmpeg) ──► Postgres, Redis
браузер ──► S3-совместимое хранилище: загрузка, сегменты видео, картинки
- Caddy отдаёт веб-приложение и передаёт дальше запросы к API и WebSocket. Сертификат Let’s Encrypt он получает и продлевает сам. Если у вас уже есть свой обратный прокси, Caddy встанет за ним без TLS.
- api делает всё, что делает приложение: аккаунты, полки, проверка прав, запросы и обмены, временные ссылки, выдача ключей к видео.
- worker — тот же код, запущенный вторым процессом, в образе с ffmpeg. Он убирает из загрузок метаданные и перекодирует их, шифрует потоковые копии, делает кадры и превью, собирает смонтированные видео, отправляет письма и уведомления.
- Postgres хранит данные, Redis — очереди задач и короткие кэши.
- Одноразовый контейнер migrate запускается при каждом старте. Он применяет миграции базы, создаёт аккаунт администратора из ваших настроек и настраивает бакеты: публичное чтение картинок без списка файлов, правило очистки брошенных загрузок и CORS для вашего домена.
- Сервис backup раз в сутки кладёт дамп базы в ваш бакет и хранит 14 последних.
Видео через API не идёт. Браузеры загружают файлы прямо в хранилище и прямо из него получают сегменты, поэтому у хранилища должен быть свой адрес, доступный браузеру. Это единственное место, где придётся подумать. Можно подключить S3-совместимый сервис, которым вы уже пользуетесь, или поднять хранилище в том же стеке.
Что понадобится
- Сервер на Linux с Docker и плагином Compose. Разумный минимум — два ядра и 4 ГБ памяти.
- Место на диске для временных файлов воркера: примерно в два с половиной раза больше самого большого видео на каждую параллельную обработку.
- Домен, который указывает на сервер, и открытые порты 80 и 443.
- SMTP-аккаунт для писем: подтверждения, сброс пароля, уведомления.
- По желанию — свой OAuth-клиент Google для входа через Google и ключи Cloudflare Turnstile для капчи при повторной регистрации и у новых гостей.
Тяжелее всего перекодирование. Видео в H.264 до 1080p, если оно проходит ещё несколько проверок, достаточно переупаковать, это секунды. Полное перекодирование на небольшом двухъядерном сервере идёт примерно столько же, сколько длится само видео, иногда дольше. Загрузивший видит прогресс в реальном времени и может пока пользоваться сайтом.
Секрет, который нельзя потерять
Все настройки живут в одном файле окружения: пароль базы, секреты сессий, доступ к хранилищу, SMTP и мастер-ключ, из которого вычисляется ключ шифрования каждого видео. Схема описана в записи «Как tapeshelf шифрует видео». В боевом режиме API не запустится с учебными значениями из файла-примера.
Сохраните мастер-ключ в менеджер паролей сразу, как только его сгенерируете. Если он потеряется, ни одно загруженное видео больше не воспроизведётся, и восстановление базы не поможет. Перестанут подходить и коды из приложений-аутентификаторов для двухэтапного входа: их секреты зашифрованы тем же ключом.
Чем это отличается от tapeshelf.com
На своём сервере нет тарифов и оплаты. Нет Free и Pro, вкладки «Тариф», предложений перейти на Pro и страницы ожидания перед скачиванием. Подробнее:
- Лимитов нет, пока вы их не поставите. По умолчанию размер видео и полки не ограничен. Как администратор вы можете задать один лимит на видео и один на полку, общий для всех.
- Скачивание начинается сразу, на полной скорости, прямо из хранилища.
- Всё, что на tapeshelf.com входит в Pro, здесь есть у всех. Это видеоредактор, скрытая страница и пароль на временных ссылках. Удалённые видео можно восстановить в течение 90 дней.
- Защита от злоупотреблений остаётся. Дневной лимит запросов (по умолчанию 30 видео, настраивается) и ограничения частоты обращений к API берегут сервер, поэтому они на месте.
- Ваше название, ваши правила. У экземпляра своё название и контактная почта, а правила и политику конфиденциальности он показывает из ваших файлов. Посетитель первым делом видит простую страницу входа.
Всё остальное — то же приложение: полки со стопками и категориями, загрузка с продолжением после обрыва, превью из 16 кадров, зашифрованный поток, запросы и торг в несколько раундов, обмен с гостями, временные ссылки, друзья и чат, двухэтапный вход (для администратора обязателен), уведомления, приложение на 20 языках, жалобы и админка.
Учтите, что каждый экземпляр — отдельный остров. Люди на нём меняются видео только друг с другом, с аккаунтами на tapeshelf.com и других серверах связи нет.
Обновления и бэкапы
Обновиться — значит забрать новую версию и перезапустить стек. Миграции применяются при старте, а видео, которое в этот момент обрабатывалось, обработается заново. И всё же перед крупным обновлением сделайте бэкап.
Ежедневные дампы базы попадают в ваш бакет сами. Видео и так лежат в хранилище, а их ключи вычисляются из мастер-ключа. Поэтому беречь нужно три вещи: бакет, дампы базы и этот самый ключ.
Лицензия в одном абзаце
tapeshelf можно запускать, изучать и менять. Если вы изменили код и даёте другим людям пользоваться своей версией по сети, AGPL обязывает предложить им исходный код этой версии. Чтобы запустить его как есть, для себя, семьи или друзей, достаточно сохранить при нём лицензию.
Когда
Скоро мы опубликуем репозиторий, готовые образы контейнеров и инструкцию по установке: хранилище, почта, бэкапы, разбор частых проблем. В тот же день об этом скажут страница «Селфхост» и этот блог, а не пропустить проще всего через RSS. Пока самый быстрый способ попробовать приложение — tapeshelf.com, подробности на странице тарифов.