PeerTube — свободная платформа для публикации видео, которую можно развернуть на собственном сервере. Она объединяет видеохостинг, панель модерации и федерацию по протоколу ActivityPub: инстансы могут подписываться друг на друга, а зрители — смотреть ролики в браузере или через P2P. Разберём установку через Docker Compose, настройку домена и HTTPS, транскодирование, резервное копирование и правила ответственной публикации.
Как устроен самостоятельный видеохостинг
PeerTube не является единым сайтом. Каждый администратор запускает свой узел, сам определяет правила, хранит файлы и отвечает за модерацию. Федерация помогает находить видео с других узлов, но не делает чужой контент вашим: ответственность за собственный раздел остаётся на владельце.
- основное приложение на Node.js и PostgreSQL хранит метаданные, пользователей и настройки;
- Redis используется для очередей и кеша, ffmpeg — для транскодирования;
- reverse proxy с Let’s Encrypt завершает HTTPS и отдаёт статику;
- P2P через WebTorrent снижает нагрузку на канал, но раскрывает зрителям IP-адреса друг друга;
- протокол ActivityPub обеспечивает подписки, комментарии и федерацию.
Требования к серверу и домену
Для тестового узла без транскодирования хватит двух ядер и 2 ГБ памяти. Production-инстанс с загрузкой видео требует минимум 4 ядра и 8 ГБ ОЗУ, а лучше — выделенный сервер с быстрым диском. Место считайте по исходникам и результатам перекодирования: час видео может занимать несколько гигабайт.
- чистая Ubuntu 24.04 или Debian 12 с root-доступом;
- домен, например
video.example.org, с A-записью на IP сервера; - открытые порты 80 и 443, а для прямых трансляций — 1935;
- настроенный почтовый сервер или SMTP-релей для писем регистрации;
- достаточное дисковое пространство и отдельный каталог для данных.
Установка через Docker Compose
Официальный production-набор уже включает приложение, PostgreSQL, Redis, Postfix, nginx и Certbot. Настраивать reverse proxy отдельно не нужно: контейнер веб-сервера сам получает сертификат.
curl -fsSL https://get.docker.com | sudo sh
sudo systemctl enable --now docker
git clone https://github.com/Chocobozzz/PeerTube.git
cd PeerTube/support/docker/production
Заполните обязательные поля. Секрет генерируется командой openssl rand -hex 32, пароль базы придумайте отдельно. Домен должен совпадать с DNS-записью, иначе Let’s Encrypt не выдаст сертификат.
cp .env .env.backup
openssl rand -hex 32
nano .env
# PEERTUBE_WEBSERVER_HOSTNAME=video.example.org
# POSTGRES_PASSWORD=сложный_пароль
# PEERTUBE_SECRET=результат_openssl
# PEERTUBE_ADMIN_EMAIL=admin@example.org
Запустите контейнеры и посмотрите журнал. Первый старт занимает несколько минут: создаются таблицы и выпускается сертификат.
docker compose up -d
docker compose ps
docker compose logs -f peertube
docker compose logs -f webserver
Домен, HTTPS и первый вход
Убедитесь, что DNS обновился и порты доступны извне. Если сертификат не выдался, проверьте, что домен указывает на нужный IP, а порт 80 не занят другим веб-сервером. Логин и пароль администратора выводятся в журнале при первом запуске.
dig +short video.example.org
curl -I http://video.example.org
curl -I https://video.example.org
sudo ss -tlnp | grep -E ':80|:443|:1935'
Сразу после входа смените пароль, включите двухфакторную аутентификацию и ограничьте регистрацию. Открытая регистрация без проверки почты быстро превращает инстанс в площадку для спама, поэтому лучше ручное подтверждение или приглашения.
Транскодирование, трансляции и хранилище
В панели администратора задаются доступные разрешения, лимиты загрузки и профили перекодирования. Не включайте все варианты сразу: каждый профиль увеличивает время обработки и расход диска. Для начала достаточно 720p и 480p.
- включите отложенную публикацию, чтобы проверять видео до появления в ленте;
- ограничьте размер загрузки и длительность роликов;
- для прямых эфиров используйте RTMP и отдельный потоковый ключ;
- следите за свободным местом и очередью транскодирования;
- для больших объёмов подключите S3-совместимое объектное хранилище.
df -h /var/lib/docker
docker system df
docker stats --no-stream
docker compose exec peertube ffprobe -version
Старые исходники удаляйте только после успешного перекодирования: без них повторно создать версии не получится. Для объектного хранилища в .env есть переменные PEERTUBE_OBJECT_STORAGE_*; включайте их после проверки совместимости с S3 API.
Федерация и модерация
Федерация включается в настройках. Можно подписываться на другие инстансы, но не обязательно принимать всё подряд. В панели есть блокировка доменов, скрытие комментариев и жалобы. Для публичного узла назначьте модератора и опишите правила на отдельной странице.
- подтверждайте жалобы и фиксируйте решения;
- блокируйте домены, которые распространяют запрещённый контент или материалы без прав;
- не публикуйте чужие видео без разрешения правообладателя;
- проверяйте лицензии на музыку, изображения и фрагменты фильмов;
Федерация означает, что после подписки других узлов копии метаданных, превью и комментариев могут остаться на сторонних серверах. Удаление у себя не гарантирует удаление везде, поэтому спорные материалы лучше не публиковать вовсе.
Ответственность за контент и авторские права
Администратор отвечает за то, что публикуется на его площадке. Перед запуском составьте правила, укажите контакты для жалоб и порядок их рассмотрения. Загружайте только свои видео или материалы с письменным разрешением либо свободной лицензией. Чужие фильмы, музыку и спортивные трансляции нельзя размещать без прав, даже если файл найден в открытом доступе.
Продумайте обработку персональных данных: не публикуйте адреса, документы и кадры с людьми без согласия. Ведите журнал жалоб и удаляйте контент, нарушающий закон или права третьих лиц. Если открыта регистрация, ограничивайте загрузку до подтверждения пользователя.
Обновление и резервное копирование
Перед обновлением сделайте дамп базы и архив. Если вы правили .env, сохраните копию: git pull может конфликтовать. Без копии откат может быть невозможен. Читайте примечания к выпуску: иногда нужна миграция PostgreSQL или правка переменных окружения.
docker compose exec postgres sh -c 'pg_dump -U "$POSTGRES_USER" "$POSTGRES_DB"' > peertube-$(date +%F).sql
tar czf peertube-data-$(date +%F).tar.gz docker-volume/data docker-volume/config
git pull
docker compose pull
docker compose up -d
Проверьте восстановление: нераспакованный архив нельзя считать надёжным. Храните копии вне сервера.
Чек-лист перед публикацией
- домен и HTTPS работают, сертификат обновляется автоматически;
- сменён пароль администратора, включена двухфакторная защита;
- ограничены регистрация, размер загрузки и длительность видео;
- опубликованы правила и контакты для жалоб;
- настроены резервное копирование и проверка восстановления.
Итог
PeerTube даёт полный контроль над видеоплатформой: вы сами определяете правила, храните данные и управляете федерацией. Docker-набор упрощает установку, но не отменяет обязанностей администратора. Успешный инстанс — это работающий сервер, понятная модерация, уважение авторских прав и готовность отвечать за каждый материал.