BigBlueButton
Обновлено 8 апреля 2021
BigBlueButton — открытое программное обеспечение для проведения веб-конференции. Система разработана в первую очередь для дистанционного обучения. Название BigBlueButton происходит от первоначальной концепции, что, начало веб-конференции должно быть максимально простым, как нажатие метафорической большой синей кнопки.
Подготовка LXC контейнера
BigBlueButton разрабатывается и тестируется под Ubuntu Xenial. Установить Ubuntu вы можете в LXC-контейнере, для этого выполните установку необходимых пакетов:
emerge -a app-emulation/lxc dev-libs/libcgroup
Запустите сервис cgconfig для создание cgroup systemd:
/etc/init.d/cgconfig start
При использовании Docker внутри LXC контейнера в хостовой системе загрузите необходимые модули ядра и добавьте их в автозагрузку:
modprobe -a br_netfilter ip_tables nf_conntrack_netlink nf_nat overlay xt_conntrack
echo -e "br_netfilter\nip_tables\nnf_conntrack_netlink\nnf_nat\noverlay\nxt_conntrack" > /etc/modules-load.d/docker.conf
Создайте контейнер для BigBlueButton:
lxc-create -t download -n bigbluebutton -- -d ubuntu -r xenial -a amd64
Запустите созданный контейнер:
lxc-start bigbluebutton
Настройте сеть согласно инструкции, но не присваивайте IP адрес и шлюз через конфигурационный файл контейнера.
Добавьте разрешение, чтобы запустить тест hello-world для Docker:
lxc.cgroup.devices.allow = c 10:200 rwm
Настройте параметры сети внутри контейнера, указав необходимый IP адрес, маску сети, шлюз по умолчанию и DNS сервер:
... auto eth0 iface eth0 inet static address 192.168.11.2 netmask 255.255.255.0 gateway 192.168.11.1 dns-nameservers 8.8.8.8 ...
Перезапустите контейнер:
lxc-stop -r bigbluebutton
Подключитесь к контейнеру:
lxc-attach bigbluebutton
Обновите репозиторий бинарных пакетов:
Установите SSH клиент и сервер:
Измените пароль пользователя root:
Разрешите подключаться через SSH пользователю root:
...
PermitRootLogin yes
...
Перезапустите сервис SSH:
Перенастройте локаль:
Убедитесь, что локаль указана в переменных окружения:
Добавьте определение сервера как meet.example.org:
127.0.0.1 meet.example.org bigbluebutton localhost
Так как установка производится в контейнере, то для некоторых компонентов BigBlueButton необходим источник энтропии. Установите генератор энтропии:
Добавьте демон энтропии в автозагрузку и запустите его:
Установите утилиты для управления репозиториями:
Установка и настройка BigBlueButton
Добавьте дополнительные репозитории:
Добавьте репозиторий MongoDB и установите базу данных:
Добавьте репозиторий NodeJS с версей 8.x и установите его:
Добавьте ключ BigBlueButton и репозиторий:
Начните установку пакетов для BigBlueButton:
Во время установки пакетов, будет необходимо принять лицензию EULA.
Из-за ограничений LXC контейнера установка не сможет быть завершена, из-за невозможности запуска служб Redis и FreeSWITCH.
Исправье модуль запуса Redis, отключив использование отсутствующих механизмов ограничения:
[Unit] Description=Advanced key-value store After=network.target Documentation=http://redis.io/documentation, man:redis-server(1) [Service] Type=forking ExecStart=/usr/bin/redis-server /etc/redis/redis.conf PIDFile=/var/run/redis/redis-server.pid TimeoutStopSec=0 Restart=always User=redis Group=redis ExecStartPre=-/bin/run-parts --verbose /etc/redis/redis-server.pre-up.d ExecStartPost=-/bin/run-parts --verbose /etc/redis/redis-server.post-up.d ExecStop=-/bin/run-parts --verbose /etc/redis/redis-server.pre-down.d ExecStop=/bin/kill -s TERM $MAINPID ExecStopPost=-/bin/run-parts --verbose /etc/redis/redis-server.post-down.d UMask=007 #PrivateTmp=yes #PrivateDevices=yes #ProtectHome=yes #ReadOnlyDirectories=/ #ReadWriteDirectories=-/var/lib/redis #ReadWriteDirectories=-/var/log/redis #ReadWriteDirectories=-/var/run/redis #CapabilityBoundingSet=~CAP_SYS_PTRACE # redis-server writes its own config file when in cluster mode so we allow # writing there (NB. ProtectSystem=true over ProtectSystem=full) #ProtectSystem=true #ReadWriteDirectories=-/etc/redis [Install] WantedBy=multi-user.target Alias=redis.service
Запустите сервис Redis:
Исправьте модуль запуска FreeSWITCH, отключив использование отсутствующих механизмов ограничения:
[Unit] Description=freeswitch After=syslog.target network.target local-fs.target [Service] ; service Type=forking PIDFile=/opt/freeswitch/var/run/freeswitch/freeswitch.pid Environment="DAEMON_OPTS=-nonat" EnvironmentFile=-/etc/default/freeswitch ExecStart=/opt/freeswitch/bin/freeswitch -u freeswitch -g daemon -ncwait $DAEMON_OPTS TimeoutSec=45s Restart=always ; exec WorkingDirectory=/opt/freeswitch User=freeswitch Group=daemon #LimitCORE=infinity #LimitNOFILE=100000 #LimitNPROC=60000 #LimitSTACK=250000 #LimitRTPRIO=infinity #LimitRTTIME=7000000 #IOSchedulingClass=realtime #IOSchedulingPriority=2 #CPUSchedulingPolicy=rr #CPUSchedulingPriority=89 #UMask=0007 [Install] WantedBy=multi-user.target
Запустите сервис FreeSWITCH:
Продолжите прерванную установку:
Установите пакет BigBlueButton HTML5:
Для того, чтобы избавиться от "щелчков", отрегулируйте уровень звука, необходимый для передачи голоса другим пользователям:
<profile name="cdquality">
<param name="domain" value="$${domain}"/>
<param name="rate" value="48000"/>
<param name="interval" value="20"/>
<param name="energy-level" value="10"/>
...
Перезапустите BigBlueButton:
Проверьте на наличие ошибок конфигурации:
Укажите имя хоста для приложения BigBlueButton meet.example.org:
Настройка HTTPS
Получение сертификата Let's Encrypt
Получите сертификат домена meet.example.org согласно руководству.
Настройка HTTPS для Nginx
Создайте каталог для сертификатов:
Скопируйте полученные через Let’s Encrypt сертификаты:
Сгенерируйте DH ключ:
Добавьте HTTPS Nginx:
server { server_name meet.example.org; listen 80; listen [::]:80; listen 443 ssl; listen [::]:443 ssl; ssl_certificate /etc/nginx/ssl/meet.example.org/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/meet.example.org/privkey.pem; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers "ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS:!AES256"; ssl_prefer_server_ciphers on; ssl_dhparam /etc/nginx/ssl/dhp-4096.pem; if ($scheme = http) { return 301 https://$server_name$request_uri; } ...
Настройка FreeSWITCH для SSL
Настройте FreeSWITCH на использование SSL, указав внешний адрес:
location /ws {
proxy_pass https://1.2.3.4:7443;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_read_timeout 6h;
proxy_send_timeout 6h;
client_body_timeout 6h;
send_timeout 6h;
}
Важно
В этой конфигурации указывается внешний IP адрес, а не имя хоста.
Настройка BigBlueButton на использование сессии через HTTPS
Настройте BigBlueButton для использования HTTPS сессии и HTML5:
... #---------------------------------------------------- # This URL is where the BBB client is accessible. When a user sucessfully # enters a name and password, she is redirected here to load the client. # Do not commit changes to this field. bigbluebutton.web.serverURL=https://meet.example.org ... # Force all attendees to join the meeting using the HTML5 client attendeesJoinViaHTML5Client=true # Force all moderators to join the meeting using the HTML5 client moderatorsJoinViaHTML5Client=true
Настройте общий доступ к экрану также через HTTPS:
... streamBaseUrl=rtmp://meet.example.org/screenshare jnlpUrl=https://meet.example.org/screenshare jnlpFile=https://meet.example.org/screenshare/screenshare.jnlp
Укажите клиенту загрузку компонентов через HTTPS:
Настройте WebRTC через SSL сокет:
... kurento: wsUrl: wss://meet.example.org/bbb-webrtc-sfu ... note: enabled: true url: https://meet.example.org/pad ...
Так же настройте работу записей через HTTPS:
...
playback_protocol: https
Перезапустите BigBlueButton:
Перезапустите Nginx:
Настройка TURN сервера
Настройте TURN сервер turn.example.org согласно руководству.
Укажите BigBlueButton использовать настроенный TURN сервер turn.example.org в качестве STUN и TURN серверов. Для подключения к TURN серверу используется ключ 4b85833c7fdf06130bd7398ac9af558b, указанный в параметре static-auth-secret, настройки TURN сервера.
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id="stun0" class="org.bigbluebutton.web.services.turn.StunServer"> <constructor-arg index="0" value="stun:turn.example.org"/> </bean> <bean id="turn0" class="org.bigbluebutton.web.services.turn.TurnServer"> <constructor-arg index="0" value="4b85833c7fdf06130bd7398ac9af558b"/> <constructor-arg index="1" value="turns:turn.example.org:443?transport=tcp"/> <constructor-arg index="2" value="86400"/> </bean> <bean id="turn1" class="org.bigbluebutton.web.services.turn.TurnServer"> <constructor-arg index="0" value="4b85833c7fdf06130bd7398ac9af558b"/> <constructor-arg index="1" value="turn:turn.example.org:443?transport=tcp"/> <constructor-arg index="2" value="86400"/> </bean> <bean id="stunTurnService" class="org.bigbluebutton.web.services.turn.StunTurnService"> <property name="stunServers"> <set> <ref bean="stun0"/> </set> </property> <property name="turnServers"> <set> <ref bean="turn0"/> <ref bean="turn1"/> </set> </property> </bean> </beans>
Перезапустите BigBlueButton:
Настройка Greenlight
Greenlight - приложение на Ruby on Rails, предоставляющее простой интерфейс для пользователей, чтобы создавать комнаты, начинать конференции, управлять записями конференций.
Установите утилиты для подключения репозитория:
Добавьте ключи и подключите репозиторий Docker:
Установите Docker версии 17.09.1:
Проверьте работу Docker запуском контейнера hello-world:
Запретите обновление docker-ce в дальнейшем:
Создайте директорию для конфигурации GreenLight:
Сгенерируйте файл конфигурации GreenLight:
Сгенерируйт секретный ключ для GreenLight:
Установите полученное значение в параметр SECRET_KEY_BASE файла .env:
# Create a Secret Key for Rails
#
# You can generate a secure one through the Greenlight docker image
# with the command.
#
# docker run --rm bigbluebutton/greenlight:v2 bundle exec rake secret
#
SECRET_KEY_BASE=458e2c786750cb534f2350d12bcf173052cf5fa275c66d545fb64affe805f49cb09169a8a8799cbcaff7762c1c1664e48e5cf4d8754a5f0865e0c9fedc53e1cc
...
Получите URL BigBlueButton и его ключ:
Установите полученное значение в параметры BIGBLUEBUTTON_ENDPOINT и BIGBLUEBUTTON_SECRET файла .env:
... # The endpoint and secret for your BigBlueButton server. # Set these if you are running GreenLight on a single BigBlueButton server. # You can retrive these by running the following command on your BigBlueButton server: # # bbb-conf --secret # BIGBLUEBUTTON_ENDPOINT=https://meet.example.org/bigbluebutton/ BIGBLUEBUTTON_SECRET=zZ7XSEB7EjubByrCxAthTNYomDVbMwjUbfT4xqoa3p
Проверьте настройки GreenLight:
Добавьте настрой для Nginx:
Добавьте перенаправление BigBlueButton на страницу GreenLight:
... # Redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/www/nginx-default; } location = / { return 307 /b; } }
Сгенерируйте сценарий для docker-compose:
Сгенерируйте пароль для PostgreSQL:
Измените версию docker-compose файла:
Запустите контейнер:
Перезапустите Nginx:
systemctl restart nginx
Создайте учётную запись администратора:
Все готово! После открытия meet.example.org сайт будет выглядеть следующим образом:
Для авторизации администратором введите электронный адрес support@example.org и пароль admin.
Настройка почтовых уведомлений
Для включения подверждения учётной записи по электронной почте укажите настройки почтового сервера для отправки почты:
... # Set this to true if you want GreenLight to send verification emails upon # the creation of a new account # ALLOW_MAIL_NOTIFICATIONS=true SMTP_SERVER=mail.example.org SMTP_PORT=465 SMTP_DOMAIN=example.org SMTP_USERNAME= SMTP_PASSWORD= SMTP_ATUH= SMTP_STARTTLS_AUTO=true # Specify the email address that all mail is sent from SMTP_SENDER=support@example.org ...
Перезапустите Greenlight:
Смена пароля пользователю
Смену пароля пользователю можно осуществить через консоль RubyOnRail:
При включенном подверждении учётной записи по электронной почте, сброс пароля пользователя можно выполнить на странице редактирования пользовательского аккаунта:
Обновление BigBlueButton
Подключитесь к контейнеру:
lxc-attach bigbluebutton
Обновите репозиторий бинарных пакетов:
Выполните обновление всех пакетов системы:
Выполните обновление образа Greenlight:
Убедитесь, что настройки не сбросились после обновления:
<profile name="cdquality">
<param name="domain" value="$${domain}"/>
<param name="rate" value="48000"/>
<param name="interval" value="20"/>
<param name="energy-level" value="10"/>
...
Перезапустите контейнер:
lxc-stop -r bigbluebutton
Восстановление образов Docker при использовании Btrfs
Если контейнер развернут на файловой системе Btrfs, то Docker для образов будет использовать подтома, которые не будут попадать в снапшоты этого контейнера. Для того, чтобы запустить Greenlight, необходимо заново скачать образы.
Скачайте заново все используемые Docker образы для Greenlight:
Перезапустите Greenlight: