- Erlang R15B. Можно из репозитория, если есть подходящий.
- Erlyvideo, именно отсюда, там мелкие нужные патчи.
Собрать erlyvideo из исходников(make tgz
) на системе той же архитектуры, что и целевая.
Полученный архив распаковать на целевой машине в /opt(по умолчанию, можно просто поправить init-скрипт для другого пути).
bash$ cd /opt
bash$ tar -xzF erlyvideo-X.XX.XX.tar.gz
bash$ mkdir /etc/erlyvideo
bash$ cp erlyvideo/etc/erlyvideo.conf.sample /etc/erlyvideo/erlyvideo.conf
bash$ cp erlyvideo/etc/log4erl.conf.sample /etc/erlyvideo/log4erl.conf
bash$ cp /opt/erlyvideo/bin/erlyvideo-initscript /etc/init.d/erlyvideo
Запустить erlyvideo.
bash$ /etc/init.d/erlyvideo start
Собрать модуль для erlyvideo на целевой системе или системе той же архитектуры и с той же версией Erlang:
bash$ mkdir /opt/ev
bash$ cd /opt/ev
bash$ git clone ssh://git.work/GIT/webinar.git
bash$ cd webinar
bash$ make module
Отредактировать /etc/erlyvideo/erlyvideo.conf, см. официальную документацию:
{paths, ["/var/lib/erlyvideo/plugins", "/usr/local/lib/erlyvideo/plugins", "/opt/ev"]}. %% добавить путь к папке, в которой лежит модуль
{modules,[webinar]}. %% собственно модуль
{vhosts, [
%% заменить default на нужный vhost
{default, [
{rtmp_handlers, [webinar_api, remove_useless_prefix, apps_streaming, apps_recording]}, %% выкинуть все остальные хэндлеры авторизации
{webinar, [
%% для ретранслятора раскомментировать следующую строку, вписать в нее адрес мастер-сервера
% {master, "rtmp://192.168.0.16/streams/"}
%% адрес, где висит Auth Server, обязательно без trailng slash
{api_url, "http://192.168.0.115:8000/api"}
]},
%% остальная конфигурация
]}.
- Python 2, 2.6+
- предпочтительно pip, virtualenv
- пакеты из webapp/requirements.txt(
pip install -r requirements.txt
) - WSGI-сервер на свой вкус(uwsgi, например)
- установленный Branstalkd-сервер.
Обычное развертывание Django-проекта, ничего особенного. Пример settings.py - webinar/webapp/webinar/settings.example.py. Единственный нестандартный элемент конфига - BS_SERVER, адрес:порт Beanstalkd-сервера. MEDIA_ROOT и MEDIA_URL должны быть корректно настроены и обслуживаться внешним веб-сервером. django.contrib.sites также должно быть настроено верно, Site.objects.get_current() должно возвращать правильный домен.
В принципе, не требуется.
- Python 2, 2.6+
- OpenOffice.org / LibreOffice(3.5, в 3.4 баг), который может работать в headless mode. Для презентаций (PPT/ODP).
- GhostScript, для PDF.
- python-uno
- установленный Branstalkd-сервер.
Использовать нормальный изолированный virtualenv не получится, python-uno ставится только глобально. Прочие зависимости в webapp/requirements.fs.txt. Воркер оформлен как django management command. В settings.py нужно прописать корректные BS_SERVER, STATIC_ROOT, STATIC_PATH. STATIC_ROOT дожна быть доступна на запись. django.contrib.sites должно быть настроено верно, Site.objects.get_current() должно возвращать правильный домен.
В monit под рестарт по лимиту оперативной памяти поставить
libreoffice "--accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager" --norestore --nofirststartwizard --nologo --headless
Инстанс воркера запускается командой webinar/webapp/manage.py bs_worker
. Тоже лучше завернуть в monit несколько инстансов. Порт 8100 сейчас hardcoded. Позже перестанет быть таким.
Необходимые параметры конфигурации перечислены выше.
Также см. webinar/webapp/manage.py bs_worker --help
. Он умеет форкаться, но насколько это юзабельно - большой вопрос.