PeerTube на Ubuntu 24.04: пошаговая установка
Если YouTube начал банить или демонетизировать канал не по вашей вине, а альтернативные площадки не устраивают модерацией и алгоритмами — остаётся вариант держать видеохостинг самому. PeerTube решает эту задачу без привязки к чужой инфраструктуре: видео хранится на вашем сервере, а федерация через ActivityPub позволяет зрителям находить контент даже без раскрутки в соцсетях. Ниже — рабочая установка на чистой Ubuntu 24.04, от подготовки сервера до первого запуска.
Содержание
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →Требования к серверу и подготовка ОС
PeerTube — не лёгкое приложение. Node.js-бэкенд плюс PostgreSQL, Redis и ffmpeg для транскодинга требуют заметно больше ресурсов, чем обычный веб-сайт. Официальные рекомендации разработчиков — минимум 2 vCPU и 4 ГБ RAM для инстанса без активного транскодинга нескольких видео одновременно; если планируете принимать загрузки от многих пользователей и включаете несколько разрешений транскодинга сразу, комфортнее будет на 4 vCPU и 8 ГБ RAM.
Диск — отдельный вопрос. PeerTube хранит оригиналы и все транскодированные версии (обычно 240p–1080p, иногда выше), поэтому даже недолгий видеоролик после обработки может занимать в разы больше места, чем исходник. Планируйте от 100 ГБ SSD для старта и закладывайте рост — как ориентир, при активной загрузке пользователями заканчивается место быстрее, чем кажется на старте, поэтому лучше сразу брать план с возможностью расширения диска или подключением S3-совместимого хранилища.
Начните с базового обновления и установки зависимостей:
sudo apt update && sudo apt upgrade -y
sudo apt install -y curl sudo unzip vim build-essential git \
python3 ffmpeg ca-certificates gnupg
ffmpeg -version | head -n1
Проверьте версию ffmpeg — PeerTube требует достаточно свежую сборку с поддержкой нужных кодеков; версия из штатных репозиториев Ubuntu 24.04 подходит.
Заранее настройте домен: PeerTube жёстко привязывается к имени хоста при установке (сменить его потом сложно), поэтому убедитесь, что A-запись домена уже смотрит на IP сервера, до того как перейдёте к конфигурации.
Устанавливаем Node.js, Yarn, PostgreSQL и Redis
PeerTube работает на Node.js LTS-ветке. Точную минимальную версию для вашей версии PeerTube лучше сверить со страницей требований в официальном репозитории на GitHub — она периодически сдвигается. На конец лета 2026 актуальна ветка Node.js 20.x:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
sudo corepack enable
sudo npm install -g yarn
node -v && yarn -v
PostgreSQL с расширениями pg_trgm (полнотекстовый поиск) и unaccent (поиск без учёта диакритики):
sudo apt install -y postgresql postgresql-contrib
sudo -u postgres createuser -P peertube
sudo -u postgres createdb -O peertube -E UTF8 -T template0 peertube_prod
sudo -u postgres psql -c "CREATE EXTENSION pg_trgm;" peertube_prod
sudo -u postgres psql -c "CREATE EXTENSION unaccent;" peertube_prod
При создании пользователя createuser -P попросит задать пароль — сохраните его, он понадобится в конфиге. Подробнее про саму установку и тюнинг PostgreSQL — в статье установка PostgreSQL на Ubuntu.
Redis нужен для очередей задач (транскодинг, федерация, уведомления) и кэша:
sudo apt install -y redis-server
sudo systemctl enable --now redis-server
redis-cli ping
redis-cli ping должен ответить PONG — если нет, проверьте, что служба реально запущена и слушает 127.0.0.1:6379 (по умолчанию так и есть, менять не нужно).
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверУстанавливаем PeerTube и настраиваем конфигурацию
Создайте отдельного системного пользователя — от root PeerTube запускать не стоит:
sudo useradd -m -d /var/www/peertube -s /bin/bash peertube
sudo passwd -l peertube
sudo su - peertube
mkdir -p /var/www/peertube/{versions,config,storage}
Скачайте актуальный релиз с GitHub (не git clone — для продакшена используется собранный zip-архив релиза):
cd /var/www/peertube/versions
PEERTUBE_VERSION=$(curl -s https://api.github.com/repos/Chocobozzz/PeerTube/releases/latest \
| grep tag_name | cut -d '"' -f4)
echo "Ставим версию: $PEERTUBE_VERSION"
wget -q "https://github.com/Chocobozzz/PeerTube/releases/download/${PEERTUBE_VERSION}/peertube-${PEERTUBE_VERSION}.zip"
unzip -q "peertube-${PEERTUBE_VERSION}.zip"
rm "peertube-${PEERTUBE_VERSION}.zip"
cd /var/www/peertube
ln -s "versions/peertube-${PEERTUBE_VERSION}" ./peertube-latest
cd peertube-latest && yarn install --production --pure-lockfile
Сборка зависимостей через yarn занимает заметное время — на слабом канале или диске может уйти 10–20 минут, это нормально.
Скопируйте шаблоны конфигурации и заполните production.yaml:
cd /var/www/peertube
cp peertube-latest/config/default.yaml config/default.yaml
cp peertube-latest/config/production.yaml.example config/production.yaml
vim config/production.yaml
Ключевые поля, которые обязательно нужно поправить:
webserver:
hostname: 'video.ваш-домен.ru'
port: 443
database:
hostname: 'localhost'
port: 5432
username: 'peertube'
password: 'пароль_из_createuser'
name: 'peertube_prod'
redis:
hostname: 'localhost'
port: 6379
storage:
tmp: '/var/www/peertube/storage/tmp/'
videos: '/var/www/peertube/storage/videos/'
# остальные пути storage можно оставить по умолчанию
admin:
email: 'admin@ваш-домен.ru'
Секцию SMTP (smtp:) тоже стоит заполнить сразу — без рабочей почты PeerTube не отправит письма подтверждения регистрации и уведомления модераторам, а часть функций (сброс пароля, контакт-форма) будет молчать.
Nginx как обратный прокси и SSL через Let's Encrypt
PeerTube отдаёт большие файлы (видео, миниатюры, HLS-плейлисты), поэтому обратный прокси нужен с увеличенным client_max_body_size и поддержкой длительных соединений. Разработчики PeerTube поставляют готовый шаблон — используйте его как основу, а не пишите конфиг с нуля:
sudo apt install -y nginx
sudo cp /var/www/peertube/peertube-latest/support/nginx/peertube \
/etc/nginx/sites-available/peertube
sudo ln -s /etc/nginx/sites-available/peertube /etc/nginx/sites-enabled/peertube
sudo rm -f /etc/nginx/sites-enabled/default
В скопированном файле замените плейсхолдеры ${WEBSERVER_HOST} на 127.0.0.1, ${PEERTUBE_HOST} — на порт из production.yaml (обычно 9000, внутренний, не путать с webserver.port), и server_name — на ваш домен. Общие принципы настройки nginx как reverse proxy подробно разобраны в статье Nginx как обратный прокси на Ubuntu — пригодится, если нужно донастроить таймауты или лимиты под свою нагрузку.
Проверьте синтаксис и перезапустите nginx, затем получите сертификат:
sudo nginx -t && sudo systemctl reload nginx
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d video.ваш-домен.ru
Certbot сам пропишет пути к сертификатам в конфиг nginx и настроит редирект с 80 на 443. Про автопродление и типичные грабли с Let's Encrypt — в статье установка и настройка Let's Encrypt SSL на VPS.
Не забудьте открыть порты в файрволе — обычно достаточно 80, 443 и SSH:
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
Разбор типичных настроек UFW — в статье файрвол UFW на Ubuntu 24.04.
Systemd-сервис, запуск и создание администратора
PeerTube в комплекте несёт готовый unit-файл — используйте его вместо ручного запуска в screen/tmux:
sudo cp /var/www/peertube/peertube-latest/support/systemd/peertube.service \
/etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now peertube
sudo systemctl status peertube
Если сервис не стартует, первым делом смотрите живой лог:
sudo journalctl -fu peertube
Частые причины падения на старте: неверный пароль к PostgreSQL в production.yaml, недоступный Redis, либо занятый порт. После того как сервис поднялся и слушает нужный порт (проверьте curl -I http://localhost:9000 изнутри сервера), создайте первого администратора:
cd /var/www/peertube/peertube-latest
sudo -u peertube NODE_CONFIG_DIR=/var/www/peertube/config \
NODE_ENV=production node dist/scripts/create-admin.js -- -u admin
Скрипт запросит пароль интерактивно. Точное имя и путь к скрипту создания администратора у разных релизов PeerTube иногда отличаются — если команда выше не находит файл, посмотрите содержимое dist/scripts/ в вашей версии или актуальную инструкцию на официальном сайте joinpeertube.org, она обновляется вместе с релизами.
После этого откройте https://video.ваш-домен.ru в браузере — должна открыться главная страница инстанса с формой входа.
Хранилище видео, транскодинг и федерация ActivityPub
По умолчанию PeerTube хранит видео на локальном диске сервера в путях из секции storage production.yaml. Это самый простой вариант для старта, но у него есть предел — рано или поздно диск закончится, и придётся либо расширять его на лету, либо переносить хранилище.
Альтернатива — подключить S3-совместимое объектное хранилище через секцию object_storage в конфиге: видео и стримы будут отдаваться напрямую из бакета, а сервер останется лёгким. Такой вариант удобен, если ожидаете рост библиотеки — можно поднять собственное S3-совместимое хранилище рядом с PeerTube или на отдельном сервере и не думать о расширении локального диска.
Транскодинг — самая ресурсоёмкая часть. В секции transcoding конфига включаются нужные разрешения (resolutions: 240p, 360p, 480p, 720p, 1080p) и HLS-режим. Чем больше разрешений включено одновременно, тем дольше обрабатывается каждая загрузка и тем выше нагрузка на CPU — на слабом тарифе транскодинг в высокие разрешения может занимать заметно больше времени, чем длительность самого ролика. Если сервер начинает тормозить именно на этом этапе, часто помогает не только апгрейд CPU, но и банальная проверка объёма swap на сервере.
Федерация через ActivityPub работает "из коробки" и не требует ручной настройки: как только инстанс поднят и доступен по HTTPS, другие серверы PeerTube могут на него подписываться, а ваши пользователи — подписываться на удалённые каналы через Администрирование → Федерация в панели. WebFinger и NodeInfo endpoints PeerTube генерирует автоматически на основе hostname из конфига — это ещё одна причина не менять домен после первого запуска.
Нужен сервер под эту задачу?
Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.
Арендовать серверНужны сами нейросети для контента?
Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.
Частые вопросы
Можно ли сменить домен после установки PeerTube?
Технически да, но сложно: hostname зашит в ActivityPub-идентификаторы уже опубликованных видео и каналов, федерация с другими инстансами может сломаться. Лучше определиться с доменом до первого запуска.
Сколько диска реально нужно на старте?
Зависит от объёма и качества загружаемого видео и количества включённых разрешений транскодинга. Для небольшого личного или командного инстанса 100–200 ГБ SSD обычно хватает на первые месяцы; для публичного видеохостинга с активной аудиторией стоит сразу закладывать план с возможностью расширения диска или S3-хранилище.
PeerTube упал в лог с ошибкой подключения к базе — что делать?
Проверьте, что пароль в config/production.yaml совпадает с тем, что задавали при createuser -P, и что PostgreSQL слушает localhost и запущен (sudo systemctl status postgresql).
Нужен ли отдельный CDN для раздачи видео?
Не обязательно на старте — PeerTube использует P2P-раздачу через WebTorrent между зрителями, что снижает нагрузку на исходящий канал сервера. Но при большой аудитории S3-хранилище с собственным CDN перед ним снимает часть нагрузки с самого сервера приложения.
Чем PeerTube отличается от обычного медиасервера типа Jellyfin?
Jellyfin — это личный медиацентр для вашей библиотеки, без публичной федерации и системы каналов/подписчиков. PeerTube — публичная платформа с моделью YouTube: каналы, подписки, комментарии, федерация между инстансами. Если нужен именно личный сервер для своих файлов, это разные задачи.
Обсудить статью, задать вопрос или начать новую тему
Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.
Перейти в сообщество →