Команда инженеров · свой ЦОД в РФ · своё железо · своя панель · CloudStack + Linstor · MCP · база знаний по self-hosted
Видеохостинг

PeerTube

Свой видеопортал для курсов, вебинаров и внутреннего видео компании. Развернули 8.3.0 на Fatmetal Cloud Server, залили лекцию 1080p и замерили то, о чем обычно не пишут: сколько диска съедает час видео и сколько длится транскодирование.

Проверено на версии 8.3.0, сентябрь 2026 ~11 минут чтения Fatmetal Team
Видеохостинг Лицензия: AGPL-3.0 7 контейнеров Статус: запущен у нас, 8.3.0

Вердикт

Подходит
  • онлайн-школам и корпоративному обучению: платите за сервер, а не за каждого преподавателя
  • внутреннему видео - уровень приватности Internal виден только своим и не уходит в федерацию
  • вебинарам с записью повтора и своему плееру без рекламы на своем домене
  • переезду канала с YouTube: есть импорт роликов и синхронизация чужого канала
Не подходит
  • кому нужен DRM - его нет, защита ограничена приватностью и паролем
  • кому нужен контракт поддержки - вендору нечего продавать
  • кто не готов планировать диск: час видео в полном профиле стоит 9.8 ГБ
  • для одного домашнего архива кино - это Jellyfin, транскодирование тут лишнее
Мин. тариф: CPU2-RAM4-DISK50 Рекомендуем: CPU4-RAM8-DISK100 Сложность: medium RAM в простое: ~571 MiB на 7 контейнеров До рабочего UI: ~6 минут Главный риск: домен нельзя сменить после первого старта
Что это

Что это и какую задачу решает

PeerTube - видеохостинг, который ставится на ваш сервер. Пользователи загружают ролики, сервер перекодирует их в несколько разрешений, зрители смотрят в браузере. Своя площадка вместо чужой.

Для компании это значит одно простое отличие от платных сервисов: мест не существует. Vimeo берет деньги за каждого сотрудника, который заливает видео. Здесь вы платите за сервер, и сколько на нем аккаунтов - его не касается.

Проект ведет французская некоммерческая ассоциация Framasoft. Лицензия AGPL-3.0 целиком: закрытых функций нет, enterprise-версии нет, облака вендора тоже нет. Зарабатывать на продукте никто не пытается - в своем FAQ авторы пишут прямо, что не делают на PeerTube денег.

Node.jsAngularPostgreSQL 17Redis 8ffmpegnginxActivityPub
Сравнение

Чем отличается от платных видеохостингов

Три коммерческих аналога считают деньги тремя разными способами, и это само по себе аргумент в пользу своего сервера при непредсказуемом трафике.

СервисЗа что платитеПорог входа
PeerTube (self-host)только сервер1100 руб/мес, мест нет
Vimeoза место + потолок полосы$12 / $25 / $75 за место в месяц, полоса 2 ТБ/мес на любом тарифе
Kinescopeподписка + гигабайтыот 10 евро/мес, трафик 0.03-0.01 евро/ГБ
Cloudflare Streamминуты видео$5/мес за 1000 минут хранения + $1 за 1000 отданных

Цены сняты с сайтов вендоров 27 сентября 2026. Потолок полосы у Vimeo стоит отдельного внимания: 2 ТБ в месяц - это примерно 700-1000 часов просмотра 1080p, и дальше разговор с отделом продаж.

Чего у PeerTube нет и не будет: DRM, встроенной монетизации просмотров, CDN. Вместо CDN - P2P-раздача через браузеры зрителей и взаимное кэширование между дружественными серверами.

Архитектура

Тех-стек и что из чего состоит

Официальный compose поднимает семь контейнеров: само приложение на Node.js, PostgreSQL 17, Redis, собственный nginx, certbot для продления сертификата, перезагрузчик nginx и postfix для писем.

Вся процессорная нагрузка продукта - это ffmpeg. Ни Node, ни Postgres, ни Redis процессора не просят: вендор сам пишет, что вне транскодирования PeerTube не упирается в CPU.

Отдельная деталь для планирования: nginx в комплекте не декоративный. Он отдает видеофайлы напрямую, минуя приложение, и заменять его своим прокси без нужды не стоит.

Конфигурация

Минимальная конфигурация

Вендор публикует требования в FAQ, а не в разделе установки, и разброс там восьмикратный.

Официальный минимум1 vCore, 1.5 ГБ RAM, 20 Мбит/с
1000 одновременных зрителей4 vCore, 4 ГБ RAM, 1 Гбит/с
Транскодирование на той же машине8 vCore, 8 ГБ RAM
Диск«enough storage for videos» - оценки нет
!

Разброс в восемь раз создает ровно одна функция - транскодирование. Его можно вынести на отдельную машину через remote runners, и тогда сам портал возвращается к четырем ядрам.

Наш выбор - CPU4-RAM8-DISK100. По памяти хватило бы и CPU2-RAM4-DISK50, но тариф здесь держат диск и процессор. Почему - в разделе с замерами.

В маркетплейсе Fatmetal

Не хотите ставить руками?

Этот стек есть в маркетплейсе Fatmetal - можно не повторять установку из этого разбора вручную. Заказываете сервер, за пару минут получаете рабочий сервис на своем домене, валидный TLS и файл с доступами.

Рекомендуемая конфигурация:
4 vCPU · 8 ГБ RAM · 100 ГБ NVMe от 990 ₽/мес

Развернуть в 1 клик →
Развертывание

Развертывание на Fatmetal Cloud Server

Ubuntu 24.04, Docker из официального репозитория, compose из репозитория апстрима. Три шага требуют внимания - остальное типовое.

  1. Включить IPv6 у демона Docker

    Сеть в compose объявлена с enable_ipv6. На чистом демоне стек просто не поднимется.

    echo '{"ipv6": true, "fixed-cidr-v6": "fd00:dead:beef::/48"}' \
      | sudo tee /etc/docker/daemon.json
    sudo systemctl restart docker
  2. Задать домен до первого запуска

    В .env заполняется PEERTUBE_WEBSERVER_HOSTNAME, пароль Postgres и PEERTUBE_SECRET. Имя должно быть окончательным - почему, читайте во врезке ниже.

  3. Выпустить первый сертификат руками

    Контейнер certbot в составе стека занимается только продлением. Стартовый сертификат выпускается до подъема, пока порт 80 свободен.

    sudo docker run --rm -p 80:80 \
      -v "$PWD/docker-volume/certbot/conf:/etc/letsencrypt" \
      certbot/certbot certonly --standalone -n --agree-tos \
      -m you@example.com -d video.example.com
  4. Поднять стек и забрать пароль администратора

    Пароль генерируется при первом старте и печатается в журнал.

    sudo docker compose up -d
    sudo docker compose logs peertube | grep -A1 root

Домен фиксируется навсегда

Документация говорит буквально: PeerTube не поддерживает смену имени веб-сервера. Оно уезжает в федеративные идентификаторы и в базу. Поднять на IP и переехать на домен позже нельзя - только переставить с нуля.

Страница просмотра лекции в PeerTube, русский интерфейс
Страница просмотра на нашем экземпляре 8.3.0. Интерфейс русский из коробки - локаль подхватывается по языку браузера.
Замеры

Что измерили после запуска

СтендCPU4-RAM8-DISK100, Ubuntu 24.04.4, Docker 29.8.1
Версия8.3.0 (по ответу API, не по тегу образа)
Скачивание образов172 с (4.36 ГБ на семь образов)
Подъем стека85 с, включая миграции базы
От чистой машины до UI~6 минут
RAM в простое571 MiB весь стек, из них 507 MiB приложение
RAM под транскодированием1.25 ГБ на хосте
Ответ главной снаружи200 за 90 мс

Образ PeerTube занимает на диске 3.05 ГБ, хотя Docker Hub показывает 706 МБ. Хаб показывает сжатый размер слоев - распакованный вчетверо больше.

Замеры сняты 27 сентября 2026 на версии 8.3.0. На других версиях и тарифах цифры будут другими.

Диск

Сколько на самом деле весит час видео

Главный расход у видеохостинга - не память, а диск. Вендор его не оценивает вовсе, поэтому мы залили реальный ролик и посчитали.

Эталон - лекция 3 минуты, 1080p, 5 Мбит/с, 107 МБ. Синтетику из генератора не брали: она сжимается нереалистично хорошо и занизила бы результат.

!

Расхожий тезис «PeerTube хранит видео в трех экземплярах» к умолчаниям не относится. Из коробки все дополнительные разрешения выключены, MP4-копий нет, исходник удаляется после обработки.

НастройкиДиск на роликКоэффициентЧасов на DISK100
Как ставится из коробки114 МБx1.02~38 часов
Только лестница HLS~186 МБ~x1.65~24 часа
Профиль курса: 4 разрешения + MP4 + исходник487 МБx4.33~9 часов

Раскладка полного профиля: исходник 113 МБ, лестница MP4 186 МБ, лестница HLS 186 МБ. Лестница считается дважды - отдельно для скачивания и отдельно для потокового просмотра.

Цифра воспроизводится: третья заливка того же файла дала ровно ту же дельту. Продукт, кстати, предупреждает об этом сам - прямо в настройках написано, что включение и HLS, и web-видео удваивает место.

Настройки транскодирования в админке PeerTube
Настройки транскодирования. «Сохранять оригинал» и «Web-видео включено» - те самые два переключателя, каждый из которых добавляет по размеру исходника.

Кончился диск - выносите видео в объектное хранилище. PeerTube умеет складывать в S3 раздельно исходники, MP4, HLS и субтитры.

Процессор

Транскодирование: сколько ждать и что подкрутить

Та же лекция на трех минутах, четыре ядра 2.4 ГГц, полный профиль курса:

НастройкаВремяК длительности ролика
threads = 1 (по умолчанию)433 сx2.41
threads = 4317 сx1.76

Из коробки стоит threads: 1. То есть транскодирование не использует ядра, за которые вы заплатили, и чинится это одним переключателем в админке.

Ускорение вышло всего в 1.37 раза, а не в четыре: задачи все равно идут по одной, и отдача от потоков внутри ffmpeg падает. При четырех потоках контейнер забирает 350% процессора из 400% доступных.

i

Преподаватель не ждет окончания обработки. Видео становится опубликованным через 35 секунд, как только готово исходное разрешение. Остальные качества досчитываются фоном еще шесть с половиной минут.

Доступ

Приватность и вход для сотрудников

Регистрация на свежем инстансе закрыта по умолчанию - для корпоративного портала это верное умолчание, отдельно выключать нечего.

У каждого ролика свой уровень доступа. Работают все, мы проверили каждый на стенде:

УровеньКто видит
Общедоступноевсе, ролик уходит в федерацию
Внутреннее (Internal)только вошедшие пользователи вашего сервера, в федерацию не уходит
Защищено паролемкто знает пароль от конкретного видео
По ссылке / приватноеу кого есть ссылка / только автор
Список видео с тремя режимами приватности
Три занятия курса с разными уровнями доступа: общедоступное, внутреннее и защищенное паролем.

Вход через корпоративный каталог делается плагинами из официального индекса: auth-ldap, auth-openid-connect, auth-saml2. Оговорка обязательная: плагины не вендорские, а community, и версии у них ранние - LDAP 0.2.0, SAML2 0.3.1. Перед внедрением это проверяют, а не принимают на веру.

Курс собирается плейлистом, а статистика по каждому ролику показывает удержание, страны, устройства и операционные системы зрителей.

Плейлист как структура учебного курса в PeerTube
Плейлист «Курс: основы информационной безопасности» из трех занятий - так собирается программа обучения.
Статистика просмотров видео в PeerTube
Статистика ролика: среднее время просмотра, удержание, разбивка по странам и устройствам.
Грабли

Где может сломаться

failed to create network: IPv6 is not enabled on daemon

Причина. Сеть в compose апстрима объявлена с IPv6 и внутренней подсетью, а демон Docker по умолчанию IPv6 не умеет.

Решение. Добавить "ipv6": true и fixed-cidr-v6 в /etc/docker/daemon.json и перезапустить демон. Маршрутизируемый IPv6 хосту при этом не нужен.

Ограничение встраивания по доменам заявлено, но у нас не заработало

В release notes 8.1 есть функция «разрешить встраивание только на указанных доменах». На свежем 8.3.0 мы ее не нашли: в интерфейсе правки видео такого поля нет ни на одной вкладке, а через API значение молча не меняется. Если функция для вас решающая - проверьте до внедрения.

P2P раскрывает IP зрителя

Плеер сам предупреждает: при раздаче через браузеры технические данные, включая публичный IP, видны другим участникам. Для внутреннего портала P2P разумно выключить - экономии на полусотне зрителей он все равно не дает.

Почтовый контейнер в комплекте есть, но полагаться на него не стоит

Свой postfix идет в составе стека. Письма с чистого адреса VPS без обратной зоны и согласованных SPF с DKIM уезжают в спам. Мы указали внешний SMTP - письмо о сбросе пароля дошло за секунду.

Эксплуатация

Безопасность и обновления

Что закрыть перед боевым запуском:

  • Пароль администратора. Автоматический пароль лежит в журнале - смените через npm run reset-password -- -u root.
  • Секреты. В .env обязательно свои POSTGRES_PASSWORD и PEERTUBE_SECRET, а не значения из примера.
  • Порты. Наружу смотрят 80, 443 и 1935 для приема трансляций. Не нужны эфиры - закройте 1935.
  • Бэкап. База PostgreSQL плюс каталог с видео. Второй растет быстрее всего.

Обновление - docker compose pull и пересоздание контейнеров, но сперва читайте release notes. Переход на 8.3 требует ручного запуска скрипта миграции уже после старта, а начиная с этой версии обязателен PostgreSQL 14 или новее.

В 8.3.0 заметная часть работы ушла в безопасность: блокировка аккаунта при переборе пароля с разных адресов, письмо о входе с нового устройства, ограничение частоты запросов на жалобы и комментарии.

Соседи

Связь с другими стеками

  • Owncast - только живой эфир и чат, один бинарь вместо семи контейнеров. Нужны трансляции без загрузки роликов - берите его.
  • Jellyfin - раздача вашей готовой медиатеки вам же. Ни транскодирования по загрузке, ни аккаунтов для посторонних.
  • Keycloak - если корпоративный вход строится всерьез, провайдер OIDC живет отдельно, а PeerTube подключается плагином.
Ограничения

Когда это НЕ ваш выбор

Нужен DRM

Защита ограничена приватностью, паролем и настройками встраивания. От записи экрана это не спасает. Нужен настоящий DRM - смотрите в сторону Kinescope, у Vimeo и Wistia его тоже нет.

Нужен телефон поддержки

Контракт с SLA купить не у кого: над продуктом работают два штатных разработчика некоммерческой ассоциации, и продавать им нечего.

Видео много, а администратора нет

Это не «поставил и забыл». Диск, транскодирование, обновления и модерация - постоянная работа, пусть и небольшая.

FAQ

Частые вопросы

Хватит ли CPU2-RAM4-DISK50?

По памяти - с запасом, весь стек в простое занимает 571 MiB. Упретесь в диск: 50 ГБ - это около четырех часов видео в полном профиле.

Можно поставить без Docker?

Да, вендор даже считает установку из релизного архива рекомендованной. Docker воспроизводимее, мы ставили им.

Обязательно ли включать федерацию?

Нет, она выключается целиком. Для внутреннего портала так обычно и делают - тогда PeerTube работает как обычный видеохостинг.

Можно перенести канал с YouTube?

Да, есть импорт роликов по ссылке и синхронизация канала - старый канал при этом закрывать не нужно.

Есть ли автоматические субтитры?

Да, расшифровка речи встроена с версии 6.2, рядом с плеером появляется панель с текстом. На русском мы ее не проверяли.

Что бэкапить?

Базу PostgreSQL и каталог с видеофайлами. Второй и есть основной объем.

Сколько полосы экономит P2P?

Не знаем - нужны десятки одновременных зрителей, мы столько не собирали. Заявление вендора есть, нашей цифры нет.

Итог

PeerTube закрывает корпоративное видео целиком: приватность до уровня «только свои и без федерации», вебинары с записью, субтитры, статистика удержания и плеер без рекламы на своем домене. Платите за сервер, а не за преподавателей. Планировать нужно диск: из коробки час видео стоит примерно 2.3 ГБ, в полном профиле курса - 9.8 ГБ. Домен выбирайте один раз и навсегда, IPv6 демону включите заранее, а threads поднимите до числа ядер.

Рекомендуемая конфигурация для установки:
4 vCPU · 8 ГБ RAM · 100 ГБ NVMe

Не хотите устанавливать вручную?

Запустите PeerTube на этой конфигурации автоматически - от 990 ₽/мес.

Запустить PeerTube →
Анонсы новых разборов в Telegram-канале Новые гайды и карточки в маркетплейсе первыми @fatmetal_channel →

Этот стек у нас запущен на тарифе CPU4-RAM8-DISK100. Нашли ошибку в гайде - напишите, поправим в течение дня.