Рассмотрим установку сервиса создания и управления виртуальными классами на базе ПО BigBlueButton

BigBlueButton — это возможность создавать виртуальные комнаты/классы, это возможность проводить совещания, обучение и другие виртуальные встречи.

Отличная замена Zoom, Skype и другим подобным программам

В данной статье основная цель - развернуть BigBlueButton внутри сети организации и организовать корпоративный сервис, используя свои SSL сертификаты.

Во всех статьях, которые есть на конец 2023 года, никто подробное не рассматривал данный вопрос и проблемы, и чаще всего использовались бесплатные сертификаты от Let's Encrypt.

Итак начнем.

Определимся, что имя сервера у нас будет bbb.domain.com.

Первый шаг - получаем сертификаты

Каким способом Вам дали сертификаты, сами ли создали, дал ли системный администратор, но у вас должно быть как минимум два файла *.crt и *.key, или один *.pfx

Во втором случае Вам необходимо из него получить crt и key

Делается это так:

openssl pkcs12 -in file.pfx -clcerts -nokeys -out bbb.crt

openssl pkcs12 -in file.pfx -nocerts -out key-encrypted.key

openssl rsa -in key-encrypted.key -out bbb.key

Разместим эти два файла в /etc/ssl/private

Шаг второй - основная установка

Открываем ссылку и проверяем/исполняем требования https://docs.bigbluebutton.org/administration/install

По поводу требования 16 GB of memory with swap enabled 8 CPU cores, with high single-thread performance

Сразу хочу сказать, система не запуститься если не будут соблюдаться требования в 16 Гб оперативной памяти и 4 процессоров CPU.

При установке будет писать "Your server needs to have (at least) 4 CPUs (8 recommended for production)." Поэтому на 4 процессорах  работать будет.

Учтите, что разработчики очень хорошо "связывают" свое ПО с релизом операционной системы, поэтому если Вы решите что сможете поставить BigBlueButton 2.7 на Ubuntu отличную от версии 20.04 (focal), будьте готовы исправлять зависимости библиотек, которые будут возникать. 

Далее, по вышеуказанной ссылке в разделе Pre-installation checks проверяем все другие параметры и выполняем их.

Запускаем в терминале ОС команду

wget -qO- https://raw.githubusercontent.com/bigbluebutton/bbb-install/v2.7.x-release/bbb-install.sh | bash -s -- -w -v focal-270 -s bbb.domain.com -d -g

где 

-s bbb.domain.com - имя хоста. Запись типа A - должна присутствовать в вашем DNS сервере.

-d - означает что мы будем использовать свои SSL сертификаты

-g - установим Greenlight. Web интерфейс для работы с BigBlueButton

После непродолжительной установки мы получим развернутный пакет, который можем проверить командой bbb-conf --checks

BigBlueButton Server 2.7.2 (492)

Kernel version: 5.4.0-166-generic

Distribution: Ubuntu 20.04.6 LTS (64-bit)

Memory: 16380 MB

CPU cores: 4

 

/etc/bigbluebutton/bbb-web.properties (override for bbb-web)

/usr/share/bbb-web/WEB-INF/classes/bigbluebutton.properties (bbb-web)

bigbluebutton.web.serverURL: https://bbb.example.com

defaultGuestPolicy: ALWAYS_ACCEPT

defaultMeetingLayout: CUSTOM_LAYOUT

 

/etc/nginx/sites-available/bigbluebutton (nginx)

server_name: bbb.example.com

port: 80, [::]:80127.0.0.1:82 http2 proxy_protocol, [::1]:82 http2127.0.0.1:81 proxy_protocol, [::1]:81

 

/opt/freeswitch/etc/freeswitch/vars.xml (FreeSWITCH)

local_ip_v4: 172.11.88.148

external_rtp_ip: 172.11.88.148

external_sip_ip: 172.11.88.148

 

/opt/freeswitch/etc/freeswitch/sip_profiles/external.xml (FreeSWITCH)

ext-rtp-ip: $${local_ip_v4}

ext-sip-ip: $${local_ip_v4}

ws-binding: 172.11.88.148:5066

wss-binding: 172.11.88.148:7443

 

UDP port ranges

 

FreeSWITCH: 16384-24576

kurento: 24577-32768

bbb-webrtc-sfu: 24577-32768

bbb-webrtc-recorder: 24577-32768

 

/usr/local/bigbluebutton/core/scripts/bigbluebutton.yml (record and playback)

playback_host: bbb.example.com

playback_protocol: https

ffmpeg: 4.2.7-0ubuntu0.1

 

/usr/share/bigbluebutton/nginx/sip.nginx (sip.nginx)

proxy_pass: 172.11.88.148

protocol: http

 

/usr/local/bigbluebutton/bbb-webrtc-sfu/config/default.yml (bbb-webrtc-sfu)

/etc/bigbluebutton/bbb-webrtc-sfu/production.yml (bbb-webrtc-sfu - override)

mediasoup.webrtc.*.announcedIp: 172.11.88.148

mediasoup.plainRtp.*.announcedIp: 172.11.88.148

kurento.ip: 172.11.88.148

kurento.url: ws://127.0.0.1:8888/kurento

freeswitch.sip_ip: 172.11.88.148

recordingAdapter: Kurento

recordScreenSharing: true

recordWebcams: true

codec_video_main: VP8

codec_video_content: VP8

 

/etc/bbb-webrtc-recorder/bbb-webrtc-recorder.yml (bbb-webrtc-recorder)

/etc/bigbluebutton/bbb-webrtc-recorder.yml (bbb-webrtc-recorder - override)

debug: false

recorder.directory: /var/lib/bbb-webrtc-recorder

 

/usr/share/meteor/bundle/programs/server/assets/app/config/settings.yml (HTML5 client)

/etc/bigbluebutton/bbb-html5.yml (HTML5 client config override)

build: 201

kurentoUrl: wss://bbb.example.com/bbb-webrtc-sfu

defaultFullAudioBridge: fullaudio

defaultListenOnlyBridge: fullaudio

sipjsHackViaWs: true

 

 

# Potential problems described below

Если  потенциальных проблем нет, то наша первая и основная часть  завершена. Вы можете открыть сайт https://bbb.domain.com и получить приглашение системы на вход.

Кстати, если бы при запуске скрипта использовалась команда

wget -qO- https://raw.githubusercontent.com/bigbluebutton/bbb-install/v2.7.x-release/bbb-install.sh | bash -s -- -w -v focal-270 -s bbb.domain.com -e Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript. -g

с использованием Let's Encrypt сертификатов, то наша бы статья на этом бы и завершилась, так как у вас был бы уже установленный полнофункциональный BigBlueButton

Но сертификаты у нас свои. Заметим что команда bbb-conf --check не дает ошибок, пробуем открыть сайт https://bbb.domain.com 

Если сайт открывается экспортируем цепочку корневых сертификатов  на сервер. У каждого сертификата есть один или несколько удостоверяющих центров, вот их сертификаты нам и нужны.

Выгружаем/экспортируем их все из браузера на сервер c раcширением *.crt 

Корневые сертификаты размещаем в двух папках /etc/ssl/certs и /usr/local/share/ca-certificates

Запускаем update-ca-certificates и добавляем корневые сертификаты в список доверенных 

Посмотрим что находится в файле /etc/haproxy/certbundle.pem там должны находится как наши сертификаты.

Перезапускаем BigBlueButton bbb-conf --restart 

Создадим пользователя - администратора

docker exec greenlight-v3 bundle exec rake admin:create

User account was created successfully!

Name: Administrator

Email: Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в вашем браузере должен быть включен Javascript.

Password: Administrator1!

Role: Administrator

Теперь мы можем зарегистрироваться и создать виртуальные комнаты. И вроде бы все хорошо, но...

Шаг третий. Как войти в созданную комнату

После создания комнаты - внутрь попасть почему то не получается.

Внизу появляется запись "The action can't be completed error"

А в консоли сайта появляется ошибка вида

main-7418853bb06c5bbc3addb59ce7bec97fe4ac85263776128f089ffa055ec709b6.js:10 POST https://bbb.domain.com/api/v1/meetings/1i7-7tn-ooa-ndj/start.json 400

main-7418853bb06c5bbc3addb59ce7bec97fe4ac85263776128f089ffa055ec709b6.js:12 Error: Request failed with status code 400

Проблема в том, что наши корневые сертификаты не знает Greenlight и SSL рукопожатие не проходит.

Причем ошибок BlueBigButton не сообщает  по команде bbb-conf --debug , и только в логах haproxy /var/log/haproxy.log Вы увидите множество ошибок при попытке войти в комнату

Nov 13 17:44:57 bbb haproxy[935]: 172.1.7.11:51226 [13/Nov/2023:17:44:57.790] nginx_or_turn/1: SSL handshake failure

Добавление наших корпоративных корневых сертификатов происходит так:

- Когда мы устанавливали BigBlueButton то в папке пользователя создалась папка greenlight-v3

- Открываем её и создаем папку mycerts

- Копируем наши сертификаты что экспортировали с браузера ( с расширением crt) в эту папку.

- редактируем файл docker-compose.yml и добавляем строки помеченные красным

 


version: '3'

 

services:

postgres:

image: postgres:14.6-alpine3.17

container_name: postgres

restart: unless-stopped

volumes:

- ./data/postgres/14/database_data:/var/lib/postgresql/data

environment:

- POSTGRES_USER=postgres

- POSTGRES_PASSWORD=bf7c5fc72f9786be04d669f79b8d6d7b5f9fd6888b8c27ac

 

redis:

image: redis:6.2-alpine3.17

container_name: redis

restart: unless-stopped

volumes:

- ./data/redis/database_data:/data

greenlight-v3:

entrypoint: [bin/start]

image: bigbluebutton/greenlight:v3

container_name: greenlight-v3

restart: unless-stopped

env_file: .env

ports:

- 127.0.0.1:5050:3000

logging:

driver: journald

volumes:

- ./data/greenlight-v3/storage:/usr/src/app/storage

- ./mycerts:/usr/local/share/ca-certificates

depends_on:

- postgres

- redis

Обратите внимание что Вам надо внести изменения в контейнере greenlight-v3 а не redis 

- сохраняем и снова запускаем установку

wget -qO- https://raw.githubusercontent.com/bigbluebutton/bbb-install/v2.7.x-release/bbb-install.sh | bash -s -- -w -v focal-270 -s bbb.domain.com -d -g

Да-да! Заново..   На сегодняшний день это единственный простой способ добавить корневые сертификаты в Greenlight

При повторной установке файл docker-compose.yml не изменяется и все наши изменения применяются в вновь созданном образе.

- активируем наши сертификаты

docker exec greenlight-v3 update-ca-certificates

- перезапускаем сервис bbb-conf --restart

- наслаждаемся полученным эффектом.

Мы смогли войти в виртуальную комнату и можем общаться, приглашать друзей, транслировать экран и так далее.

Шаг четвертый. Показ презентаций.

После первоначальной радости, мы увидим что есть одна проблема.

Не показываются презентации. Ни default.pdf ни любая другая. И как же проводить тогда обучение?

Можно конечно транслировать экран, но наверное стоит починить нашу проблему.

Заметим, что когда грузим нашу презентации в комнату, в логах /var/log/haproxy.log мы опять видим SSL handshake failure

Значит у нас что то еще не видит наши корневые сертификаты.

Для этого нам надо погрузится в чтение логов syslog

Nov 13 11:17:35 bbb systemd_start.sh[24362]: 2023-11-13T08:17:35.364Z backend-2 [#033[31merror#033[39m] : No file found. Error: self signed certificate in certificate chain

Nov 13 11:17:35 bbb systemd_start.sh[24362]: 2023-11-13T08:17:35.371Z backend-2 [#033[31merror#033[39m] : No file found. Error: self signed certificate in certificate chain

Nov 13 11:17:35 bbb systemd_start.sh[24362]: 2023-11-13T08:17:35.382Z backend-2 [#033[31merror#033[39m] : Error parsing image size. Error: self signed certificate in certificate chain.

SSL корневые сертификаты не видит NODE.JS поэтому мы можем поступаем так :

1. Редактируем /usr/share/meteor/bundle/main.js добавив в начале process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0;

2. bbb-conf --restart

Таким образом мы игнорируем ошибки SSL. К сожалению не смог достичь чтобы meteor прочитывал мои корневые сертификаты, поэтому вот такой путь.

Теперь наша система использует наши SSL сертификаты, позволяет создавать и входить в комнаты, грузить презентации и многое другое. Но это еще не всё....

Шаг четвертый. Запись вебинаров. 

Все отлично с нашей системой, но  при записи вебинаров   они не появляются в  списках, хотя создаются.

при выполнении команды bbb-record --republish в логах /var/log/bigbluebutton/post_process.log видим

[2023-11-14T16:56:30.044255 #13674] INFO -- : SSL_connect SYSCALL returned=5 errno=0 state=error: certificate verify failed

Решение - необходимо исправить  файл /usr/local/bigbluebutton/core/scripts/post_publish/post_publish_recording_ready_callback.rb

Добавляем  строку выделенную красным

uri = URI.parse(callback_url)
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = (uri.scheme == 'https')


http.verify_mode = OpenSSL::SSL::VERIFY_NONE

BigBlueButton.logger.info("Sending request to #{uri.scheme}://#{uri.host}#{uri.request_uri}")
request = Net::HTTP::Post.new(uri.request_uri)
request.set_form_data({ signed_parameters: payload_encoded })

response = http.request(request)

 

Здесь тоже пришлось отключить проверку SSL.

А вот теперь всё! У нас  рабочая полноценная система BigBlueButton с своими собственными сертификатами.

Дополнительная информация

чтение логов из докер образов

docker logs -f greenlight-v3 (follows the logs)

Copyright © 2024 AbakBot-online calculators. All Right Reserved. Author by Dmitry Varlamov