Памятка по установке 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, пользователей
  • Экспорт пользователей и их видео

  • Настройки алгоритмов трендов (hot, most-viewed, most-liked)
  • Авто-чёрный список видео

Followers / Followings

  • Подписки на инстанс или каналы
  • Авто-подписка, ручное одобрение

Broadcast message

  • Показывать глобальные сообщения на сайте

  • Поиск по пользователям и видео
  • Внешний поисковый индекс

Storyboards / Defaults / Email / Video comments

  • Storyboards включены/выключены
  • Настройки публикации, P2P, авто-проигрывания
  • Подпись и префикс в письмах
  • Приём комментариев с других инстансов

Поскольку железо выделенное на сервер Peertube очень старое, вытягивает обработку видео только в качестве 720p, а хочется FHD 1080p, то нужно прикрутить к нему помошника. Этим помошником сделал свой десктоп на винде 10 с видеокартой. О чем написал дополнительно Peertube Runners