В конце марта 2020 маленькая камчатская школа столкнулась с той же проблемой, что и все школы нашей страны: как учить детей если они не могут ходить в школу?

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

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

  1. Решение на своих серверах (self-hosted). Отказ от публичных сервисов, которые скорее всего не справятся с нагрузкой (что позже и подтвердилось).
  2. Ручная регистрация. Ученик должен получить логин/пароль от классного руководителя, а не ходить по ресурсам и самостоятельно регистрироваться.
  3. Работа в браузере на всех устройствах без необходимости установки стороннего ПО. Так как и родители и дети сидят дома, а компьютеров на всех не хватит, то учебный портал должен запускаться на любых устройствах (компьютеры, планшеты, смартфоны), которые в данный момент доступны ученику. Установка дополнительного ПО может стать проблемой, поэтому работать все должно в браузере без дополнительных плагинов (Flash и т.д.).
  4. Структурирование материалов урока, наличие обратной связи по каждому выполненному заданию. Выполненная учеником работа должна лежать там же, где и задание. Учитель не должен заниматься сортировкой домашних работ. У учителя должна быть возможность отмечать ошибки ученика прямо на его работе и там же оставлять комментарии.
  5. Контроль активности учащихся. Учителю надо знать, когда конкретный ученик заходил и что делал.
  6. Сквозная авторизация в видеоуроках. Ученикам нельзя давать возможность самостоятельно представляться в видеоуроках, а у учителя должны быть все инструменты модерации видеоурока (включение/выключение микрофонов и камеры каждого участника, запрет личных чатов, включение/выключение общего чата).

После беглого поиска и тестирования выбрали связку Moodle+BigBlueButton как удовлетворяющую всем этим требованиям одновременно.

Установка и настройка заняла 1 выходной день, обучение учителей и решение организационных вопросов — неделю каникул.

Для начала мы купили домен (я везде буду использовать вымышленный myportal.ru), делегировали его на DNS-серверы и начали установку.

Установка Moodle
Для установки Moodle взята «голая» виртуальная машина Ubuntu 18.04 с 8 vCPU, 24 ГБ ОЗУ и 2 ТБ места. Изначально установлен только SSH-сервер.

Подробно установка описана тут.
Чтобы не писать sudo перед каждой командой логинимся под root:

$ sudo su -

Обновляем систему:

apt update
apt dist-upgrade

Настраиваем timezone:

dpkg-reconfigure tzdata

Удаляем лишние компоненты:

apt-cache search cloud-init
bash -c "echo 'datasource_list: [ None ]' sudo -s tee /etc/cloud/cloud.cfg.d/90_dpkg.cfg"
apt purge -y cloud-init
rm -Rf /etc/cloud /var/lib/cloud

Ставим apache, mysql и php:

apt install apache2 mysql-client mysql-server php libapache2-mod-php mc

Проходим мастер для защиты mysql:

mysql_secure_installation

Ставим остальные пакеты, которые нужны Moodle:

apt install graphviz aspell ghostscript clamav php7.2-pspell php7.2-curl php7.2-gd php7.2-intl php7.2-mysql php7.2-xml php7.2-xmlrpc php7.2-ldap php7.2-zip php7.2-soap php7.2-mbstring

Редактируем часовой пояс в /etc/php/7.2/cli/php.ini и /etc/php/7.2/apache/php.ini (естественно, указываем свой):

[Date]
date.timezone = "Asia/Kamchatka"

Качаем Moodle и распаковываем его в каталог /var/www/html/moodle:

wget https://download.moodle.org/download.php/stable38/moodle-latest-38.tgz

Изначально права на каталог /var/www/html/moodle 0777, но после установки плагинов обязательно поменяем их на 0755:

chmod 0777 -R /var/www/html/moodle

Создаем каталог /var/www/moodledata, в нем наш Moodle будет хранить все файлы. На каталог /var/www/moodledata выставляем права 0777:

mkdir /var/www/moodledata
chmod 0777 -R /var/www/moodledata

Удаляем сайт по-умолчанию из /etc/apache2/sites-available/ и создаем там свою конфигурацию с именем портала (например, urok.myportal.ru.conf)и следующим содержимым:

<VirtualHost *:80>
ServerName urok.myportal.ru
ServerAdmin help@myportal.ru
DocumentRoot /var/www/html/moodle/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

Делаем рестарт apache2 и получаем бесплатный сертификат:

service apache2 restart
add-apt-repository ppa:certbot/certbot
apt update
apt install certbot python3-certbot-apache
certbot --apache -d urok.myportal.ru
service apache2 restart

В результате к нашему сайту можно подключаться по https, а конфигурация apache2 будет такой в двух файлах (с редиректом на https):

<VirtualHost *:80>
ServerName urok.myportal.ru
ServerAdmin help@myportal.ru
DocumentRoot /var/www/html/moodle/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =urok.myportal.ru
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName urok.myportal.ru
ServerAdmin help@myportal.ru
DocumentRoot /var/www/html/moodle/
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLCertificateFile /etc/letsencrypt/live/urok.myportal.ru/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/urok.myportal.ru/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf

Настраиваем ufw:

ufw enable
ufw allow ssh
ufw allow 'Apache Full'
ufw delete allow 'Apache'
ufw status
Status: active
To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
Apache Full                ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
Apache Full (v6)           ALLOW       Anywhere (v6)

Создаем базу данных, 'pass' меняем на свой сложный пароль:

mysql -u root -p
CREATE DATABASE moodle DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,CREATE TEMPORARY TABLES,DROP,INDEX,ALTER ON moodle.* TO 'moodleuser'@'localhost' IDENTIFIED BY 'pass';

Теперь можно открыть наш сайт в браузере и пройти мастер установки Moodle. Потребуется указать имя базы данных (moodle), логин (moodleuser) и пароль, который мы придумали на предыдущем шаге.

После установки прописываем запуск cron.php по расписанию:

crontab -u www-data -e
* * * * * /usr/bin/php  /var/www/html/moodle/admin/cli/cron.php >/dev/null

Тут замечена некоторая неторопливость Moodle, поэтому сразу был установлен Memcached:
apt install memcached libmemcached-tools php-memcached

Cтавим следующие плагины (Администрирование — Плагины — Установка плагинов):
— Opcache management для производительности https://moodle.org/plugins/tool_opcache
— Atto: Styles для визуального редактора https://moodle.org/plugins/atto_styles
— BigBlueButtonBN для видеоуроков https://moodle.org/plugins/mod_bigbluebuttonbn
— Moove в качестве темы оформления https://moodle.org/plugins/theme_moove
После установки плагинов меняем права на каталог moodle:

chmod 0755 -R /var/www/html/moodle

Это требуется для безопасности: веб-сервер выполняется от имени www-data, поэтому он не сможет писать в каталог /var/www/html/moodle. Как я уже писал, хранит свои файлы Moodle в отдельном каталоге /var/www/moodledata.

В дальнейшем на время обновления плагинов и тем можно временно менять права на каталог:

cd /var/www/html/moodle/
chmod -R 0757 mod/
chmod -R 0757 theme/

Выполнять обновление плагинов и тем через админку moodle и возвращать права:

chmod -R 0755 mod/
chmod -R 0755 theme/

На этом установка Moodle завершена, приступаем к установке BigBlueButton.

Тема Moove выбрана как самая простая с точки зрения пользователя. На главной странице пользователя встречает большое окно с просьбой ввести логин и пароль, а после логина — список уроков. Заблудиться невозможно.







Конечно, хотелось бы вместо предметов иметь список уроков на сегодня (более привычный формат для школы), но так как на второй день после установки с порталом начали работать учителя, то решили больше ничего не трогать и не менять в навигации.

Установка BigBlueButton
Входящий в состав BBB Freeswitch не дружит с виртуализацией и разработчик настойчиво рекомендует ставить BBB на физический сервер. На антресольке был найден сервер Dell R610 с 2х Xeon X5650, на который и был установлен BBB.

ОС по рекомендациям разработчика была выбрана Ubuntu 16.04.
Обновляем систему и выставляем часовой пояс:

apt update
apt dist-upgrade
dpkg-reconfigure tzdata

Включаем ufw и открываем порты, которые будет использовать BBB:

ufw enable
ufw allow ssh
ufw allow in 80,443,1935,7443/tcp
ufw allow in 16384:32768/udp

Создаем каталог /var/bigbluebutton/, в нем будут храниться записи вебинаров.
Я для этого каталога использовал отдельный LUN объемом 4 ТБ.

Проверяем локаль:

cat /etc/default/locale

Если она отличается от en_US.UTF-8, то делаем следующее:

apt-get install language-pack-en
update-locale LANG=en_US.UTF-8
exit

Логинимся заново и убеждаемся, что локаль en_US.UTF-8:

# cat /etc/default/locale
LANG=en_US.UTF-8

Теперь проверяем язык в show-environment. Если он отличается от en_US.UTF-8, то исправляем:

systemctl show-environment
systemctl set-environment LANG=en_US.UTF-8
systemctl show-environment
LANG=en_US.UTF-8

Дальше воспользуемся готовым скриптом установки BBB https://github.com/bigbluebutton/bbb-install

wget -qO- https://ubuntu.bigbluebutton.org/bbb-install.sh | bash -s -- -v xenial-22 -s bbb.myportal.ru -e help@myportal.ru

Вместо bbb.myportal.ru и help@myportal.ru подставляем свои значения. Сервер будет установлен, получен бесплатный сертификат Let's Encrypt, настроен https.

После установки удаляем лишнее:

apt-get purge bbb-demo

Moodle будет создавать комнаты BigBlueButton используя API. Получаем ключ API:

# bbb-conf --secret
    URL: https://bbb.myportal.ru/bigbluebutton/
    Secret: cBjkdnjasuibnjnfdksagn6967sfrs

Этот URL и ключ мы укажем в настройка модуля Moodle BigBlueButtonBN.

Установка почтового сервера.
Moodle отправляет очень много уведомлений. Даже если в настройках все выключить, пользователь может для конкретного предмета или урока включить отправку уведомлений на почту и ему будет отправляться письмо по каждому событию.



Сначала мы использовали pdd.yandex.ru, но уже на второй день столкнулись с ограничением в 3000 писем с одного ящика. Поэтому pdd.yandex.ru был заменен собственным сервером Zimbra.
Берем Ubuntu 18.04 (4vCPU и 16 ГБ ОЗУ на наши 1000 пользователей) и качаем для нее Zimbra Open Source Edition: https://www.zimbra.com/downloads/zimbra-collaboration-open-source/

Первым делом надо прописать в hosts реальный ip и имя сервера:

mcedit /etc/hosts
127.0.0.1 localhost
77.88.99.11 mail.myportal.ru mail

Удаляем лишние компоненты:

apt-cache search cloud-init
bash -c "echo 'datasource_list: [ None ]' sudo -s tee /etc/cloud/cloud.cfg.d/90_dpkg.cfg"
apt purge -y cloud-init
rm -Rf /etc/cloud /var/lib/cloud
systemctl disable systemd-resolved
systemctl stop systemd-resolved
echo "nameserver 77.88.8.8" > /etc/resolv.conf

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

wget https://files.zimbra.com/downloads/8.8.15_GA/zcs-8.8.15_GA_3869.UBUNTU18_64.20190918004220.tgz
tar -xzf zcs-8.8*
cd /home/zcs-8.8.15_GA_3869.UBUNTU18_64.20190918004220/
./install.sh

Cоглашаемся с лицензионным соглашением и выбираем компоненты для установки.

Я ставил все, кроме zimbra-drive, zimbra-chat и zimbra-imapd
Во время установки скрипт спросит название домена. Необходимо указать домен в формате myportal.ru

DNS ERROR resolving MX for mail.myportal.ru
Change domain name? Yes
myportal.ru

В конце указываем пароль администратора через оции 7 — 4 — ввод пароля — r — a.
Включаем ufw и открываем порты, которые будет использовать Zimbra:

ufw enable
ufw allow ssh
ufw allow in 25,80,110,143,443,465,587,993,995,5222,5223,9071,7071/tcp

Теперь можно зайти в админку Zimbra по адресу mail.myportal.ru:7071
Для получения сертификата Let's Encrypt будет использоваться этот скрипт: https://github.com/VojtechMyslivec/letsencrypt-zimbra

apt install software-properties-common
add-apt-repository ppa:certbot/certbot
apt update
apt install certbot
git clone https://github.com/VojtechMyslivec/letsencrypt-zimbra.git /opt/letsencrypt-zimbra
cp /opt/letsencrypt-zimbra/letsencrypt-zimbra.cfg{.example,}

В конфиге необходимо указать свою почту и имя сервера:

mcedit /opt/letsencrypt-zimbra/letsencrypt-zimbra.cfg
email="help@myportal.ru"
common_names=( "mail.myportal.ru" )

Разрешаем пользователю zimbra запускать certbot:

cp configs/sudoers.conf /etc/sudoers.d/zimbra_certbot

Получаем сертификат:

sudo -Hiu zimbra /opt/letsencrypt-zimbra/obtain-and-deploy-letsencrypt-cert.sh -v

Добавляем в планировщик автоматическое обновление сертификата:

cp configs/cron.conf /etc/cron.d/letsencrypt-zimbra


Так как учеников много, то ящики мы создаем с помощью скрипта. Из таблицы Excel с помощью склеивания значений столбцов выгружается строки создания пользователей и копируются в скрипт.

touch account.sh
chmod +x account.sh

Скрипт имеет вид:

export LC_ALL='ru_RU.UTF-8'
zmprov createAccount a9arkhipov@myportal.ru 'dhfekjcjd' displayName 'Андрей Архипов' givenName 'Андрей' sn 'Архипов' zimbraPasswordMustChange FALSE

Скрипт запускается от имени пользователя zimbra.

su zimbra
./account.sh

Настройка BigBlueButton
Для того, чтобы BBB говорил по-русски установим русскую озвучку:

wget https://files.freeswitch.org/releases/sounds/freeswitch-sounds-ru-RU-elena-8000-1.0.51.tar.gz
wget https://files.freeswitch.org/releases/sounds/freeswitch-sounds-ru-RU-elena-16000-1.0.51.tar.gz
wget https://files.freeswitch.org/releases/sounds/freeswitch-sounds-ru-RU-elena-32000-1.0.51.tar.gz
wget https://files.freeswitch.org/releases/sounds/freeswitch-sounds-ru-RU-elena-48000-1.0.51.tar.gz

И распаковываем все в /opt/freeswitch/share/freeswitch/sounds.

Необходимо поправить права на каталог, чтобы к файлам имел доступ freeswitch:

chown -R freeswitch:daemon /opt/freeswitch/share/freeswitch/sounds/ru/

Редактируем vars.xml:

mcedit /opt/freeswitch/etc/freeswitch/vars.xml

<X-PRE-PROCESS cmd="set" data="sound_prefix=$${sounds_dir}/ru/RU/elena"/>
Презентация, которая по-умолчнию отображается в комнатах лежит по адресу: /var/www/bigbluebutton-default/default.pdf

Настройки сервера:

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

Некоторые параметры с объяснениями:

Сообщение в чате, которое будет отображаться при входе пользователя:

defaultWelcomeMessage=Welcome to <b>%%CONFNAME%%</b>!
defaultWelcomeMessageFooter=support@myportal.ru

muteOnStart=true # Присоединяться к конференции с выключенным микрофоном.
allowModsToUnmuteUsers=true # Разрешить учителю включать микрофон учеников 
attendeesJoinViaHTML5Client=true # использовать HTML5 клиент вместо Flash
moderatorsJoinViaHTML5Client=true # использовать HTML5 клиент вместо Flash
breakoutRoomsEnabled=false # Выключить групповые комнаты
breakoutRoomsRecord=false
breakoutRoomsPrivateChatEnabled=false
allowDuplicateExtUserid=true # Разрешить одному пользователи входить с нескольких устройств одновременно

Следующие настройки влияют на пользователей со статусом «заблокировано» в конференции



# Default Lock Settings
lockSettingsDisableCam=true
lockSettingsDisableMic=false
lockSettingsDisablePrivateChat=true
lockSettingsDisablePublicChat=false
lockSettingsDisableNote=true
lockSettingsHideUserList=false
lockSettingsLockedLayout=false
lockSettingsLockOnJoin=true
lockSettingsLockOnJoinConfigurable=true

Настройки клиента:

mcedit /usr/share/meteor/bundle/programs/server/assets/app/config/settings.yml

Здесь я сменил качество по-умолчанию на hd и добавил значение скорости, которое будет отображаться пользователю при попытке включить камеру:

cameraProfiles:
    - id: low
      name: Low quality 100 kbps
      default: false
      bitrate: 100
    - id: medium
      name: Medium quality 200 kbps
      default: false
      bitrate: 200
    - id: high
      name: High quality 500 kbps
      default: true
      bitrate: 500
    - id: hd

Добавил поддержку Яндекс.Браузера, иначе пользователей с таким браузером не пустит в конференцию с ошибкой «Неподдерживаемый браузер»:

minBrowserVersions:
  - browser: YandexBrowser
    version: 15

После изменения настроек необходимо перезапустить сервер:

bbb-conf --stop
bbb-conf --start


Настройка Moodle
Первым делом настраиваем главную страницу: Администрирование — Главная страница — настройки главной страницы. На главной мы отсавили только Объявления, а после входа отображаются Курсы, на которые пользователь записан и Объявления.

Дальше идем в Администрирование — Сервер. Настраиваем Имя техподдержки, Электронная почта техподдержки.

В Opcache management убеждаемся, что кеширование работает.

В Сервер / Электронная почта указываем настройки отправки писем.

Сервер: mail.myportal.ru, Безопасность TLS, Тип аутентификации LOGIN, Логин noreply@myportal.ru, Пароль тот, что указывали при создании ящика. Разрешенные почтовые домены — myportal.ru, Информация о сайте, с которого отправлено сообщение — Всегда.

В Оценки — Общие настройки «Оценка в баллах по умолчанию» указываем привычные школе «5».
В настройке темы Moove (Внешний вид — Moove) я добавил завершающий код SCSS чтобы работал плагин ATTO:

Завершающий код
.attostylesbox {
    padding: 10px;
    box-sizing: border-box;
    border-radius: 5px;
    margin-bottom: 10px;
    width: 100%
}
.attostylesbox.attostylesbox-solid {
    color: white;
}
.attostylesbox.attostylesbox-outline {
    background-color: white;
    border-width: 2px;
    border-style: solid;
}
.attostylesbox.attostylesbox-callout {
    background-color: white;
    border: 1px solid #eee;
    border-left-width: 5px;
}
.attostylesbox.attostylesbox-solid-blue {
    background-color: #7d9fd3;
}
.attostylesbox.attostylesbox-solid-green {
    background-color: #98ca3e;
}
.attostylesbox.attostylesbox-solid-yellow {
    background-color: #ffcf35;
}
.attostylesbox.attostylesbox-solid-red {
    background-color: #ef4540;
}
.attostylesbox.attostylesbox-solid-black {
    background-color: #3a3a3a;
}
.attostylesbox.attostylesbox-outline-blue {
    border-color: #7d9fd3;
    color: #7d9fd3;
}
.attostylesbox.attostylesbox-outline-green {
    border-color: #98ca3e;
    color: #98ca3e;
}
.attostylesbox.attostylesbox-outline-yellow {
    border-color: #ffcf35;
    color: #ffcf35;
}
.attostylesbox.attostylesbox-outline-red {
    border-color: #ef4540;
    color: #ef4540;
}
.attostylesbox.attostylesbox-outline-black {
    border-color: #3a3a3a;
    color: #3a3a3a;
}
.attostylesbox.attostylesbox-callout-blue {
    border-left-color: #7d9fd3;
}
.attostylesbox.attostylesbox-callout-green {
    border-left-color: #98ca3e;
}
.attostylesbox.attostylesbox-callout-yellow {
    border-left-color: #ffcf35;
}
.attostylesbox.attostylesbox-callout-red {
    border-left-color: #ef4540;
}
.attostylesbox.attostylesbox-callout-black {
    border-left-color: #3a3a3a;
}
.attostylestextmarker {
    border-radius: 5px;
    padding-left: 5px;
    padding-right: 5px;
}
.attostylestextmarker.attostylestextmarker-green {
    background: #99ffcc;
}
.attostylestextmarker.attostylestextmarker-pink {
    background: #ffccff;
}
.attostylestextmarker.attostylestextmarker-yellow {
    background: #ffffcc;
}


В настройках главной страницы можно выключить все лишние блоки и рекламу спонсоров, а в настройках нижнего колонтитула указать контакты техподдержки.

В настройках плагинов (Администрирование — Плагины — Обзор плагинов) выбираем Видеоконференция BigBlueButton и указываем URL сервера BigBlueButton и секретный ключ, который мы получали командой bbb-conf --secret.

В настройках аутентификации (Администрирование — Плагины — Аутентификация — Ручная регистрация) запрещаем пользователям менять имя, фамилию, адрес электронной почты и отключаем самостоятельную регистрацию ( в разделе Аутентификация).

Создание пользователей Moodle.

Снова берем табличку с фамилией, именем, классом, генерируем всем пароли (например, с помощью ViPNet Password Generator) и формируем логины и адреса электронной почты. Чтобы не было мучительно больно при использовании паролей в csv и скриптах, удаляем из паролей те, что содержат ' и;



Сохраняем в csv в таком формате:

username:firstname:lastname:email:cohort1:city:country:lang:password
g1petrov:Владимир:Петров:g1petrov@myportal.ru:1 Г (2020):Елизово:RU:ru:drkcwf,f,

Кодировка файла должна быть UTF-8, преобразовывать удобно в notepad++.

Открываем Администрирование — Пользователи — Загрузить пользователей. Разделитель ":" Строк предпросмотра «1000». Смотрим на наличие ошибок и если все хорошо — загружаем.

Теперь у нас есть все ученики. Осталось создать учителей и можно создавать уроки.

Открываем Администрирование — Курсы — Управление курсами и категориями. Создаем категорию. Например, «Школа №1».

Назначаем роли категории:



В Управляющих добавляем завучей и директора, в создателей курса всех учителей.
Создаем курс (например, 11 А Информатика ). Находясь в курсе учитель или завуч нажимают «Участники» — «Записать пользователей на курс».



Можно выбрать группу (например, «11 А (2020)»), чтобы записать всех пользователей из класса.
Чтобы добавить элементы в урок включаем режим редактирования и добавляем элемент.



Например, конференцию BigBlueButton. Для запуска конференции нажимаем «Подключиться к сеансу». Видеоурок начался.



За месяц накопился опыт работы в режиме видеоуроков.

  1. Лучше всего для онлайн-обучения использовать недорогие настольные USB-микрофоны типа Fifine K669 или DEXP U700. Чем меньше кнопок на микрофоне, тем лучше.
  2. Учителя старших классов к середине месяца практически перестали пользоваться веб-камерами, так как главное — презентация и голос. Видео отвлекает учеников и не позволяет учителю просыпаться в 8:10 и сразу начинать урок.
  3. За 30 минут онлайн-урока учителя рассказывают намного больше, чем большинство учеников успевают выучить самостоятельно за то же время.

От других школ были запросы «хочется такого же, как Zoom, чтобы по ссылке», поэтому был поднят отдельный сервер с BigBlueButton и Greenlight в качестве панели управления.

Ставится он так же, как и BBB, только с ключом -g в конце:

wget -qO- https://ubuntu.bigbluebutton.org/bbb-install.sh | bash -s -- -v xenial-22 -s vks.myportal.ru -e help@myportal.ru -g
cd greenlight/
docker exec greenlight-v2 bundle exec rake admin:create

Есть защита от срыва уроков (явление, названное zoom bombing): при создании конференции можно включить режим «Требуется одобрение модератора перед подключением». При каждом входе ученика потребуется подтверждение учителя, учитель будет пускать только своих учеников по знакомой фамилии.



Для индивидуальных консультаций был развернут сервер Jitsi, который позволяет быстро создать комнату и поделиться ссылкой, но им так активно не пользуются предпочитая создавать конференции BigBlueButton для каждого ученика на основном портале.

Надеюсь, наш опыт кому-то пригодится и мы сделали мир чуточку лучше.