Начиная со сборки 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
Настройка параметров контейнера
При запуске в контейнер можно передавать следующие параметры:
PASSWORD
- пароль на доступ внутрь контейнера по SSH. Если эта переменная не определена, контейнер не будет доступен по паролюLICENSE
- номер лицензии WCS. Если эта переменная не определена, лицензия может быть активирована через веб-интерфейсLOCAL_IP
- локальный IP адрес контейнера, который будет записан в параметрip_local
в файле настроекflashphoner.properties
. Если эта переменная не определена, IP адрес контейнера будет определен автоматическиEXTERNAL_IP
- локальный IP адрес контейнера, который будет записан в параметрip
в файле настроекflashphoner.properties
. Если эта переменная не определена иLOCAL_IP
не определена, внешний IP адрес контейнера будет определен автоматическиCDN_ROLE
- роль контейнера в CDN. Если эта переменная не определена, контейнер будет работать как отдельно стоящий серверCDN_ENTRY_POINT
- адрес сервера-точки входа в CDN для данного контейнера. Если эта переменная не определена, точка входа не задаетсяCDN_GROUPS
- группы CDN, в которые должен входить контейнер. Если эта переменная не определена, контейнер не принадлежит ни к одной группе
Настройка docker томов
При запуске в контейнер могут быть смонтированы следующие тома:
/conf
- каталог дополнительных файлов конфигурации. Этот каталог может быть смонтирован только для чтения/usr/local/FlashphonerWebCallServer/hls
- каталог для сегментов HLS. Этот каталог должен быть смонтирован для записи/usr/local/FlashphonerWebCallServer/logs
- каталог для логирования. Этот каталог должен быть смонтирован для записи/usr/local/FlashphonerWebCallServer/media
- каталог с файлами для воспроизведения VOD. Этот каталог может быть смонтирован только для чтения. Этот каталог может быть быть общим с другими экземплярами WCS/usr/local/FlashphonerWebCallServer/records
- каталог для файлов записей потоков. Этот каталог должен быть смонтирован для записи. Этот каталог может быть быть общим с другими экземплярами WCS
Пример запуска контейнера со всеми смонтированными томами:
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
Дополнительная настройка
В каталог, смонтированный как том /conf
, могут быть помещены следующие файлы настроек
id_rsa.pub
- публичный SSH ключ для доступа к контейнеру. Если этот файл найден при запуске контейнера, будет работать SSH доступ в контейнер по соответствующему приватному ключу. В противном случае, если переменнаяPASSWORD
определена, контейнер будет доступен по заданному паролю. Если не определены ни публичный ключ, ни пароль, SSH сервис не будет запущенflashphoner.properties
- основной файл настроек сервера. Может быть использован для настройки экземпляра WCSwcs-core.properties
- файл настроек Java. Может использоваться для настройки памяти и подключения из JMClog4j.properties
- файл настроек логированияwss.jks
- файл хранилища ключей SSL сертификатов. Файл может быть подготовлен при помощи keytoolcdn_profiles.yml
- файл настройки профилей транскодирования в CDNdatabase.yml
- файл настройки пользователей и приложений REST hook*.sdp
- файлы настроек SDP
Все эти файлы могут быть использованы, например, для восстановления настроек экземпляра WCS из сохраненной копии и для автоматического развертывания. Файлы копируются в контейнер 'как есть', за исключением flashphoner.properties
:
- параметры
ip
иip_local
будут изменены (см описание переменнойIP_LOCAL
) - если переменная
CDN_ROLE
определена, но файл не содержит никаких настроек CDN, будут добавлены настройки по умолчанию
Не допускается монтирование всего каталога /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
Порты контейнера
По умолчанию доступны следующие порты:
22/tcp
- SSH (этот порт активен, если настроен )554/tcp
- RTSP порт1935/tcp
- RTMP порт1935/udp
- RTMFP порт2001/tcp
- CLI порт7777/tcp
- порт мониторинга сервера8080-8084/tcp
- WS, HTTP, CDN порты8443-8445/tcp
- WSS, HTTPS порты8888/tcp
- HTTPS порт (для совместимости со старыми версиями)9091/tcp
- HTTP порт (для совместимости со старыми версиями)30000-35000/tcp
- TCP медиа порты30000-35000/udp
- UDP медиа порты50999/tcp
- JMX порт
Состав портов при необходимости может быть изменен при помощи параметров запуска 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