Власний tapeshelf

tapeshelf — відкритий проєкт під ліцензією AGPL-3.0, і застосунок, на якому працює tapeshelf.com, — саме той, який ви зможете запустити на власному сервері. Публічного репозиторію й інструкції зі встановлення ще немає. Поки вони не вийшли, ось як виглядатиме власний екземпляр, щоб ви могли вирішити, чи це для вас, і спланувати сервер.
Один стек
Екземпляр — це один стек Docker Compose:
browser ──HTTPS──► Caddy ─── the web app, security headers
└── /api, /ws ──► api ──► Postgres, Redis
worker (ffmpeg) ──► Postgres, Redis
browser ──► S3-compatible storage: uploads, video segments, images
- Caddy віддає вебзастосунок і передає далі трафік API та WebSocket. Він сам отримує й поновлює сертифікат Let’s Encrypt. Якщо у вас уже є зворотний проксі, Caddy може працювати за ним без TLS.
- api — це все, що робить застосунок: акаунти, полиці, перевірки доступу, запити й обміни, тимчасові посилання і видача ключів до відео.
- worker — той самий код, запущений як другий процес в образі з ffmpeg. Він очищує й перекодовує завантаження, шифрує копії для потокового відтворення, робить кадри й прев’ю, збирає змонтовані відео, надсилає листи й сповіщення.
- Postgres зберігає дані. Redis зберігає черги завдань і короткочасні кеші.
- Одноразовий контейнер migrate запускається під час кожного старту. Він застосовує міграції бази даних, створює акаунт адміністратора з ваших налаштувань і налаштовує бакети: публічне читання без перегляду списку для зображень, правило очищення для покинутих завантажень і CORS для вашого домену.
- Сервіс backup раз на день робить дамп бази даних у ваш бакет і зберігає останні 14 дампів.
Відео ніколи не проходить через API. Браузери завантажують просто в сховище й звідти ж отримують сегменти, тож сховищу потрібна власна адреса, доступна для браузерів. Це єдина частина, над якою доведеться подумати. Можна під’єднати tapeshelf до S3-сумісного сервісу, яким ви вже користуєтеся, або запустити сховище в тому самому стеку.
Що знадобиться
- Сервер на Linux із Docker і плагіном Compose. Два ядра процесора й 4 ГБ пам’яті — розумний мінімум.
- Місце на диску для тимчасових файлів воркера: приблизно в два з половиною рази більше за найбільше відео, на кожне відео, що обробляється паралельно.
- Домен, що вказує на сервер, і відкриті порти 80 та 443.
- SMTP-акаунт для листів: підтвердження, скидання пароля й сповіщення.
- За бажання — власний клієнт Google OAuth для «Увійти через 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, а подробиці є на сторінці тарифів.