Установим и настроим децентрализованную платформу для организации видеохостинга и видеовещания под названием PeerTube на системe Rocky Linux. Лучший вариант для организации хранения и использования своих видеофайлов. Сети распространения контента на базе P2P-коммуникаций.
Содержание:
- 1 Предисловие
- 2 Системные требования
- 3 Предварительная подготовка
- 4 Установка Peertube
- 5 Настройка Nginx
- 6 TCP/IP тюнинг для PeerTube
- 7 Запуск PeerTube
- 8 Настройка PeerTube
- 9 Обзор PeerTube
- 10 Обновление PeerTube
- 11 Переезд PeerTube
- 12 Смена доменного имени PeerTube
- 13 Смена пароля администратора PeerTube
- 14 Заключение
Предисловие
В современном мире сделать видеозапись не составляет никакого труда. Все сложности возникают когда надо поделится видео и выбрать место где хранить видеофайлы. Вариант с выгрузкой видео на «бесплатные» ресурсы я исключил сразу. Мне необходима 100% гарантия сохранности данных и удобное использование ресурса без сюрпризов.
Не знаю как вы, но я не могу больше смотреть этот рекламный бред который размещают в видеороликах.
Мои требования для организации базы видеофайлов были следующие:
- Общий сервер куда пользователи могут загружать и просматривать видеофайлы,
- Система администрирования как самой системы так и прав пользователей,
- Удобный поиск нужных видео,
- Обработка видеофайлов на самом сервере,
- Загрузка видео по прямой ссылке на видео,
- Добавление видео используя торрент-файл.
Все эти требования с легкостью осуществляет PeerTube.
Мне не надо теперь сидеть и часами обрабатывать видео для получения нужного качества и размера видеофайла. Например, при загрузке фидеофайла снятого на мобильном телефоне и имеющего общий размер в районе 8 Гиб я получаю на выходе видеофайл размером в районе 1,5 Гиб без потери качества видео.
Система активно развивается и с каждым выпуском возможности только расширяются.
Становитесь пользователями PeerTube и вы никогда об этом не пожалеете.
Системные требования
Почти сразу после публикации статьи сразу в комментариях появился вопрос о системных требованиях данного сервиса.
Почему я сразу не написал про параметры системы не могу сказать, но мысль проскакивала. Коментарии важны так как получаешь обратную связь и это вызывает желание дополнять или редактировать статью в будущем.
Для работы системы в режиме просмотра много ресурсов не надо, но вот когда происходит загрузка видео и идет последующее транскодирование в другие разрешения время обработки сильно зависит от ресурсов железа.
Исходные данные тестирования:
- Система работает в виртуальной машине под управлением Proxmox c процессором Intel(R) Xeon(R) CPU E5620 @ 2.40GHz, DDR3, обычные HDD;
- Во время всего тестирования пользователи активно пользовались системой в режиме просмотра ( 3-5 );
- Для тестирования был выбран видеофайл размером 7.8 Гиб с разрешением 1920х816.
Никаких проблем с работой в системе пользователи не заметили на протяжении всего периода тестов.
Сводная таблица времени транскодирования:
Intel(R) Xeon(R) CPU E5620 @ 2.40GHz, DDR3 | Время транскодирования 816p | Время транскодирования 480p |
2 ядра и 4 Гиб памяти | 2 часа 45 минут | 1 час |
8 ядер и 8 Гиб памяти | 1 час 10 минут | 30 минут |
Вот такие параметры были в системе мониторинга Zabbix:
Самое приятное видеть как уменьшился размер видеофайла без потери качества. Вместо 7.8 Гиб стал 1.7 Гиб!
Раньше лежал у меня фильм и занимал места 7.8 Гиб и не важно в каком разрешении и на чем я его смотрел он качался всегда целиком. Теперь у меня два файл которые в сумме дают примерно 2.5 Гиб что почти в три раза меньше чем было. Смотрю на большом экране качается 1.7 Гиб, смотрю на мобильном телефоне качает 950 Миб. Можно транскадировать ещё в другие форматы и это все равно будет меньше чем был оригинал. Чудеса да и только 🙂
Предварительная подготовка
Написание статьи базировалось на официальной документации PeerTube в которой всё хорошо изложено и описано.
Установка Rocky Linux 8
Политика поддержки CentOS 8 поменялась и пока не могу однозначно сказать хорошо это или плохо, но лично у меня с ней стали возникать некоторые сложности. Хорошо что основатель CentOS взялся за разработку Rocky Linux которая будет развиваться в лучших традициях CentOS до момента перехода на Stream.
Подробно про установку и начальную настройку вы можете узнать в моей статье Rocky Linux 8 установка и настройка.
Подключение репозитория Epel
Подключаем и обновляем систему
dnf install epel-release dnf-utils dnf update
Установка yarn и nodejs
Устанавливаем Nodejs 14 версии
dnf module install -y nodejs:14
Проверка по команде (у нужного должно стоять E)
dnf module list nodejs
Устанавливаем Yarn
Рекомендуется устанавливать Yarn через менеджер пакетов npm, который поставляется в комплекте с Node.js когда вы устанавливаете его в своей системе.
npm install --global yarn === вывод команды === > yarn@1.22.11 preinstall /usr/local/lib/node_modules/yarn > :; (node ./preinstall.js > /dev/null 2>&1 || true) /usr/local/bin/yarn -> /usr/local/lib/node_modules/yarn/bin/yarn.js /usr/local/bin/yarnpkg -> /usr/local/lib/node_modules/yarn/bin/yarn.js + yarn@1.22.11 added 1 package in 2.811s which yarn === вывод команды === /usr/local/bin/yarn
Необходимо сделать символическую ссылку на запуск yarn, иначе будет ошибка при установке PeerTube
ln -s /usr/local/bin/yarn /usr/bin/yarn
Проверим установленные версии
yarn --version === вывод команды === 1.22.11 node -v === вывод команды === v14.17.3 npm --version === вывод команды === 6.14.13
Установка ffmpeg
Подключаем необходимый репозиторий и устанавливаем
dnf --enablerepo=powertools install -y SDL2 SDL2-devel dnf install -y --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-8.noarch.rpm dnf install -y ffmpeg dnf update -y
Проверяем установленную версию
ffmpeg -version
=== вывод команды ===
ffmpeg version 4.2.4 Copyright (c) 2000-2020 the FFmpeg developers
built with gcc 8 (GCC)
и тд. и тп.
Установка Python
Установим необходимую версию
dnf install python3
Проверим версию Python
python3 --version === вывод команды === Python 3.6.8
Создадим необходимую символическую ссылку для работы youtube-dl
ln -s /usr/bin/python3 /usr/bin/python
Установка PostgreSQL
Установим сервер базы данных с несколькими необходимыми пакетами
dnf install postgresql postgresql-server postgresql-contrib openssl gcc-c++ make wget redis git
Инициализируем базу данных PostgreSQL
sudo PGSETUP_INITDB_OPTIONS='--auth-host=md5' postgresql-setup --initdb --unit postgresql === вывод команды === * Initializing database in '/var/lib/pgsql/data' * Initialized, logs are in /var/lib/pgsql/initdb_postgresql.log
Включим в автозагрузку и запустим PostgreSQL и Redis
systemctl enable --now redis systemctl enable --now postgresql
Создание пользователя PeerTube
Создадим пользователя PeerTube с домашней папкой /var/www/peertube и создадим ему пароль
mkdir /var/www useradd -m -d /var/www/peertube -s /bin/bash -p peertube peertube passwd peertube
Если потребуется удалить пользователя вместе с домашней папкой то выполните команду
userdel -r peertube
Создание базы данных PeerTube
Заходим под пользователем postgres
root@video.sevo44.loc ~ # sudo -i -u postgres [postgres@video ~]$
Создаём базу данных и пользователя
createuser -P peertube createdb -O peertube -E UTF8 -T template0 peertube_prod
Включаем расширения, необходимые для работы PeerTube
psql -c "CREATE EXTENSION pg_trgm;" peertube_prod === вывод команды === CREATE EXTENSION psql -c "CREATE EXTENSION unaccent;" peertube_prod === вывод команды === CREATE EXTENSION
Поверяем правильность создания базы данных
psql postgres=# \l Список баз данных Имя | Владелец | Кодировка | LC_COLLATE | LC_CTYPE | Права доступа ---------------+----------+-----------+-------------+-------------+----------------------- peertube_prod | peertube | UTF8 | ru_RU.UTF-8 | ru_RU.UTF-8 | postgres | postgres | UTF8 | ru_RU.UTF-8 | ru_RU.UTF-8 | template0 | postgres | UTF8 | ru_RU.UTF-8 | ru_RU.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | ru_RU.UTF-8 | ru_RU.UTF-8 | =c/postgres + | | | | | postgres=CTc/postgres (4 строки)
Не спешим выходить из под пользователя postgres. Создадим пароль для главного администратора базы данных иначе в последствии при смене прав доступа к базе система будет просить внести пароль которого у нас нет.
\password
Выходим на пользователя root
postgres=# \q [postgres@video ~]$ exit выход root@video.sevo44.loc ~ #
Проверяем подключение к базе данных из под пользователя root
psql -U peertube -d peertube_prod === вывод команды === psql: ВАЖНО: пользователь "peertube" не прошёл проверку подлинности (Peer)
Подключение не прошло. Необходимо настроит права доступа к базам данных.
Выполняем настройку доступа к SQL-серверу, разрешив доступ только с localhost по паролю
vim /var/lib/pgsql/data/pg_hba.conf === необходимые изменения === # TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local all all password # IPv4 local connections: host all all 127.0.0.1/32 password # Настройка необходимая для обновления PeerTube используя скрипт обновления host all all ::1/128 password # IPv6 local connections: #host all all ::1/128 ident # Allow replication connections from localhost, by a user with the # replication privilege. #local replication all peer #host replication all 127.0.0.1/32 ident #host replication all ::1/128 ident
Перегружаем сервис и проверяем подключение к базе данных
systemctl restart postgresql psql -U peertube -d peertube_prod === вывод команды === Пароль пользователя peertube: ПАРОЛЬ psql (10.14) Введите "help", чтобы получить справку. peertube_prod=> \q ВЫХОДИМ root@video.sevo44.loc ~ #
Соединение по паролю прошло успешно.
Настройка FirewallD
Откроем необходимые порты для доступа к серверу, удалим ненужные и применим правила
firewall-cmd --permanent --zone=public --add-service=http firewall-cmd --permanent --zone=public --add-service=https firewall-cmd --permanent --zone=public --add-service=zabbix-agent firewall-cmd --permanent --zone=public --add-port=1935/tcp firewall-cmd --permanent --zone=public --remove-service=dhcpv6-client firewall-cmd --permanent --zone=public --remove-service=cockpit firewall-cmd --reload
Проверим параметры доступа
firewall-cmd --list-all --zone=public public (active) target: default icmp-block-inversion: no interfaces: ens18 sources: services: http https ssh zabbix-agent ports: 1935/tcp protocols: forward: no masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
Более подробно по работе с FirewaalD можно из статьи FirewallD базовая настройка.
Установка Peertube
Посмотрим какая будет установлена версия PeerTube
VERSION=$(curl -s https://api.github.com/repos/chocobozzz/peertube/releases/latest | grep tag_name | cut -d '"' -f 4) && echo "Latest Peertube version is $VERSION"
=== Вывод ===
Latest Peertube version is v3.4.0
Откроем домашний каталог пользователя peertube, создадим несколько необходимых каталогов и назначим необходимые права
cd /var/www/peertube sudo -u peertube mkdir config storage versions sudo -u peertube chmod 750 config/
Загрузим последнюю версию клиента Peertube, разархивируем ее и удалим архив zip
cd /var/www/peertube/versions sudo -u peertube wget -q "https://github.com/Chocobozzz/PeerTube/releases/download/${VERSION}/peertube-${VERSION}.zip" sudo -u peertube unzip peertube-${VERSION}.zip && sudo -u peertube rm peertube-${VERSION}.zip
Установим Peertube
cd /var/www/peertube sudo -u peertube ln -s versions/peertube-${VERSION} ./peertube-latest cd ./peertube-latest sudo -H -u peertube yarn install --production --pure-lockfile === вывод команды === yarn install v1.22.11 [1/5] Validating package.json... [2/5] Resolving packages... [3/5] Fetching packages... info fsevents@2.3.2: The platform "linux" is incompatible with this module. info "fsevents@2.3.2" is an optional dependency and failed compatibility check. Excluding it from installation. [4/5] Linking dependencies... warning " > @typescript-eslint/eslint-plugin@4.29.3" has unmet peer dependency "@typescript-eslint/parser@^4.0.0". warning " > marked-man@0.7.0" has incorrect peer dependency "marked@^0.7.0". warning "swagger-cli > @apidevtools/swagger-cli > @apidevtools/swagger-parser@10.0.3" has unmet peer dependency "openapi-types@>=7". [5/5] Building fresh packages... $ test -n "$NOCLIENT" || (cd client && yarn install --pure-lockfile) yarn install v1.22.11 [1/4] Resolving packages... [2/4] Fetching packages... info fsevents@2.3.2: The platform "linux" is incompatible with this module. info "fsevents@2.3.2" is an optional dependency and failed compatibility check. Excluding it from installation. info fsevents@1.2.13: The platform "linux" is incompatible with this module. info "fsevents@1.2.13" is an optional dependency and failed compatibility check. Excluding it from installation. [3/4] Linking dependencies... warning " > @ng-bootstrap/ng-bootstrap@10.0.0" has incorrect peer dependency "rxjs@^6.5.5". warning " > @ngx-i18nsupport/tooling@8.0.3" has incorrect peer dependency "@angular/common@^8.0.0". warning " > @ngx-i18nsupport/tooling@8.0.3" has incorrect peer dependency "@angular/core@^8.0.0". warning " > angular2-hotkeys@2.3.2" has incorrect peer dependency "rxjs@^5.5.0 || ^6.0.0". warning " > angularx-qrcode@11.0.0" has incorrect peer dependency "@angular/core@^11.0.6". warning " > bootstrap@4.6.0" has unmet peer dependency "jquery@1.9.1 - 3". warning " > bootstrap@4.6.0" has unmet peer dependency "popper.js@^1.16.1". warning " > linkifyjs@2.1.9" has unmet peer dependency "jquery@>= 1.11.0". warning " > linkifyjs@2.1.9" has unmet peer dependency "react@>= 0.14.0". warning " > linkifyjs@2.1.9" has unmet peer dependency "react-dom@>= 0.14.0". warning " > ngx-uploadx@4.1.3" has incorrect peer dependency "rxjs@^6.3.0". warning " > primeng@12.1.0" has incorrect peer dependency "rxjs@^6.0.0". [4/4] Building fresh packages... Done in 67.18s. Done in 169.82s.
В выводе пугают ошибки, но это не критично. Поискав информацию в интернете нашел ответ на данный вопрос на форуме разработчиков программы.
Вот перевод ответа: «Если вы имеете в виду все предупреждения Yarn, вы можете их игнорировать. Насколько я понимаю, это проблема Yarn, и она будет исправлена в следующей версии.»
Конфигурация PeerTube
Создаем файл конфигурации с шаблона
cd /var/www/peertube && sudo -u peertube cp peertube-latest/config/production.yaml.example config/production.yaml
Произведем настройку указав свои параметры
vim /var/www/peertube/config/production.yaml === необходимые блоки для настройки === # Correspond to your reverse proxy server_name/listen configuration webserver: https: true hostname: 'video.sevo44.ru' # sevo44 port: 443 # Your database name will be database.name OR "peertube"+database.suffix database: hostname: 'localhost' port: 5432 ssl: false suffix: '_prod' username: 'peertube' password: 'password' # sevo44 pool: max: 5 # SMTP server to send emails smtp: # smtp or sendmail transport: smtp # Path to sendmail command. Required if you use sendmail transport sendmail: null hostname: smtp.yandex.ru # sevo44 port: 465 # If you use StartTLS: 587 username: 'video@sevo44.ru' # sevo44 password: 'password' # sevo44 tls: true # If you use StartTLS: false disable_starttls: false ca_file: null # Used for self signed certificates from_address: 'video@sevo44.ru' # sevo44
В настройках мы указали доменное имя на котором будет работать ресурс, параметры для работы почты через сторонний smtp.
Остальные параметры можно не править, так как при работе будет создан файл /var/www/peertube/config/local-production.json в котором будут указаны все параметры которые делаются в панели администратора.
Настройка Nginx
Как правило все инструкции пишутся с учетом того что у вас на статическом внешнем ip адресе работает сервер только с этим ресурсом. На практике такое случается крайне редко и на одном IP может работать разное количество ресурсов работающих как веб север.
Приведу пример как производится проксирования сигнала до PeerTube средствами Nginx.
Ни в коем случае не пытайтесь настроить работу PeerTube на http так как будут глюки в работе как в отображении информации так и задержка при просмотре видео. Сервис заточен под работу на https и адаптировать его под работу http нет смысла. Проще добавить сертификат ssl. О том как это сделать узнаете ниже.
Более подробно про то как работать с Nginx вы можете из статьи NGINX установка и настройка.
Установка Nginx
Подключаем официальный стабильный репозиторий разработчиков Nginx и устанавливаем
vim /etc/yum.repos.d/nginx.repo === необходимый код === [nginx-stable] name=nginx stable repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true dnf install nginx
Сделаем копию и изменим главный файл настройки Nginx
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf_orig vim /etc/nginx/nginx.conf === необходимый код === # Пользователь и группа, от имени которых будет запущен процесс user peertube; # Число воркеров в новых версиях рекомендовано устанавливать параметр auto worker_processes auto; # Уровни лога debug, info, notice, warn, error, crit, alert или emerg # перечислены в порядке возрастания важности. При установке определённого уровня # в лог попадают все сообщения указанного уровня и уровней большей важности. # Например, при стандартном уровне error в лог попадают сообщения уровней error, crit, alert и emerg. # Если параметр не задан, используется error. error_log /var/log/nginx/error.log warn; # Файл в котором будет храниться идентификатор основного процесса pid /var/run/nginx.pid; events { # Максимальное количество соединений одного воркера worker_connections 1024; # Метод выбора соединений (для FreeBSD будет kqueue) use epoll; # Принимать максимально возможное количество соединений multi_accept on; } http { # Отключить вывод версии nginx в ответе server_tokens off; # Указываем файл с mime-типами и указываем тип данных по-умолчанию include /etc/nginx/mime.types; default_type application/octet-stream; # Формат для лога доступа и путь к файлу log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; # Метод отправки данных sendfile эффективнее чем read+write sendfile on; # Ограничивает объём данных, который может передан за один вызов sendfile(). # Нужно для исключения ситуации когда одно соединение может целиком захватить воркер sendfile_max_chunk 128k; # Отправлять заголовки и начало файла в одном пакете tcp_nopush on; tcp_nodelay on; # Параметр задаёт тайм аут, в течение которого keep-alive соединение с клиентом не будет закрыто со стороны сервера keepalive_timeout 65; # Сбрасывать соединение если клиент перестал читать ответ reset_timedout_connection on; # Разрывать соединение по истечению тайм аута при получении заголовка и тела запроса client_header_timeout 3; client_body_timeout 5; # Разрывать соединение, если клиент не отвечает в течение 3 секунд send_timeout 3; # Задание буфера для заголовка и тела запроса client_header_buffer_size 2k; client_body_buffer_size 256k; # Ограничение на размер тела запроса client_max_body_size 8G; # Подключение дополнительных конфигов include /etc/nginx/conf.d/*.conf; }
Мы специально указали пользователя peertube так как сервер создан для работы одного ресурса.
Добавим в автозагрузку и запустим сервис Nginx
systemctl enable --now nginx
Производители рекомендуют выполнить оптимизацию и мы не будем игнорировать этим советом
cp /var/www/peertube/peertube-latest/support/sysctl.d/30-peertube-tcp.conf /etc/sysctl.d/ sysctl -p /etc/sysctl.d/30-peertube-tcp.conf
Скопируем шаблон конфигурации Systemd
cp /var/www/peertube/peertube-latest/support/systemd/peertube.service /etc/systemd/system/
Посмотреть с какими настройками создалась служба можно выполнив команду
cat /etc/systemd/system/peertube.service === Вывод команды === [Unit] Description=PeerTube daemon After=network.target postgresql.service redis-server.service [Service] Type=simple Environment=NODE_ENV=production Environment=NODE_CONFIG_DIR=/var/www/peertube/config User=peertube Group=peertube ExecStart=/usr/bin/npm start WorkingDirectory=/var/www/peertube/peertube-latest StandardOutput=syslog StandardError=syslog SyslogIdentifier=peertube Restart=always ; Some security directives. ; Mount /usr, /boot, and /etc as read-only for processes invoked by this service. ProtectSystem=full ; Sets up a new /dev mount for the process and only adds API pseudo devices ; like /dev/null, /dev/zero or /dev/random but not physical devices. Disabled ; by default because it may not work on devices like the Raspberry Pi. PrivateDevices=false ; Ensures that the service process and all its children can never gain new ; privileges through execve(). NoNewPrivileges=true ; This makes /home, /root, and /run/user inaccessible and empty for processes invoked ; by this unit. Make sure that you do not depend on data inside these folders. ProtectHome=true ; Drops the sys admin capability from the daemon. CapabilityBoundingSet=~CAP_SYS_ADMIN [Install] WantedBy=multi-user.target
Скажем Systemd перезагрузить его конфигурацию
systemctl daemon-reload
Добавим в автозагрузку и запустим
systemctl enable --now peertube
Смотрим что происходит
journalctl -feu peertube === вывод команды ===
Вывод должен быть примерно такой
systemd[1]: Started PeerTube daemon. peertube[8873]: > peertube@3.4.0 start /var/www/peertube/versions/peertube-v3.4.0 peertube[8873]: > node dist/server peertube[8873]: [video.sevo44.ru:443] 2020-12-29 01:09:10.426 info: Database peertube_prod is ready. peertube[8873]: [video.sevo44.ru:443] 2020-12-29 01:09:22.405 info: Creating application account. peertube[8873]: [video.sevo44.ru:443] 2020-12-29 01:09:22.418 info: Creating a default OAuth Client. peertube[8873]: [video.sevo44.ru:443] 2020-12-29 01:09:22.424 info: Creating the administrator. peertube[8873]: [video.sevo44.ru:443] 2020-12-29 01:09:22.471 info: Client id: mt3lxarek0no3oq36b7udsegwhv10gc4 peertube[8873]: [video.sevo44.ru:443] 2020-12-29 01:09:22.471 info: Client secret: 14zuSP6aeMjhJ8AnLLfStkTeJD4l6mlD peertube[8873]: [video.sevo44.ru:443] 2020-12-29 01:09:22.520 info: Generating a RSA key... peertube[8873]: [video.sevo44.ru:443] 2020-12-29 01:09:22.670 info: Generating a RSA key... peertube[8873]: [video.sevo44.ru:443] 2020-12-29 01:09:22.671 info: Generating a RSA key... peertube[8873]: [video.sevo44.ru:443] 2020-12-29 01:09:23.261 info: Username: root peertube[8873]: [video.sevo44.ru:443] 2020-12-29 01:09:23.261 info: User password: xelurocikokuyave peertube[8873]: [video.sevo44.ru:443] 2020-12-29 01:09:23.264 info: Using smtp.yandex.ru:465 as SMTP server. peertube[8873]: [video.sevo44.ru:443] 2020-12-29 01:09:23.268 info: Testing SMTP server... peertube[8873]: [video.sevo44.ru:443] 2020-12-29 01:09:23.478 info: Secure connection established to 77.88.21.158:465 { peertube[8873]: "component": "smtp-connection", peertube[8873]: "sid": "yKg9R1Vvcx0", peertube[8873]: "tnx": "network", peertube[8873]: "localAddress": "192.168.0.116", peertube[8873]: "localPort": 42528, peertube[8873]: "remoteAddress": "77.88.21.158", peertube[8873]: "remotePort": 465 peertube[8873]: } peertube[8873]: [video.sevo44.ru:443] 2020-12-29 01:09:23.602 info: User "video@sevo44.ru" authenticated { peertube[8873]: "component": "smtp-connection", peertube[8873]: "sid": "yKg9R1Vvcx0", peertube[8873]: "tnx": "smtp", peertube[8873]: "username": "video@sevo44.ru", peertube[8873]: "action": "authenticated", peertube[8873]: "method": "PLAIN" peertube[8873]: } peertube[8873]: [video.sevo44.ru:443] 2020-12-29 01:09:23.603 info: Successfully connected to SMTP server. peertube[8873]: [video.sevo44.ru:443] 2020-12-29 01:09:23.621 info: Cleaning HTML cache. peertube[8873]: [video.sevo44.ru:443] 2020-12-29 01:09:23.627 info: Connection closed { peertube[8873]: "component": "smtp-connection", peertube[8873]: "sid": "yKg9R1Vvcx0", peertube[8873]: "tnx": "network" peertube[8873]: } peertube[8873]: [video.sevo44.ru:443] 2020-12-29 01:09:23.637 info: Server listening on localhost:9000 peertube[8873]: [video.sevo44.ru:443] 2020-12-29 01:09:23.638 info: Web server: https://video.sevo44.ru
В выводе кода вы видите пароль от администратора сервиса! User password: xelurocikokuyave и больше его вывод никогда не покажет. Запишите его или потом сможете создать другой.
В выводе всё хорошо расписано и в случае ошибок сможете увидеть подсказки что не так настроено.
Настройка PeerTube
Настроек множество и описывать все не имеет смысла. Покажу те моменты на которые имеет смысл обратить особое внимание.
Настоятельно рекомендую для безопасности оставить главным администратором только пользователя root. Все главные параметры нет смысла менять часто а для обычного администрирования роли «Модератор» вполне достаточно.
Выбираем варианты как можно загружать видеофайлы. Импорт с URL-адреса или торрент-файла очень удобен и отключать такую возможность не надо.
К настройке транскодирования отнеситесь очень внимательно, так как от этого будет зависеть как скорость работы ресурса так и объем занятого пространства видеофайлами.
В моем случае выбраны разрешения для транскодирования 480p и 1080p мне этого хватает. В случае если происходит загрузка видеофайла разрешением менее 480р транскодирования производится не будет и в системе будет только этот видеофайла. При загрузке видеофайла разрешением больше 1080р будет произведено транскодирование в форматы 480p и 1080р.
Чем больше форматов тем системе легче работать, но платить за это приходится размером дисков для видеофалов.
Главный параметр PeerTube
Спустя какое то время я стал замечать что объем хранилища видео стал сильно увеличиваться когда я стал более активно добавлять видео. Как влияет на объём выбор вариантов разрешения все понятно а вот с выбором формата я сразу не разобрался и включал оба параметра.
Теперь мои параметры выглядят так:
При выводе информации понятно почему этот вариант гораздо предпочтительней.
Более подробно про параметры формата вывода можно прочитать в документации разработчика.
Расскажу что происходит на сервере когда включено оба параметра:
- После обработки видеофайл попадает в папку /var/www/peertube/storage/videos и имеет столько вариантов сколько вариантов разрешения вы выбрали;
- Потом видеофайлы попадают в папку /var/www/peertube/storage/streaming-playlists/hls и для каждого видео создаётся своя папка в которой помимо самих видеофайлов присутствуют технические файлы для работы с этой технологией.
Вот откуда идет двойное увеличение хранилища. В случае когда параметр «WebTorrent» выключен файлы всё равно во время транскодирования попадают в папку videos, но лишь временно на момент обработки файла. После окончания обработки файлы в папке videos удаляются.
Если после отключения параметра «WebTorrent» зайти и просто удалить файлы в папке videos то вы не сможете скачать видео которое было загружено с включением обоих параметров.
Обзор PeerTube
Особо расписывать нет смысла как работать в системе по причине понятного и дружественного интерфейса. Добавляйте пользователей создавайте каналы, закачивайте видео, подписывайтесь и получайте удовольствие от того что все ваше видео теперь находится в одном месте.
На фотках ниже вы увидите как система выглядит у меня.
Обновление PeerTube
В случае проблем в работе с некоторыми функциями PeerTube обновляйте если вышла новая версия.
Например, в какой то момент у меня перестала работать загрузка видео по адресу. После обновления все заработало.
Для обновления достаточно запустить скрипт который всё сделает автоматически.
Останавливаем сервис, переходим в нужное место и запускаем скрипт обновления
systemctl stop peertube cd /var/www/peertube/peertube-latest/scripts sudo -H -u peertube ./upgrade.sh
В конце выдаст информацию об изменениях сделанных в файле конфигурации по отношению к базовому.
В папке /var/www/peertube/config находится 3 файла:
- default.yaml — базовая конфигурация. Обновляется после каждого обновления и имеет все настройки для новой версии;
- local-production.json — настройки которые делаются в панели администратора и не меняются при обновлении версии;
- production.yaml — настройки действующей версии.
Создадим копию файла из настроек что действуют на данный момент:
cp /var/www/peertube/config/production.yaml /var/www/peertube/config/production.yaml_old
Обновим из базовой новой конфигурации файл с настройками:
cp /var/www/peertube/config/default.yaml /var/www/peertube/config/production.yaml
= при вопросе пишем yes =
Обычно надо внести необходимые правки в следующих блоках:
# Correspond to your reverse proxy server_name/listen configuration (i.e., your public PeerTube instance URL) webserver: https: true hostname: 'video.sevo44.ru' port: 443 # Your database name will be database.name OR 'peertube'+database.suffix database: hostname: 'localhost' port: 5432 ssl: false suffix: '_prod' username: 'peertube' password: 'Sdthdfhdfhhf' pool: max: 5 # SMTP server to send emails smtp: # smtp or sendmail transport: smtp # Path to sendmail command. Required if you use sendmail transport sendmail: null hostname: smtp.yandex.ru port: 465 # If you use StartTLS: 587 username: 'video@sevo44.ru' password: 'tzZqAeu656ddsdfg2s6' tls: true # If you use StartTLS: false disable_starttls: false ca_file: null # Used for self signed certificates from_address: 'video@sevo44.ru' # From the project root directory storage: tmp: '/var/www/peertube/storage/tmp/' # Use to download data (imports etc), store uploaded files before and during processing... bin: '/var/www/peertube/storage/bin/' avatars: '/var/www/peertube/storage/avatars/' videos: '/var/www/peertube/storage/videos/' streaming_playlists: '/var/www/peertube/storage/streaming-playlists/' redundancy: '/var/www/peertube/storage/redundancy/' logs: '/var/www/peertube/storage/logs/' previews: '/var/www/peertube/storage/previews/' thumbnails: '/var/www/peertube/storage/thumbnails/' torrents: '/var/www/peertube/storage/torrents/' captions: '/var/www/peertube/storage/captions/' cache: '/var/www/peertube/storage/cache/' plugins: '/var/www/peertube/storage/plugins/' # Overridable client files in client/dist/assets/images: # - logo.svg # - favicon.png # - default-playlist.jpg # - default-avatar-account.png # - default-avatar-video-channel.png # - and icons/*.png (PWA) # Could contain for example assets/images/favicon.png # If the file exists, peertube will serve it # If not, peertube will fallback to the default file client_overrides: '/var/www/peertube/storage/client-overrides/'
Запускаем и смотрим информацию о сервисе
systemctl start peertube journalctl -feu peertube
Без проблем прошли обновления 2.4.0 -> 3.0.0 -> 3.1.0 -> 3.2.1 -> 3.3.0 -> 3.4.0 -> 4.0.0 -> 4.1.0 -> 4.1.1
Переезд PeerTube
На новом сервере устанавливаем последнюю версию и переносим необходимые данные.
Обновлять версию на сервере с которого переезжаем нет необходимости. После переезда запускается скрипт обновления и всё обновится до необходимой версии.
При переносе на другой сервер нам необходимо перенести следующие данные:
- Каталог /var/www/peertube/storage, в котором содержатся видео, миниатюры, предварительные просмотры и так далее,
- Файл /var/www/peertube/config, содержащий конфигурацию,
- База данных PostgreSQL (с использованием pg_dump).
Перед переездом останавливаем сервис на новом ресурсе
systemctl stop peertube
Копирование storage/ файлов
На сервере с которого переезжаем необходимо выполнить команду
# 1 вариант sudo -u peertube rsync -avz /var/www/peertube/storage/ peertube@192.168.0.114:~/storage/ # 2 вариант sudo -u peertube rsync -avz -e 'ssh -p 2222' /var/www/peertube/storage/ peertube@192.168.0.114:~/storage/
Вам нужно будет повторно запустить эту команду, если какие-либо файлы на старом сервере изменятся. Вот почему лучше использовать rsync.
Копирование конфигурации
Можно перенести файл а можно сделать необходимые правки на основе действующей конфигурации на старом сервере находящиеся в файле
cat /var/www/peertube/config/production.yaml
Копирование базы данных
На старом сервере делаем резервную копию базы данных и передаем на новый сервер
# 1 вариант sudo -u peertube pg_dump -Fc peertube_prod > /tmp/peertube_prod-dump.db # 2 вариант sudo -i -u postgres postgres@video:~$ pg_dump -Fc peertube_prod > /tmp/peertube_prod-dump.db postgres@video:~$ exit scp -P 2222 /tmp/peertube_prod-dump.db root@192.168.0.114:/tmp
На новом сервере разворачиваем базу данных
sudo -u postgres pg_restore -c -C -d postgres /tmp/peertube_prod-dump.db
Запуск после переноса PeerTube
Переходим в нужное место и запускаем скрипт обновления
cd /var/www/peertube/peertube-latest/scripts sudo -H -u peertube ./upgrade.sh
После выполнения команды запускаем сервис и смотрим что происходит
systemctl start peertube journalctl -feu peertube
При переносе для того чтобы не потерять данные которые появились во время переноса так же необходимо остановить сервис PeerTube.
Именинно поэтому я рекомендую вначале сделать тестовый переезд. Если все прошло хорошо останавливаем сервис с которого переезжаем, синхронизируем папку с данными, переносим заново базу данных и запускаем сервис после выполнения скрипта обновления.
Смена доменного имени PeerTube
При желании можно сменить доменное имя. После того как внесете правки в файл настройки PeerTube и поправите настройки Nginx необходимо выполнить следующие команды
cd /var/www/peertube/peertube-latest && su peertube [peertube@video peertube-latest]$ NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run update-host === вывод команды === > peertube@2.4.0 update-host /var/www/peertube/versions/peertube-v2.4.0 > node ./dist/scripts/update-host.js Updating actors. Updating actor http://video.sevo44.ru/video-channels/root_channel Updating actor http://video.sevo44.ru/video-channels/sevo44_all Updating actor http://video.sevo44.ru/accounts/root Updating actor http://video.sevo44.ru/accounts/sevo44 Updating actor http://video.sevo44.ru/accounts/peertube Updating video shares. Updating video share http://video.sevo44.ru/videos/watch/9c178338-fa10-47b0-b2d1-f41af08179cc/announces/5 Updating video share http://video.sevo44.ru/videos/watch/9c178338-fa10-47b0-b2d1-f41af08179cc/announces/1 Updating video share http://video.sevo44.ru/videos/watch/c8dfa17f-ad7a-478a-83d0-6c53767f778a/announces/5 Updating video share http://video.sevo44.ru/videos/watch/c8dfa17f-ad7a-478a-83d0-6c53767f778a/announces/1 Updating video share http://video.sevo44.ru/videos/watch/2ef17574-dbc8-4111-936c-773c755141db/announces/5 Updating video share http://video.sevo44.ru/videos/watch/2ef17574-dbc8-4111-936c-773c755141db/announces/1 Updating video share http://video.sevo44.ru/videos/watch/753df8df-5bae-4bef-8d3c-5bb688a8c0fb/announces/5 Updating video share http://video.sevo44.ru/videos/watch/753df8df-5bae-4bef-8d3c-5bb688a8c0fb/announces/1 Updating video comments. Updating video and torrent files. Updating video 9c178338-fa10-47b0-b2d1-f41af08179cc Updating torrent file 720 of video 9c178338-fa10-47b0-b2d1-f41af08179cc. [video.sevo44.ru:443] 2020-12-28 00:35:39.659 info: Creating torrent /var/www/peertube/storage/torrents/9c178338-fa10-47b0-b2d1-f41af08179cc-720.torrent. Updating video c8dfa17f-ad7a-478a-83d0-6c53767f778a Updating torrent file 720 of video c8dfa17f-ad7a-478a-83d0-6c53767f778a. [video.sevo44.ru:443] 2020-12-28 00:35:42.519 info: Creating torrent /var/www/peertube/storage/torrents/c8dfa17f-ad7a-478a-83d0-6c53767f778a-720.torrent. Updating video 2ef17574-dbc8-4111-936c-773c755141db Updating torrent file 720 of video 2ef17574-dbc8-4111-936c-773c755141db. [video.sevo44.ru:443] 2020-12-28 00:35:45.303 info: Creating torrent /var/www/peertube/storage/torrents/2ef17574-dbc8-4111-936c-773c755141db-720.torrent. Updating video 753df8df-5bae-4bef-8d3c-5bb688a8c0fb Updating torrent file 304 of video 753df8df-5bae-4bef-8d3c-5bb688a8c0fb. [video.sevo44.ru:443] 2020-12-28 00:35:51.759 info: Creating torrent /var/www/peertube/storage/torrents/753df8df-5bae-4bef-8d3c-5bb688a8c0fb-304.torrent. [peertube@video peertube-latest]$
После успешного выполнения перезагрузите Nginx и PeerTube
nginx -s reload systemctl start peertube
Смена пароля администратора PeerTube
Пароль администратора генерируется автоматически, его можно найти в журналах. Вы можете установить другой пароль с помощью следующей команды
cd /var/www/peertube/peertube-latest && NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run reset-password -- -u root
Заключение
Долго лежала эта статья в черновиках и только после того как я все проверил и произвел несколько обновлений совесть позволила мне опубликовать статью.
Однозначно делайте резервную копию системы перед обновлением и тогда вам не страшны любые сюрпризы при обновлениях.
К сожалению обновление системы необходимо если вы хотите пользоваться всеми прелестями системы. В случае если вы планируйте производить простой вариант загрузки файлов и не использовать сеть P2P систему можно не обновлять.
За время использования много раз слышал спасибо от родни за то что теперь они могут без проблем смотреть семейное видео и делится им.
Больше всего ушло на то чтобы вытащить со всех щелей семейное видео и загрузит в одно место.
Добрый день, вышел релиз 5й версии, не обновлялись ещё?
https://github.com/Chocobozzz/PeerTube/tags
Обновил. Полёт нормальный.
На этапе установки peertube
выходит сообщение
Скорей всего пропустили в статье вот это:
Необходимо сделать символическую ссылку на запуск yarn, иначе будет ошибка при установке PeerTube
Ошибка запуска
Что делать?
Выполните:
И дайте полный вывод команды.
Проверяйте файлы конфигурации. Вначале надо убрать вот эту ошибку.
Одну убрал, теперь не могу понять, что он ругается на разметку ямл, первая строчка в конфиг файле у меня такая:
listen: hostname: ‘localhost’ port: 9000
Ругается на двоеточие или на пробел?
На порт ругается?
Заново создал файл конфигурации, запустился СПАСИБО
А теперь следующие, nginx белая страница, проксирующего nginx нет. просмотрен настройки, вроде нигде не накосячил
502 Bad Gateway
Смотрите логи nginx.
попробовал сделать с 0
Что с 0 ? Логи nginx смотреть надо.
c самого начала начал делать по инструкции,
ошибка запуска
Файл логов nginx пустой
ругается на node, как быть?
Или на другую систему ставите или не полностью выполняете всё что в статье написано.
СПАСИБО за инструкцию!
проблема была не nginx, проблема в selinux
Вообщем тестили сервер под прямой эфир, было 350 одновременных зрителей, ширина канала 400мб/с был забит на все 100%. По статистике в плеере, примерно 20%трафика идет с сервера, 80% от пиров, есть возможность как то увеличить трафик от пиров, чтоб было до 100%.
И еще вопрос, vps больше 400мб/с не дает, но есть возможность добавлять дополнительны ip адреса с такой же пропускной способностью. Например будет 3 ip c суммарным каналом 1.2 Гб/с. Как будет вести себя peertube если DNS будет давать пользователям рандомный ip из этих трех. Нагрузка разделится? Наша цель 3500 зрителей, как правильно реализовать. (пушим по RTMP 720p 4000kbps, без транскодирования на другие расширения)
Не думаю что можно всю нагрузку передать на пиры, но 80% уже здорово. Попробуйте задать вопрос на их портале думаю они скажут возможно такое или нет.
По моей статье настраивали?
Да
Здравствуйте Сергей, как дела сейчас обстоят, можно подробности этого теста, именно по железу, смогли вы настроить балансировщик нагрузки?
Вы имели ввиду скорость 400мбайт или мбит?
Latency ставили на 60 секунд?
Лаги начались после 350 одновременных просмотров?
Сам хочу запустить лайв но не решаюсь, так как не знаю пропорции.
Канала в 1 Gбит хватает на 5-6 тысяч подключений (1080p). Мощность в районе 6 ядер по 2.5 G и памяти 18 DDR-3.
При стриме ресурсы жрет только конвертация которая выставляется в админке.
Спасибо, конвертация не важна, задумка поставить стрим на дефолтный 720р, единственное, что, так это в конце нужна запись стрима, по выданным вами данными, это огромная экономия, по таким характеристикам VPS можно брать на день(110₽), после стрима сохранить бэкап системы, чтобы в следующий раз не морочиться с настройкой системы.
А в вашем случае была включена конвертация в другие разрешения, и ресурсы использовались взахлеб?
Я пробовал без конвертации (в старой версии) и там была разница в форматах записанных стримов. С записью в новых версиях тоже все улучшили. Можно создать одну ссылку на постоянный стрим. Например, у меня одна ссылка на стрим её я редактирую меняя описание, картинку и тд. Когда стрим заканчивается у меня появляется запись с другой ссылкой.
У меня включена конвертация в 720p 360p 144p я не скажу что система работала в захлёб…. Там какой-то хитрый механизм и система не падает от перегрузки…
Система очень хорошо обновляется и в новых версиях все лучше и лучше всё.
Понятно, по-вашему, приблизительно, какие характеристики железа нужны, скажем, для 10 тысяч подключений?
Знаю, вопросов много было, но это последний по этой тематике.
Нужен канал 10 Гигабит. К сожалению на одном из серверов такой канал подключили, но проверить под нагрузкой не вышло по причине того что проект помер. 5-7 тысяч держало на старой версии. В новой версии сделали настройки для трансляций и возможно с одной из настроек будет держать и больше 10 тысяч.
Сделал сертификат ssl на site.com и http://www.site.com но теперь авторизация не работает на http://www.site.com, пробовал по разному добавить в конфиг peertube дополнительно http://www.site.com но не выходит. Подскажите, как исправить
Где и как делали сертификаты? В какие конфиги и что именно добавляете?
по вашей инструкции
https://sevo44.ru/ssl-besplatnyj-dlja-sajta-nginx/
вот в этот конфиг
————————————————————————————-
vim /var/www/peertube/config/production.yaml
=== необходимые блоки для настройки ===
# Correspond to your reverse proxy server_name/listen configuration
webserver:
https: true
hostname: ‘video.sevo44.ru’ # sevo44 —- сюда добавлял хост с www
port: 443
Через прокси сервер или напрямую? В конфиге что показали прописывается так а все что с сертификатом надо в другое место писать. Необходимо в файле конфигурации nginx добавлять сертификат.
Напрямую
Если я зохочу установить внешний накопитель, то как указать чтоб все видео файлы сохранялись там?
Монтируйте накопитель по пути /var/www/peertube/storage/. Пере тем как монтировать останавливайте сервис и временно все что есть в этой папке копируйте во временное место После того как смонтируйте возвращаете их назад. Не забываем смотреть права и разрешения на папки перед перестроением.
Вам спасибо за опыт, статью и обратную связь! Я знал, что подобные сервисы ресурсы любят, особенно cpu и озу, поэтому когда прочитал статью и не увидел системных требований — посчитал статью не полной. Теперь всё отлично — с графиками даже больше информации, чем я ожидал 🙂
Добавил еще один важный момент «Главный параметр PeerTube». Теперь статья точно полная.
Очень интересная штука. Надо будет попробовать.
Здравствуйте.
Есть вопрос по системным требованиям для VPS/VDS под данный сервис. С HDD понятно, что чем больше, тем лучше. А остальное? Что скажите в общих чертах — про кол-во ядер, память и т.д. Лучше ставить на голое железо или подойдёт VM?
Спасибо!
В моем случае работает на VM с процессором 8 ядер Intel(R) Xeon(R) CPU E5620 @ 2.40GHz и 8 G оперативки DDR3. Количество ядер напрямую влияют на скорость транскодирования. Вначале выделял 2 ядра и 4G памяти система нормально работала в режиме просмотра, но вот транскадирование происходило долго. Причем я не могу сказать что при транскодировании были тормоза в режиме просмотра. Сейчас специально попробую загрузить файл с разными параметрами и скажу что вышло по времени.
Статью дополнил разделом «Системные требования». Спасибо за комментарий Timofey 🙂