Це стара версія документу!
Чи не найсуттєвішою відмінністю версії 2.6 є встановлення TURN-сервера за замовчуванням на тому ж комп'ютері, що й BigBlueButton. Це звільняє від необхідності використання додаткових сторонніх серверів для забезпечення підключення клієнтам з використанням TURN. Це досягається автоматичним встановленням та налаштуванням програми HAProxy на стандартному порті 443 (HTTPS), яка вміє відрізняти та перерозподіляти різні типи запитів до відповідних програм, зокрема, до TURN-сервера чи веб-сервера.
Якщо браузер Firefox не приймає та не передає зображення веб-камери або демонстрацію екрану, можливо, потрібно додати наступні рядки до файлу “/etc/bigbluebutton/bbb-html5.yml
”:
public: media: forceRelayOnFirefox: false
Таке рішення підказано відповіддю на форумі, хоча і суперечить офіційній документації на момент написання цієї статті.
Уявімо, що наш BBB-сервер встановлений в локальній мережі, відокремленій від Інтернету маршрутизатором. Нехай в нашого сервера локальна адреса 192.168.1.100
. Тоді на маршрутизаторі потрібно налаштувати перенаправлення наступних портів:
TCP 80 - HTTP TCP 443 - HTTPS TCP 7443 - FreeSWITCH TCP 1935 - Redis
та діапазон портів:
UDP 16384-32768 - WebRTC
Додати розділ 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
Встановити ключ репозиторія 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
Після встановлення 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/
Повинна з'явитися приблизно така сторінка:
Перевірити, чи сервер та HTML5 клієнт дійсно працюють, можна встановити демонстраційну сторінку:
sudo apt-get install bbb-demo
Це дозволить підключитися до сервера, вказавши деяке ім'я на сторінці входу (див. вище). При цьому оскільки ми підключилися за HTTP-протоколом, сервер може не дозволити там користуватися мікрофоном або камерою. Зазвичай вони дозволені лише для HTTPS-протоколу. Його ми налаштуємо пізніше.
Якщо демо-версія працює, потрібно видалити цю сторінку, щоб інші анонімні користувачі не могли під'єднуватися до нашого сервера.
sudo apt-get remove bbb-demo
Встановимо ім'я домену для нашого сервера. Наприклад, якщо ім'я 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/
.
Відредагуємо файл /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 у відповідних рядках конфігурації:
#---------------------------------------------------- # 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
streamBaseUrl=rtmp://bigbluebutton.example.com/screenshare jnlpUrl=https://bigbluebutton.example.com/screenshare jnlpFile=https://bigbluebutton.example.com/screenshare/screenshare.jnlp
note: enabled: true url: https://bbb.example.com/pad
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
у файлі
kurento: wsUrl: wss://bbb.example.com/bbb-webrtc-sfu
І перезапустити сервер
sudo bbb-conf --restart
externalAddress=123.123.123.123
<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"/>
<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
А для того, щоб не створювати цей віртуальний інтерфейс кожного разу вручну, можна його параметри внести до файлу конфігурації мережі:
# 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
Далі також потрібно вказати зовнішню адресу у файлі
<param name="wss-binding" value="123.123.123.123:7443"/>
Перевірити, чи вказано локальну IP-адресу у наступному файлі:
bbb.sip.app.ip=192.168.1.100 bbb.sip.app.port=5070 freeswitch.ip=192.168.1.100 freeswitch.port=5060
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; }
Якщо дозволено приєднання користувачів тільки для слухання (це можна перевірити наступним чином:)
grep enableListenOnly /usr/share/meteor/bundle/programs/server/assets/app/config/settings.yml enableListenOnly: true
то необхідно також внести наступні зміни до файлу
freeswitch: ip: 123.123.123.123 sip_ip: 192.168.1.100 port: 7443
Коли всі файли конфігурації відредаговано, перезапустити BBB-сервер:
bbb-conf --restart
Якщо BigBlueButton встановлено на ноутбуку, задля економії заряду батареї бажано тимчасово вимкнути оброблення черги відеозаписів, адже перекодування відео потребує багатьох ресурсів, і може швидко витратити заряд батареї. Для того, щоб автоматично зупиняти чергу відеозаписів після відключення живлення від мережі та поновлювати її після підключення до мережі створимо новий файл із правилами для udev:
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