Користувальницькькі налаштування

Налаштування сайту


bigbluebutton

BigBlueButton

Версія 2.6

Чи не найсуттєвішою відмінністю версії 2.6 є встановлення TURN-сервера за замовчуванням на тому ж комп'ютері, що й BigBlueButton. Це звільняє від необхідності використання додаткових сторонніх серверів для забезпечення підключення клієнтам з використанням TURN. Це досягається автоматичним встановленням та налаштуванням програми HAProxy на стандартному порті 443 (HTTPS), яка вміє відрізняти та перерозподіляти різні типи запитів до відповідних програм, зокрема, до TURN-сервера чи веб-сервера.

Оновлення з попередніх версій

З версії 2.5

Оновлення з версії 2.5 відбувається повністю автоматично1) за допомогою скрипту ''bbb-install-2.6.sh''.

Приклад команди для оновлення сервера BigBlueButton:

sudo GL_PATH='/gl' ./bbb-install-2.6.sh -v focal-260 -s bbb.myserver.org -e email@domain.com -g

Тут bbb.myserver.org – це доменне ім'я, прив'язане до нашого сервера, а email@domain.com – це адреса електронної пошти, що використовується для реєстрації SSL-сертифіката для цього домену. Сертифікат отримується автоматично від Let's Encrypt під час встановлення.

Змінна GL_PATH='/gl' тут вказує на те, що сторінка Greenlight буде розташована в нашому випадку за адресою bbb.myserver.org/gl. Якщо ми хочемо, щоб веб-сервер за замовчуванням переспрямовував користувачів з адреси bbb.myserver.org на адресу bbb.myserver.org/gl, потрібно після оновлення BigBlueButton знайти файл /usr/share/bigbluebutton/nginx/greenlight-redirect.nginx.disabled, перейменувати його на /usr/share/bigbluebutton/nginx/greenlight-redirect.nginx (тобто прибрати слово “.disabled” на кінці) та відредагувати його вміст таким чином:

"/usr/share/bigbluebutton/nginx/greenlight-redirect.nginx"
location = / {
  return 307 /gl;
}

Примітка: У файлі /usr/share/bigbluebutton/nginx/greenlight-redirect.nginx.disabled за замовчуванням може бути записано переспрямування на шлях “/b”. Але якщо цей шлях на нашому сервері досі використовувався попередньою (другою) версією Greenlight, то на даному етапі нам не можна вказувати його для третьої версії, бо доступ до обох версій одночасно нам ще знадобиться для перенесення облікових записів з Greenlight v2 до Greenlight v3.

Якщо скрипт bbb-install-2.6.sh вдало завершив свою роботу, в нас має бути запущена нова версія BigBlueButton. Далі треба налаштувати Greenlight v3 та перенести до неї усю інформацію з попередньої версії.

З версії 2.4

Якщо ми проводимо оновлення з версії BigBluButton 2.4 або старішої, яка працює на Ubuntu 18.04, то офіційна документація радить2) видалити BigBlueButton, оновити операційну систему до версії Ubuntu 20.04, а вже потім встановити BigBlueButton 2.6 з нуля.

Видалити BigBlueButton та всі супутні пакети, а також різні сліди їхнього перебування в системі – не дуже очевидна річ. Тому можна скористатися неофіційним скриптом, запропонованим на форумі BigBlueButton, або окремими частинами цього скрипту в залежності від потреби. Зокрема, варто звернути увагу на команди, пов'язані із видаленням файлів. Якщо, наприклад, нам потрібно перенести записи сеансів до нової системи, то потрібно їх або скопіювати десь окремо, або не видаляти теки, в яких вони лежать.

"uninstall_bigbluebutton.sh"
#!/bin/bash
 
# stop bbb
bbb-conf --stop
 
# docker cleanup
docker ps -q -all | xargs docker stop
docker ps -q -all | xargs docker rm
docker rmi --force $(docker images -a -q)
docker system prune
service docker stop
rm -rf /var/lib/docker/*
apt purge docker-ce docker-ce-cli containerd.io -y
 
# delete bbb dependencies
dpkg -l | grep -w bbb |  awk '{print $2}' | xargs apt-get purge -y
dpkg -l | grep -w mongodb | awk '{print $2}' | xargs apt-get purge -y
dpkg -l | grep -w kurento | awk '{print $2}' | xargs apt-get purge -y
 
apt-get purge openjdk* openjdk-*-jre kms-* -y
apt-get autoremove -y
apt-get clean
 
# delete ruby, gems
apt-get purge ruby rubygems -y
rm /var/lib/gems/2.* -rf
 
# delete nginx
update-rc.d nginx remove
apt purge nginx nginx-common -y
 
# delete redis
apt purge redis-server -y
rm -rf /var/lib/redis 
rm -rf /var/log/redis
 
cd /etc/apt/sources.list.d/
ls | grep bigbluebutton | xargs rm
ls | grep mongodb | xargs rm
ls | grep node | xargs rm
ls | grep rmescandon | xargs rm
ls | grep libreoffice | xargs rm
 
cd /etc/apt/trusted.gpg.d/
ls | grep bigbluebutton | xargs rm
ls | grep rmescandon | xargs rm
ls | grep libreoffice | xargs rm
 
# deactivate docker in /etc/apt/sources.list
sed -i 's/^deb \[arch\=amd64\] https\:\/\/download\.docker\.com\/linux\/ubuntu bionic stable$/\#deb \[arch\=amd64\] https\:\/\/download\.docker\.com\/linux\/ubuntu bionic stable/g' /etc/apt/sources.list
 
cd /var/lib/apt/lists/ && ls | grep bigbluebutton | xargs rm
cd /var/lib/apt/lists/ && ls | grep libreoffice | xargs rm
cd /var/lib/apt/lists/ && ls | grep certbot | xargs rm
cd /var/lib/apt/lists/ && ls | grep mongodb | xargs rm
cd /var/lib/apt/lists/ && ls | grep docker | xargs rm
 
apt-key del $(apt-key list | awk 'NR=='`expr $(apt-key list | grep --line-number --regexp "BigBlueButton" | cut --fields 1 --delimiter ":") - 1`'{print;exit}' | sed -e 's/ //g')
apt-key del $(apt-key list | awk 'NR=='`expr $(apt-key list | grep --line-number --regexp "Kurento" | cut --fields 1 --delimiter ":") - 1`'{print;exit}' | sed -e 's/ //g')
apt-key del $(apt-key list | awk 'NR=='`expr $(apt-key list | grep --line-number --regexp "MongoDB" | cut --fields 1 --delimiter ":") - 1`'{print;exit}' | sed -e 's/ //g')
apt-key del $(apt-key list | awk 'NR=='`expr $(apt-key list | grep --line-number --regexp "Docker" | cut --fields 1 --delimiter ":") - 1`'{print;exit}' | sed -e 's/ //g')
 
# delete leftovers like logs and other files
#
# MAKE THE BACKUP OF RECORDINGS FIRST !!! (IF NECESSARY)
#
# rm -rf /var/bigbluebutton /opt/freeswitch /usr/share/etherpad-lite /usr/local/bigbluebutton /etc/bigbluebutton  /usr/share/meteor /usr/share/bbb-libreoffice-conversion /usr/share/bbb-web /etc/systemd/system/bbb-webrtc-sfu.service.d /var/tmp/bbb-kms-last-restart.txt /var/log/bigbluebutton /var/log/kurento-media-server /var/log/bbb-apps-akka /var/log/bbb-fsesl-akka /var/log/bbb-webrtc-sfu /var/lib/kurento /var/kurento /var/log/mongodb /etc/kurento /run/bbb-fsesl-akka ./run/bbb-apps-akka /etc/systemd/system/multi-user.target.wants/bbb-web.service /etc/systemd/system/multi-user.target.wants/bbb-rap-resque-worker.service /etc/systemd/system/multi-user.target.wants/bbb-rap-starter.service ~/.bundle/cache
 
# delete user related content
deluser bigbluebutton 
# deluser redis
deluser mongodb
deluser kurento
# only this group needs to be removed, all other are deleted anyway!
delgroup mongodb
 
# update
apt-get autoremove -y
apt-get update
apt-get dist-upgrade -y

Greenlight v3

Перенесення ролей

Перенесення користувачів

Перенесення кімнат

Перенесення налаштувань

Оновлення паролів

Після оновлення Greenlight потрібно оновити паролі усіх користувачів. Це мають зробити самі користувачі, запитавши скидання пароля на сторінці входу до Greenlight.

Але для того, щоб повідомити усім користувачам про необхідність скидання пароля, в комплекті є також готовий скрипт для розсилання усім користувачам нашого сервера повідомлення із запрошенням змінити пароль.

Але перш ніж ним скористатися, варто взяти до уваги, що деякі поштові сервери блокують масові розсилання повідомлень. Наприклад, якщо листи надсилаються занадто швидко. Я стикнувся із такою проблемою, тому перші кілька повідомлень завжди надсилалися нормально, але наступні усі блокувалися. Тому для себе я знайшов таке рішення: я додав до скрипту невелику паузу між надсиланням листів. Зробити це можна так:

Відкрити файл скрипту lib/tasks/reset_password_email.rake для редагування прямо в контейнері:

sudo docker exec -it greenlight-v3 vi lib/tasks/reset_password_email.rake

знайти в ньому наступні рядки:

"reset_password_email.rake"
      success 'Successfully sent reset password email to:'
      info    "  name: #{user.name}"
      info    "  email: #{user.email}"
    rescue StandardError => e
      err "Unable to send reset password email to:\n  name: #{user.name} \n  email: #{user.email} \n  error: #{e}"
    end
  end

та додати туди функцію sleep(5) (пауза у 5 секунд) ось у цьому місці (важливо дотримуватися відступів ліворуч!):

"reset_password_email.rake"
      success 'Successfully sent reset password email to:'
      info    "  name: #{user.name}"
      info    "  email: #{user.email}"
 
    sleep(5)
 
    rescue StandardError => e
      err "Unable to send reset password email to:\n  name: #{user.name} \n  email: #{user.email} \n  error: #{e}"
    end
  end

зберегти цей файл, закрити, а тоді вже запустити скрипт:

sudo docker exec -it greenlight-v3 bundle exec rake migration:reset_password_email\[https://bbb.myserver.org/gl]

Перенесення записів

sudo docker exec -it greenlight-v3 bundle exec rake server_recordings_sync

Проблема з Firefox

Якщо браузер Firefox не приймає та не передає зображення веб-камери або демонстрацію екрану, можливо, потрібно додати наступні рядки до файлу “/etc/bigbluebutton/bbb-html5.yml”:

"/etc/bigbluebutton/bbb-html5.yml"
public:
  media:
    forceRelayOnFirefox: false

Таке рішення підказано відповіддю на форумі, хоча і суперечить офіційній документації на момент написання цієї статті.

Можливо, це пов'язано із відомою вадою Firefox. Додаткову інформацію можна також прочитати у відповідних гілках форумів BigBlueButton та mediasoup.

Встановлення

1. Переадресування портів

Уявімо, що наш BBB-сервер встановлений в локальній мережі, відокремленій від Інтернету маршрутизатором. Нехай в нашого сервера локальна адреса 192.168.1.100. Тоді на маршрутизаторі потрібно налаштувати перенаправлення наступних портів:

TCP 80   - HTTP
TCP 443  - HTTPS
TCP 7443 - FreeSWITCH
TCP 1935 - Redis

та діапазон портів:

UDP 16384-32768 - WebRTC

2. Встановлення необхідних програм

Додати розділ multiverse до списку репозиторії Ubuntu у файлі /etc/apt/sources.list. Наприклад,

deb http://archive.ubuntu.com/ubuntu xenial multiverse

Підключити додаткові джерела програм та оновити систему:

sudo add-apt-repository ppa:bigbluebutton/support -y
sudo add-apt-repository ppa:rmescandon/yq -y
sudo apt-get update
sudo apt-get dist-upgrade

Встановити MongoDB:

wget -qO - https://www.mongodb.org/static/pgp/server-3.4.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.4.list
sudo apt-get update
sudo apt-get install -y mongodb-org curl

Встановити nodejs:

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs

3. Встановлення BBB

Встановити ключ репозиторія BigBlueButton:

wget https://ubuntu.bigbluebutton.org/repo/bigbluebutton.asc -O- | sudo apt-key add -

Встановити основний сервер BigBlueButton та HTML5 клієнт:

echo "deb https://ubuntu.bigbluebutton.org/xenial-22/ bigbluebutton-xenial main" | sudo tee /etc/apt/sources.list.d/bigbluebutton.list
sudo apt-get update
sudo apt-get install bigbluebutton
sudo apt-get install bbb-html5
sudo apt-get dist-upgrade

4. Перший запуск

Після встановлення BBB-сервера та HTML5 клієнта потрібно перезапустити сервер:

sudo bbb-conf --restart

Тоді можна перевірити його стан:

sudo bbb-conf --status
nginx —————————————————► [✔ - active]
freeswitch ————————————► [✔ - active]
redis-server ——————————► [✔ - active]
bbb-apps-akka —————————► [✔ - active]
bbb-transcode-akka ————► [✔ - active]
bbb-fsesl-akka ————————► [✔ - active]
red5 ——————————————————► [✔ - active]
mongod ————————————————► [✔ - active]
bbb-html5 —————————————► [✔ - active]
bbb-webrtc-sfu ————————► [✔ - active]
kurento-media-server ——► [✔ - active]
etherpad ——————————————► [✔ - active]
bbb-web ———————————————► [✔ - active]

або

sudo bbb-conf --check

Якщо все запустилося та працює, можна відкрити в браузері:

http://192.168.1.100/

Повинна з'явитися приблизно така сторінка:

5. Демо

Перевірити, чи сервер та HTML5 клієнт дійсно працюють, можна встановити демонстраційну сторінку:

sudo apt-get install bbb-demo

Це дозволить підключитися до сервера, вказавши деяке ім'я на сторінці входу (див. вище). При цьому оскільки ми підключилися за HTTP-протоколом, сервер може не дозволити там користуватися мікрофоном або камерою. Зазвичай вони дозволені лише для HTTPS-протоколу. Його ми налаштуємо пізніше.

Якщо демо-версія працює, потрібно видалити цю сторінку, щоб інші анонімні користувачі не могли під'єднуватися до нашого сервера.

sudo apt-get remove bbb-demo

6. SSL

Встановимо ім'я домену для нашого сервера. Наприклад, якщо ім'я bbb.myserver.org вже зареєстроване та вказує на IP-адресу нашого сервера (наприклад, 123.123.123.123),

ping bbb.myserver.org
PING bbb.myserver.org (123.123.123.123) 56(84) bytes of data.
64 bytes from 123.123.123.123: icmp_seq=1 ttl=44 time=27.5 ms

sudo bbb-conf --setip bbb.myserver.org

Далі нам необхідний буде дійсний SSL-сертифікат. Якщо його немає, його досить легко можна отримати за допомогою програми Certbot.

Веб-сервер

Згенеруємо параметри Діфі-Хелмана. Це не відбудеться миттєво, а займе кілька хвилин.

sudo mkdir -p /etc/nginx/ssl
sudo openssl dhparam -out /etc/nginx/ssl/dhp-4096.pem 4096

Потрібно увімкнути у веб-сервері можливість роботи за протоколом HTTPS та вказати дійсний сертифікат та ще деякі параметри. Для цього відредагуємо файл /etc/nginx/sites-available/bigbluebutton наступним чином:

server {
  server_name bbb.myserver.org;
  listen 80;
  listen [::]:80;
 
  #--- Додати наступні рядки ---
  listen 443 ssl;
  listen [::]:443 ssl;
 
  ssl_certificate /etc/ssl/certs/bbb.myserver.org.crt;
  ssl_certificate_key /etc/ssl/private/bbb.myserver.org.key;
  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;
  #-----------------------------

Тут

  • bbb.myserver.org – ім'я домену, яке ми зареєстрували для нашого сервера.
  • /etc/ssl/certs/bbb.myserver.org.crt – шлях до файлу з SSL-сертифікатом сервера для нашого домену. Якщо сертифікат було отримано за допомогою certbot, то він зазвичай розміщується у файлі /etc/letsencrypt/live/bbb.myserver.org/fullchain.pem. Його можна скопіювати до теки /etc/ssl/certs/.
  • /etc/ssl/private/bbb.myserver.org.key – шлях до файлу з секретним ключем, що відповідає сертифікату. certbot зазвичай розміщує ключ у файлі /etc/letsencrypt/live/bbb.myserver.org/privkey.pem, і його також можна скопіювати до теки /etc/ssl/certs/.

FreeSWITCH

Відредагуємо файл /etc/bigbluebutton/nginx/sip.nginx:

location /ws {
  proxy_pass https://123.123.123.123: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;
}

Тут важливо звернути увагу на рядок proxy_pass https://123.123.123.123:7443;, який містить, по-перше явну вказівку використовувати протокол HTTPS, по-друге, зовнішню IP-адресу нашого сервера (тобто адресу, яку має маршрутизатор у зовнішній мережі Інтернет, а також, на яку зареєстровано домен bbb.myserver.org), а також порт 7443.

HTTPS у BBB

Потрібно відредагувати наступні файли, вказавши в них протокол HTTPS у відповідних рядках конфігурації:

/usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties
#----------------------------------------------------
# This URL is where the BBB client is accessible. When a user successfully
# enters a name and password, she is redirected here to load the client.
bigbluebutton.web.serverURL=https://bigbluebutton.example.com
/usr/share/red5/webapps/screenshare/WEB-INF/screenshare.properties
streamBaseUrl=rtmp://bigbluebutton.example.com/screenshare
jnlpUrl=https://bigbluebutton.example.com/screenshare
jnlpFile=https://bigbluebutton.example.com/screenshare/screenshare.jnlp
/usr/share/meteor/bundle/programs/server/assets/app/config/settings.yml
note:
    enabled: true
    url: https://bbb.example.com/pad
/usr/local/bigbluebutton/core/scripts/bigbluebutton.yml
playback_protocol: https

Далі у файлі /var/www/bigbluebutton/client/conf/config.xml вказати, що BBB має завантажувати компоненти за протоколом HTTPS. Це можна зробити однією командою:

sudo sed -e 's|http://|https://|g' -i /var/www/bigbluebutton/client/conf/config.xml

Далі змінити ws на wss у файлі

/usr/share/meteor/bundle/programs/server/assets/app/config/settings.yml
kurento:
    wsUrl: wss://bbb.example.com/bbb-webrtc-sfu

І перезапустити сервер

sudo bbb-conf --restart

7. NAT

Kurento

FreeSWITCH

/opt/freeswitch/conf/vars.xml
<X-PRE-PROCESS cmd="set" data="external_rtp_ip=123.123.123.123"/>
<X-PRE-PROCESS cmd="set" data="external_sip_ip=123.123.123.123"/>
/opt/freeswitch/conf/sip_profiles/external.xml
<param name="ext-rtp-ip" value="$${external_rtp_ip}"/>
<param name="ext-sip-ip" value="$${external_sip_ip}"/>

Віртуальний мережевий інтерфейс

Для того, щоб FreeSWITCH видавав клієнтам зовнішню IP-адресу, потрібно, щоб під час запуску він приєднався до мережевого інтерфейсу з цією адресою. Оскільки реального мережевого інтерфейсу із зовнішньою адресою всередині нашої локальної мережі нема. створимо віртуальний мережевий інтерфейс з такою адресою:

sudo ip addr add 123.123.123.123/32 dev lo

та перевіримо, чи він створився:

ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 123.123.123.123/32 scope global lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever

А для того, щоб не створювати цей віртуальний інтерфейс кожного разу вручну, можна його параметри внести до файлу конфігурації мережі:

/etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback
        post-up ip addr add 123.123.123.123/32 dev lo
        pre-down ip addr del 123.123.123.123/32 dev lo

Далі також потрібно вказати зовнішню адресу у файлі

/opt/freeswitch/conf/sip_profiles/external.xml
<param name="wss-binding"  value="123.123.123.123:7443"/>

Red5

Перевірити, чи вказано локальну IP-адресу у наступному файлі:

/usr/share/red5/webapps/sip/WEB-INF/bigbluebutton-sip.properties
bbb.sip.app.ip=192.168.1.100
bbb.sip.app.port=5070
 
freeswitch.ip=192.168.1.100
freeswitch.port=5060

Веб-сервер

/etc/bigbluebutton/nginx/sip.nginx
location /ws {
        proxy_pass https://123.123.123.123: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;
}

BBB

Якщо дозволено приєднання користувачів тільки для слухання (це можна перевірити наступним чином:)

grep enableListenOnly /usr/share/meteor/bundle/programs/server/assets/app/config/settings.yml
    enableListenOnly: true

то необхідно також внести наступні зміни до файлу

/usr/local/bigbluebutton/bbb-webrtc-sfu/config/default.yml
freeswitch:
    ip: 123.123.123.123
    sip_ip: 192.168.1.100
    port: 7443

Коли всі файли конфігурації відредаговано, перезапустити BBB-сервер:

bbb-conf --restart

Додаткові можливості

Greenlight

TURN-сервер

Заборона перекодування відеозаписів при роботі від батареї

Якщо BigBlueButton встановлено на ноутбуку, задля економії заряду батареї бажано тимчасово вимкнути оброблення черги відеозаписів, адже перекодування відео потребує багатьох ресурсів, і може швидко витратити заряд батареї. Для того, щоб автоматично зупиняти чергу відеозаписів після відключення живлення від мережі та поновлювати її після підключення до мережі створимо новий файл із правилами для udev:

"/etc/udev/rules.d/50-disable-BBB-recordings-processing-while-on-battery.rules"
SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="0", RUN+="/bin/systemctl stop bbb-rap-starter.service"
SUBSYSTEM=="power_supply", ENV{POWER_SUPPLY_ONLINE}=="1", RUN+="/bin/systemctl start bbb-rap-starter.service"

після чого перезапустимо udev:

sudo systemctl restart udev.service
bigbluebutton.txt · В останнє змінено: 2023/08/01 23:40 by wombat