Памятка по установке Peertube без лишней воды подробности можно посмотреть в ранее опубликованном посте Установка Peertube. Но в связи с переосмыслением и некоторых эксперементов сделал новую версию мануала, чтоб без путанницы и лишней информации. Да, многое будет не написано особенно про ошибки. В конце добавлю некоторую инфу про проблемы с которыми столкнулся при настройке и их решения. Короче это что то вроде копи-паста. Пост писал по мере установки на рабочий сервер, так что все пути будут сугубо под мой сервер. В конфигах некоторые строки будут заменены такие как ключи и пароли.
Я бы не сказал, что это какая то стандартная установка. Все подогнано под то что имеется на данный момент. Итак вводные данные:
Недавно накрылся старенький сервак выполняющий роль медиа-сервера, взял не менне старенькое железо под новый, так сказать из двух собрал один. Впринципе под такие домашние задачи, как раздача видео и стриминг на небольшую аудиторию, вполне я бы сказал потянет.
Локальный адрес сервера 192.168.30.33 на который накачу Peertube, так же помимо него в сети еще живут почтовый сервер и веб-сервер совмещающий в себе еще облачное хранение фото и видео с телефонов Immich. Это я к чему, веб сервер является основным и на нем не nginx , а apache2 ну вот так много лет назад было сделано. И он уже занял 80 и 443 порт, поэтому нужен будет обратный прокси apache2, а в большинстве мануалов все юзают nginx. Переделывать то что работает лень и некогда, вокруг столько еще много интересного и не поюзанного 😆
На серввере 192.168.30.33 уже все настроено крутятся Plex и Transmission пришлось заново все поднимать, благо записи, как это делать имеются. Соответственно все накатил на новую Debian 13.
Поскольку уже ранее поднимал сервак с Peertube. Доменное имя уже есть video.wildserver.ru. Виртуальный сервер Апача уже настроен, там только некоторые изменения и дополнения в конфиг внес, это все здесь будет. Сертификат SSL обновляется, короче есть.
Порты в маршрутизаторе на стрим проброшены, только поменял адрес сервака.
Установка Docker и Docker Compose
Скачать и запустить срипт установки:
curl -fsSL https://get.docker.com | sudo sh
Включить автозагрузку:
sudo systemctl enable --now docker
Добавить пользователя в группу docker:
sudo usermod -aG docker ИмяПользователя
Перелогинится или newgrp docker
Проверяем установку и работу
docker version
Client: Docker Engine - Community
Version: 28.4.0
API version: 1.51
Go version: go1.24.7
Git commit: d8eb465
Built: Wed Sep 3 20:57:38 2025
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 28.4.0
API version: 1.51 (minimum version 1.24)
Go version: go1.24.7
Git commit: 249d679
Built: Wed Sep 3 20:57:38 2025
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.7.27
GitCommit: 05044ec0a9a75232cad458027ca83437aae3f4da
runc:
Version: 1.2.5
GitCommit: v1.2.5-0-g59923ef
docker-init:
Version: 0.19.0
GitCommit: de40ad0
docker compose version
Docker Compose version v2.39.4
sudo systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; preset: enabled)
Active: active (running) since Mon 2025-09-22 19:32:34 MSK; 17min ago
Invocation: c1b8c60255cb48f09ae8a05c1e424a87
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 653911 (dockerd)
Tasks: 10
Memory: 23.5M (peak: 27.2M)
CPU: 684ms
CGroup: /system.slice/docker.service
└─653911 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Рабочая директория Peertube
mkdir /home/media/peertube
Создать файлы конфигурации Peertube
cd /home/media/peertube
docker-compose.yml
nano docker-compose.yml
services:
peertube:
# If you don't want to use the official image and build one from sources:
# build:
# context: .
# dockerfile: ./support/docker/production/Dockerfile.bookworm
image: chocobozzz/peertube:production-bookworm
# Use a static IP for this container because nginx does not handle proxy host change without reload
# This container could be restarted on crash or until the postgresql database is ready for connection
networks:
default:
ipv4_address: 172.18.0.42
# ipv6_address: 2001:db8:2::42
env_file:
- .env
environment:
- TZ=Europe/Moscow
ports:
- "1935:1935" # Comment if you don't want to use the live feature
- "9000:9000" # Uncomment if you use another webserver/proxy or test PeerTube in local, otherwise not suitable for production
volumes:
# Remove the following line if you want to use another webserver/proxy or test PeerTube in local
- assets:/app/client/dist
- ./docker-volume/data:/data
- ./docker-volume/config:/config
depends_on:
- postgres
- redis
- postfix
restart: "always"
postgres:
image: postgres:13-alpine
env_file:
- .env
environment:
- TZ=Europe/Moscow
volumes:
- ./docker-volume/db:/var/lib/postgresql/data
restart: "always"
redis:
image: redis:6-alpine
environment:
- TZ=Europe/Moscow
volumes:
- ./docker-volume/redis:/data
restart: "always"
postfix:
image: mwader/postfix-relay
env_file:
- .env
environment:
- TZ=Europe/Moscow
volumes:
- ./docker-volume/opendkim/keys:/etc/opendkim/keys
restart: "always"
networks:
default:
# enable_ipv6: false
ipam:
driver: default
config:
- subnet: 172.18.0.0/16
# - subnet: 2001:db8:2::/64
volumes:
assets:
certbot-www:
Сохранить файл Ctrl+O Enter, закрыть Ctrl+X
.env
nano .env
# Database / Postgres service configuration
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
# Postgres database name "peertube"
POSTGRES_DB=peertube
# The database name used by PeerTube will be PEERTUBE_DB_NAME (only if set) *OR* 'peertube'+PEERTUBE_DB_SUFFIX
#PEERTUBE_DB_NAME=<MY POSTGRES DB NAME>
#PEERTUBE_DB_SUFFIX=_prod
# Database username and password used by PeerTube must match Postgres', so they are copied:
PEERTUBE_DB_USERNAME=$POSTGRES_USER
PEERTUBE_DB_PASSWORD=$POSTGRES_PASSWORD
PEERTUBE_DB_SSL=false
# Default to Postgres service name "postgres" in docker-compose.yml
PEERTUBE_DB_HOSTNAME=postgres
# PeerTube server configuration
# If you test PeerTube in local: use "peertube.localhost" and add this domain to your host file resolving on 127.0.0.1
PEERTUBE_WEBSERVER_HOSTNAME=video.wildserver.ru
# If you just want to test PeerTube on local
PEERTUBE_WEBSERVER_PORT=443
PEERTUBE_WEBSERVER_HTTPS=true
# If you need more than one IP as trust_proxy
# pass them as a comma separated array:
PEERTUBE_TRUST_PROXY=["127.0.0.1", "192.168.30.0/24"]
# Generate one using `openssl rand -hex 32`
PEERTUBE_SECRET=Вставить_сгенерированный_код
# E-mail configuration
# If you use a Custom SMTP server
PEERTUBE_SMTP_USERNAME=noreply@wildserver.ru
PEERTUBE_SMTP_PASSWORD=Пароль_от_аккаунта_почты
# Default to Postfix service name "postfix" in docker-compose.yml
# May be the hostname of your Custom SMTP server
PEERTUBE_SMTP_HOSTNAME=mail.sudakova.net
PEERTUBE_SMTP_PORT=25
PEERTUBE_SMTP_FROM=noreply@wildserver.ru
PEERTUBE_SMTP_TLS=false
PEERTUBE_SMTP_DISABLE_STARTTLS=false
PEERTUBE_ADMIN_EMAIL=admin@wildserver.ru
Сохранить файл Ctrl+O Enter, закрыть Ctrl+X
Конфиг обратного прокси сервера Апач для Peertube Docker
Минималистичный конфиг, что бы проверить все ли работает, потом можно уже докрутить навороты по безопасности. Он гарантированно обеспечит работу всех функций сервера Peertube. Сделан именно под мои вводные.
До этого совершил много эксперементов и тестов прежде чем сваять сей опус.
Подключился к основному серверу по SSH окрыл файл конфига sudo nano /etc/apache2/sites-available/video.wildserver.ru-le-ssl.conf вставил следующее:
<VirtualHost *:80>
ServerName video.wildserver.ru
ServerAlias www.video.wildserver.ru
RewriteEngine On
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
</VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName video.wildserver.ru
ServerAlias www.video.wildserver.ru
# SSL
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/video.wildserver.ru/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/video.wildserver.ru/privkey.pem
ProxyPreserveHost On
ProxyRequests Off
# Все запросы в контейнер
ProxyPass / http://192.168.30.33:9000/
ProxyPassReverse / http://192.168.30.33:9000/
# Универсальная поддержка WebSocket
RewriteEngine On
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) ws://192.168.30.33:9000/$1 [P,L]
ProxyPassReverse / ws://192.168.30.33:9000/
<Location />
RequestHeader set X-Forwarded-For %{REMOTE_ADDR}s
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Host %{HTTP_HOST}s
</Location>
# Поддержка больших файлов (без лимитов)
LimitRequestBody 0
ErrorLog ${APACHE_LOG_DIR}/peertube_error.log
CustomLog ${APACHE_LOG_DIR}/peertube_access.log combined
</VirtualHost>
</IfModule>
Сохранить файл Ctrl+O Enter, закрыть Ctrl+X
Проверить конфиг sudo apachectl configtest
Перезапустить sudo systemctl restart apache2 или перезагрузить конфиги sudo systemctl reload apache2
Открыть порт для стрима в Peertube
sudo ufw allow 1935/tcp
Запуск Peertube
Запуск необходимо проводить из каталога с конфигами cd /home/media/peertube
docker compose up
Пойдут логи запущенного сервера, можно на них любовацо, но просто закрыть терминал и сделать новое подключение по SSH
Пароль от админки пользователя root Peertube
Посмотреть имена контейнеров docker ps в моем случае контейнер с Peertube называется peertube-peertube-1 смотрим его логи, что бы узнать пароль пользователя root для входа и редактирования настроек уже на сайте через браузер.
docker compose logs peertube | grep -A1 root
Если что то пошло не так то так - grep -A1 root /home/media/peertube/docker-volume/data/logs/peertube.log
{"message":"Username: root","level":"info","label":"video.wildserver.ru:443","timestamp":"2025-09-22T15:28:25.337Z"}
{"message":"User password: venupucugotawuba","level":"info","label":"video.wildserver.ru:443","timestamp":"2025-09-22T15:28:25.338Z"}
Данные для входа есть, идем video.wildserver.ru Сразу меняем пароль и отображаемое имя root и включаем двухфакторную авторизацию.
Дополнительные улучшения сервера Peertube
sudo nano /etc/sysctl.conf
Добавить или исправить строки
vm.overcommit_memory = 1
net.core.somaxconn=511
Сохранить файл Ctrl+O Enter, закрыть Ctrl+X
sudo sysctl -p
vm.overcommit_memory = 1→ чтобы Redis и Peertube не падали на нехватке памяти.net.core.somaxconn=511→ чтобы больше TCP-соединений не отваливалось.sysctl -p→ чтобы настройки заработали сразу.
Отключение двухфакторной авторизации Peertube
Доигрался с приложением двухфакторной авторизации на телефоне, что оно взбрыкнуло и мне было не попасть в админку. Ну и на тот случай если, что то , как всегда, пойдет не так 😆
Зайти в контейнер базы - docker exec -it peertube-postgres-1 psql -U postgres -d peertube выполнить:
UPDATE "user"
SET "otpSecret" = NULL
WHERE username = 'root';
\q
Настройка параметров Peertube через local-production.json
Все что можно сделать через вебморду доступно одним файлом конфигурации /home/media/peertube/docker-volume/config/local-production.json перед изменениями остановить сервер Peertube docker compose down открыть для правки nano /home/media/peertube/docker-volume/config/local-production.json Сохранить файл Ctrl+O Enter, закрыть Ctrl+X запустить сервер docker compose up -d
Краткое и структурированное описание:
Instance (информация о сервере)
- name — название инстанса PeerTube.
- short_description — короткое описание сервера.
- description — длинное описание, поддерживает Markdown.
- terms / code_of_conduct — правила и кодекс поведения.
- default_language / languages — язык интерфейса сервера.
- categories — категории видео.
- social — ссылки на соцсети или внешние ресурсы.
- default_client_route — путь, куда попадает пользователь по умолчанию (
/videos/browse). - customizations — CSS/JS для кастомизации интерфейса.
Theme (тема и цвета)
- default — выбранная тема интерфейса.
- customization — цвета, фон, бордеры, меню и заголовки.
Services (внешние сервисы)
- Twitter, Mastodon и др., например:
"twitter": { "username": "@Chocobozzz" }
Client (настройки фронтенда)
- Header, меню, миниатюры, логин, редиректы и прочее.
Cache (кэширование)
- Размеры кэша для превью, субтитров, торрент-файлов и storyboards.
Signup (регистрация пользователей)
- Включена или нет (
enabled) - Лимит на новых пользователей
- Требуется ли одобрение или подтверждение email
- Минимальный возраст
Admin / Contact
- Email администратора
- Контактная форма включена или нет
User (пользовательские настройки)
- Ведение истории просмотров (
history.videos.enabled) - Квота на видео (
video_quota,video_quota_daily) - Название канала по умолчанию
Video channels
- Максимум каналов на пользователя
Transcoding (транскодирование)
- Включено ли (
enabled) - Использовать оригинал или нет (
original_file.keep) - Резолюции (0p → 2160p)
- Количество потоков (
threads) - Конкурентные задачи (
concurrency) - Профиль кодирования (
profile) - FPS max
- Web и HLS трансляции
Live (прямые эфиры)
- Включено (
enabled) - Разрешить повтор (
allow_replay) - Максимальная длительность и количество одновременных эфиров
- Транскодирование live — резолюции, FPS, потоки
Video studio / Video transcription
- Редактирование видео и расшифровка субтитров (обычно отключены)
Import / Export
- Импорт видео через HTTP, torrent, пользователей
- Экспорт пользователей и их видео
Trending / Auto\_blacklist
- Настройки алгоритмов трендов (
hot,most-viewed,most-liked) - Авто-чёрный список видео
Followers / Followings
- Подписки на инстанс или каналы
- Авто-подписка, ручное одобрение
Broadcast message
- Показывать глобальные сообщения на сайте
Search
- Поиск по пользователям и видео
- Внешний поисковый индекс
Storyboards / Defaults / Email / Video comments
- Storyboards включены/выключены
- Настройки публикации, P2P, авто-проигрывания
- Подпись и префикс в письмах
- Приём комментариев с других инстансов
Поскольку железо выделенное на сервер Peertube очень старое, вытягивает обработку видео только в качестве 720p, а хочется FHD 1080p, то нужно прикрутить к нему помошника. Этим помошником сделал свой десктоп на винде 10 с видеокартой. О чем написал дополнительно Peertube Runners
Комментарии