Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents

Развертывание тестового стенда на docker машине с нуля

Для развертывания тестового стенда на docker машине необходимо

1. Распаковать архив сборки

Code Block
languagebash
themeRDark
tar -xzf WCSTestStand-1.XXX.tar.gz

2. Настроить общую конфигурацию стенда в файле stand.conf/wcs-stand.conf

  • docker сеть
  • состав узлов тестовой CDN (либо оставить только один узел, если планируется тестирование отдельного сервера)
Warning
Настройки из коробки должны использоваться только в качестве примера

3. Настроить конфигурацию узлов стенда в каталогах stand.conf/node_name

  • указать ссылки на скачивание сборок WCS для каждого узла (на разных узлах могут тестироваться разные сборки)
  • указать номер лицензии для каждого WCS
  • указать IP адрес каждого узла
  • настроить каждый WCS узел
  • если используется узел ffmpeg для публикации потоков на WCS, указать каталог с медиа файлами для публикации
Warning
Настройки из коробки должны использоваться только в качестве примера

4. Собрать docker-образы

Code Block
languagebash
themeRDark
cd images
chmod +x build.sh
sudo ./build.sh
cd ..

5. Запустить стенд

Code Block
languagebash
themeRDark
sudo ./wcs-stand start all

Настройка общей конфигурации стенда

Конфигурация стенда описывается в файле stand.conf/wcs-stand.conf, как набор переменных окружения для скрипта развертывания стенда:

Code Block
languagebash
themeRDark
CONTAINER_PREFIX=wcs-test-stand
IMAGE_PREFIX=wcs_test_stand
DOCKER_NETWORK=bridge

CDN_NODES=o-test1,o-test2,e-test1,e-test2,e-test3,e-test4,t-test1,t-test2
CDN_ENTRY_POINT=o-test1
FFMPEG_NODE=ffmpeg

WCS_PATH=/usr/local/FlashphonerWebCallServer

Здесь

  • CONTAINER_PREFIX - префикс имени контейнера

  • IMAGE_PREFIX - префикс docker-образа

  • DOCKER_NETWORK - docker-сеть (используется при явном назначении IP адресов узлам)

  • CDN_NODES - имена узлов тестовой CDN

  • CDN_ENTRY_POINT - имя узла, который будет точкой входа в CDN

  • FFMPEG_NODE - имя узла для публикации RTMP потоков на Origin узлы при помощи ffmpeg
  • WCS_PATH - путь установки WCS

Настройка Docker сети

Если предполагается явное назначение IP адреса в настройках каждого узла, необходимо указать отдельную docker-сеть в конфигурации стенда

Code Block
languagebash
themeRDark
DOCKER_NETWORK=stand
DOCKER_SUBNET=172.16.11.1/24
DOCKER_GATEWAY=172.16.11.1
DOCKER_HOST_IFACE=iface

Здесь

  • DOCKER_NETWORK - docker-сеть

  • DOCKER_SUBNET - IP-подсеть, выделяемая docker-сети

  • DOCKER_GATEWAY - шлюз docker-сети

  • DOCKER_HOST_IFACE - имя внешнего интерфейса docker-ВМ

Затем эту сеть необходимо создать при помощи скрипта stand-network

Code Block
languagebash
themeRDark
sudo ./stand-network start

При этом интерфейс docker-сети будет назначен автоматически как br-$DOCKER_NETWORK, например br-stand. Правила перенаправления пакетов будут автоматически добавлены в iptables:

Code Block
languagebash
themeRDark
iptables -A FORWARD -i br-$DOCKER_NETWORK -o $DOCKER_HOST_IFACE -j ACCEPT
iptables -A FORWARD -i $DOCKER_HOST_IFACE -o br-$DOCKER_NETWORK -j ACCEPT

Настройка узла

Файл настроек узла node.conf располагается в каталоге stand.conf, в подкаталоге с именем узла. Так же, как и для стенда в целом, настройки описываются набором переменных окружения, в зависимости от типа узла. Кроме того, в каталоге могут лежать дополнительные файлы, который копируются в контейнер узла. Во всех файлах настроек обязательными являются два параметра

  • NODE_IP - IP дарес узла или пустая строка, если IP адрес должен быть назначен динамически

  • NODE_PORTS - порты узла, доступные с docker-хоста и внешних сетей

Также может быть указан параметр

  • CHECK_PORT - TCP-порт для проверки доступности узла

Настройка узла WCS

Файл настроек node.conf

Code Block
languagebash
themeRDark
NODE_IP=""
NODE_PORTS=22,554,1935,8080-8084,8443-8445,8888,9091,30000-33000/tcp,30000-33000/udp
JAVA_VERSION=8
JAVA_GC=CMS
JAVA_HEAP=2g
WCS_LICENSE="Put-your-license-key-here"
CDN_ROLE=origin
PRODUCT_LINK="https://flashphoner.com/downloads/builds/WCS/5.2/FlashphonerWebCallServer-5.2.XXX.tar.gz"
PRODUCT_ACCESS_LOGIN=staff
PRODUCT_ACCESS_PASSWORD=X5RLgmrTiK25

Здесь

  • JAVA_VERSION - версия JVM (8 или 12)

  • JAVA_GC - используемый сборщик мусора (CMS или ZGC)

  • JAVA_HEAP - размер Java heap в Gb

  • WCS_LICENSE - лицензия для активации WCS
  • CDN_ROLE - роль узла в CDN

  • PRODUCT_LINK - ссылка для скачивания архива сборки WCS
  • PRODUCT_ACCESS_LOGIN - логин для скачивания Enterprise-сборки (для клиентов с Enterprise лицензией)
  • PRODUCT_ACCESS_PASSWORD - пароль для скачивания Enterprise-сборки (для клиентов с Enterprise лицензией)

Кроме того, в каталоге могут располагаться:

  • файл flashphoner.properties

  • файл wcs-core.properties

  • файл log4j.properties

  • файлы *.sdp

  • файл cdn_profiles.yml

Эти файлы копируются в контейнер "как есть", никакие изменения в них не вносятся, в том числе не меняются настройка IP адресов и параметры JVM. В этом случае IP адрес узла должен быть явно задан в node.conf

Роль узла в CDN отпределяется либо из настройки, либо из имени узла:

  • o-* - Origin

  • t-* - Transcoder

  • e-* - Edge

Роль узла в CDN может быть также явно задана в файле flashphoner.properties, который копируется в контейнер

Настройка узла для публикации RTMP-потоков на Origin серверы CDN

Файл настроек node.conf

Code Block
languagebash
themeRDark
NODE_IP=""
NODE_PORTS=22
MEDIA_MOUNT=/home/media

Здесь

  • MEDIA_MOUNT - каталог на docker-сервере, монтируемый в контейнер

При запуске узла в контейнер монтируется каталог, который должен содержать файлы *.mp4 для публикации

Кроме того, в каталоге могут располагаться:

  • файлы *.mp4 - копируются в каталог, заданный в MEDIA_MOUNT

  • файлы *.sh - копируются в каталог, заданный в MEDIA_MOUNT

Публикация RTMP потоков на Origin серверы

Если в каталоге, заданном в MEDIA_MOUNT, находятся скрипты публикации *.sh, они выполняются для каждого из Origin узлов, при условии, что роли узлов заданы в настройках или при помощи именования. В этом случае скрипт получает параметром IP адрес узла.

Если роли узлов заданы в файлах flashphoner.properties, копируемых в контейнер, скрипты публикации выполняются без передачи IP адреса узла, в этом случае IP адреса узлов для публикации должны быть явно определены в скрипте.

Если в каталоге, заданном в MEDIA_MOUNT, находятся медиа файлы *.mp4, и при этом не содержатся скрипты публикации, каждый из файлов публикуется на каждый Origin узел, при условии, что роли узлов заданы в настройках или при помощи именования.

Команды управления стендом

Запуск стенда

Для запуска стенда целиком необходимо выполнить команду

Code Block
languagebash
themeRDark
sudo ./wcs-stand start all

При необходимости, стенд может быть запущен частично. Например, для запуска только CDN, необходимо выполнить команду

Code Block
languagebash
themeRDark
sudo ./wcs-stand start cdn

Можно также перечислить имена узлов для запуска

Code Block
languagebash
themeRDark
sudo ./wcs-stand start o-test1 e-test1

Запуск только CDN с публикацией

Code Block
languagebash
themeRDark
sudo ./wcs-stand start cdn ffmpeg

Остановка стенда

Для остановки стенда, запущенного целиком или частично, необходимо выполнить команду

Code Block
languagebash
themeRDark
sudo ./wcs-stand stop all

Если были запущены только определенные узлы, их также можно остановить

Code Block
languagebash
themeRDark
sudo ./wcs-stand stop e-test1

Логирование

Лог скрипта запуска и остановки стенда записывается в файл wcs-stand.log. При необходимости, уровень логирования может быть повышен с помощью ключа -v:

Code Block
languagebash
themeRDark
sudo ./wcs-stand -v start all

Доступ внутрь контейнеров стенда

Контейнеры стенда доступны извне по SSH (порт 22). Приватный и публичный ключи доступа должны располагаться в каталоге ssh, в этом случае публичный ключ будет скопирован в контейнер при его запуске:

Code Block
themeRDark
ssh
 |--id_rsa
 |--id_rsa.pub

Таким образом, для доступа к контейнеру необходимо выполнить команду

Code Block
languagebash
themeRDark
ssh -i ssh/id_rsa root@172.16.11.4

Здесь

...

id_rsa - приватный ключ

...

Тестовый стенд предназначен для развертывания отдельного WCS сервера или CDN в докер-контейнерах с целью тестирования. Вместе с WCS узлами может быть также развернут контейнер для публикации RTMP потоков из указанных медиафайлов при помощи ffmpeg на Origin серверы стенда.

В текущей реализации в docker-образы стенда интегрируется только окружение для запуска WCS, сами сборки WCS скачиваются по заданным ссылкам. Загруженные архивы сборок кэшируются.

Лицензия для активации WCS должна быть указана при настройке каждого WCS узла.

Стенд может быть развернут в docker bridge сети по умолчанию, при этом IP-адреса контейнеров назначаются динамически, и настройки CDN могут быть сгенерированы автоматически. Однако, для более углубленного тестирования необходимые файлы настроек WCS должны быть определены для каждого WCS узла, и IP-адреса контейнеров должны быть назначены статически. В этом случае возможно создание отдельной docker сети для стенда.

При запуске стенда, может быть настроен доступ к контейнерам по SSH при помощи приватного ключа. В этом случае, контейнеры могут быть доступны не только с docker машины, но и извне, при этом маршрутизация должна быть настроена соответствующим образом.