Начиная со сборки 5.2.458, WCS доступен в виде официального Docker образа

Пример развертывания в Docker

Развернем WCS в Docker за несколько шагов:

1. Загрузите актуальную сборку с Docker Hub

sudo docker pull flashphoner/webcallserver

2. Настройте docker сеть

sudo docker network create \
 --subnet 192.168.1.1/24 \
 --gateway=192.168.1.1 \
 --driver=bridge \
 --opt com.docker.network.bridge.name=br-testnet testnet

3. Запустите docker контейнер, указав номер ознакомительной или коммерческой лицензии

docker run \
-e PASSWORD=password \
-e LICENSE=license_number \
-e LOCAL_IP=192.168.1.10 \
--net testnet --ip 192.168.1.10 \
--name wcs-docker-test --rm -d flashphoner/webcallserver:latest

4. Проверьте доступность контейнера по SSH

ssh root@192.168.1.10

5. Откройте страницу примера Two Way Streaming в локальном браузере и опубликуйте поток

6. Закройте страницу, остановите контейнер

sudo docker stop wcs-docker-test

При остановке контейнера лицензия будет деактивирована, чтобы избежать излишнего биллинга.

Настройка docker контейнера

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

По умолчанию, IP адрес назначается контейнеру динамически. Если планируется использовать статический IP адрес, нужно указать его в параметрах команды docker run и передать в контейнер при помощи переменной LOCAL_IP :

docker run -e LICENSE=license_number -e PASSWORD=secret \
 -e LOCAL_IP=static_ip \
 --net your-docker-network \
 --ip static_ip \
 --name webcallserver-instance -d webcallserver:latest

Если docker узел находится в локально сети за NAT, и сервер должен быть доступен снаружи, необходимо указать внешний IP адрес в переменной EXTERNAL_IP :

docker run -e LICENSE=license_number -e PASSWORD=secret \
 -e LOCAL_IP=static_ip \
 -e EXTERNAL_IP=external_ip \
 --net your-docker-network \
 --ip static_ip \
 --name webcallserver-instance -d webcallserver:latest

Особенности динамического определения IP адреса

Если IP адрес назначается контейнеру динамически, и при этом контейнер имеет несколько сетевых интерфейсов (такое может быть, например, в случае использования интерфейсов docker хоста), на этапе запуска контейнера необходимо вручную выбрать IP адрес, к которому привяжется WCS сервер. В этом случае контейнер должен быть запущен в интерактивном режиме

docker run \
-e PASSWORD=password \
-e LICENSE=license_number \
--net host \
--name wcs-docker-test --rm -it flashphoner/webcallserver:latest

Скрипт запуска контейнера определит IP адреса всех интерфейсов и предложит ввести тот, который будет прослушивать WCS сервер

В параметр ip_local будет записан выбранный IP адрес, например

ip_local=172.17.0.1

Настройка параметров контейнера

При запуске в контейнер можно передавать следующие параметры:

Настройка docker томов

При запуске в контейнер могут быть смонтированы следующие тома:

Пример запуска контейнера со всеми смонтированными томами:

docker run -e LICENSE=license_number -e CDN_ROLE=origin \
 -v /opt/wcs/conf:/conf \
 -v /opt/wcs/logs:/usr/local/FlashphonerWebCallServer/logs \
 -v /opt/wcs/hls:/usr/local/FlashphonerWebCallServer/hls \
 -v /opt/wcs/media:/usr/local/FlashphonerWebCallServer/media \
 -v /opt/wcs/records:/usr/local/FlashphonerWebCallServer/records \
 --name webcallserver-instance -d webcallserver:latest

Не допускается монтирование всего каталога /usr/local/FlashphonerWebCallServer/conf как тома, или отдельных файлов из этого каталога!

Например, так делать нельзя:

docker run -e LICENSE=license_number -e PASSWORD=secret \
 -v /opt/wcs/conf:/usr/local/FlashphonerWebCallServer/conf \
 --name webcallserver-instance -d webcallserver:latest

и так тоже:

docker run -e LICENSE=license_number -e PASSWORD=secret \
 -v /opt/wcs/conf/flashphoner.properties:/usr/local/FlashphonerWebCallServer/conf/flashphoner.properties \
 --name webcallserver-instance -d webcallserver:latest

Дополнительная настройка

В каталог, смонтированный как том /conf, могут быть помещены следующие файлы настроек

Все эти файлы могут быть использованы, например, для восстановления настроек экземпляра WCS из сохраненной копии и для автоматического развертывания. Файлы копируются в контейнер 'как есть', за исключением flashphoner.properties:

Порты контейнера

По умолчанию доступны следующие порты:

Состав портов при необходимости может быть изменен при помощи параметров запуска docker run --expose. В этом случае значения портов должны быть указаны в файлах настроек flashphoner.properties и wcs-core.properties, см выше

Известные проблемы

1. При запуске контейнера нельзя изменить ограничение на количество открытых файлов изнутри контейнера.

Симптомы: при запуске контейнера в интерактивном режиме выводится сообщение

ulimit: open files: cannot modify limit: Operation not permitted

Решение: установить ограничение на количество открытых файлов в параметрах запуска контейнера

docker run --ulimit nofile=100000:100000 \
 -e LICENSE=license_number -e PASSWORD=secret \
 --name webcallserver-instance --rm webcallserver:latest

2. Не рекомендуется использовать Docker на Windows из-за проблем с пробросом портов

Симптомы: при развертывании образа в Docker под Windows контейнер запущен, но недоступен по SSH, по HTTP/HTTPS, не устанавливается WebRTC соединение

Решение: использовать Docker на Linux, либо запускать WCS в WSL 2