Extension du portail d'apprentissage scolaire sur Moodle et BigBlueButton

Fin mars 2020, une petite Ă©cole du Kamtchatka Ă©tait confrontĂ©e au mĂȘme problĂšme que toutes les Ă©coles de notre pays: comment enseigner aux enfants s'ils ne peuvent pas aller Ă  l'Ă©cole?

Il est impossible de simplement jeter le matériel pour une étude indépendante, il doit y avoir des commentaires, vous devez vous assurer que l'étudiant a bien compris le matériel.

Une étude des portails fédéraux a clairement montré que les leçons disponibles sont trop primitives pour celles-ci, et celles qui vous permettent de télécharger votre matériel ne survivront probablement pas à la charge accrue. Par conséquent, les exigences pour le portail de formation ont été formulées:

  1. Solution sur leurs serveurs (auto-hébergé). Refus des services publics, qui ne supportera probablement pas la charge (ce qui a été confirmé plus tard).
  2. Inscription manuelle. L'élÚve doit recevoir un identifiant / mot de passe de l'enseignant et ne pas aller aux ressources et s'inscrire de maniÚre indépendante.
  3. Travaillez dans un navigateur sur tous les appareils sans avoir Ă  installer de logiciel tiers. Étant donnĂ© que les parents et les enfants sont assis Ă  la maison et qu'il n'y a pas assez d'ordinateurs pour tout le monde, le portail de formation devrait fonctionner sur tous les appareils (ordinateurs, tablettes, smartphones) actuellement disponibles pour l'Ă©tudiant. L'installation de logiciels supplĂ©mentaires peut ĂȘtre un problĂšme, donc tout devrait fonctionner dans un navigateur sans plugins supplĂ©mentaires (Flash, etc.).
  4. Structuration des supports de cours, prĂ©sence de retour d'expĂ©rience sur chaque devoir rĂ©alisĂ©. Le travail effectuĂ© par l'Ă©tudiant doit se situer au mĂȘme endroit que la tĂąche. L'enseignant ne doit pas trier les devoirs. L'enseignant doit ĂȘtre capable de noter les erreurs des Ă©lĂšves directement dans son travail et d'y laisser des commentaires.
  5. Suivi de l'activité des élÚves. L'enseignant doit savoir quand un élÚve en particulier est entré et ce qu'il faisait.
  6. Autorisation de bout en bout dans les didacticiels vidéo. Les élÚves ne devraient pas avoir la possibilité de se présenter dans les leçons vidéo, et l'enseignant devrait avoir tous les outils pour modérer la leçon vidéo (allumer / éteindre les microphones et les caméras de chaque participant, interdire les chats privés, allumer / éteindre le chat général).

AprĂšs une recherche et des tests rapides, nous avons choisi un tas de Moodle + BigBlueButton comme satisfaisant Ă  toutes ces exigences en mĂȘme temps.

L'installation et la configuration ont pris 1 jour de congé, la formation des enseignants et des problÚmes d'organisation - une semaine de vacances.

Pour commencer, nous avons acheté un domaine (j'utiliserai le myportal.ru fictif partout), nous l'avons délégué aux serveurs DNS et commencé l'installation.

Installer 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.

Le thĂšme Moove est choisi comme le plus simple du point de vue de l'utilisateur. Sur la page principale de l'utilisateur, il y a une grande fenĂȘtre avec une demande pour entrer un nom d'utilisateur et un mot de passe, et aprĂšs la connexion - une liste de leçons. Il est impossible de se perdre.







Bien sûr, je voudrais que les matiÚres aient une liste de leçons pour aujourd'hui (un format plus familier pour l'école), mais depuis que les enseignants ont commencé à travailler avec le portail le deuxiÚme jour aprÚs l'installation, nous avons décidé de ne rien toucher d'autre et de ne pas changer de navigation.

Installez 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.

Installation d'un serveur de messagerie.
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


Puisqu'il y a beaucoup d'étudiants, nous créons des boßtes en utilisant un script. En utilisant le collage des valeurs de colonne, les lignes de création d'utilisateur sont déchargées du tableau Excel et copiées dans le script.

touch account.sh
chmod +x account.sh

Le script a la forme:

export LC_ALL='ru_RU.UTF-8'
zmprov createAccount a9arkhipov@myportal.ru 'dhfekjcjd' displayName ' ' givenName '' sn '' zimbraPasswordMustChange FALSE

Le script est exécuté en tant que zimbra.

su zimbra
./account.sh

Configurer 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


Personnalisation de 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.

( — — — ) , , ( ).

Création d'utilisateurs Moodle.

Encore une fois, nous prenons la plaque signalĂ©tique, le prĂ©nom, la classe, gĂ©nĂ©rons des mots de passe pour tous (par exemple, en utilisant ViPNet Password Generator) et gĂ©nĂ©rons des connexions et des adresses e-mail. Afin de ne pas ĂȘtre atrocement douloureux lors de l'utilisation de mots de passe dans csv et scripts, nous supprimons des mots de passe ceux qui contiennent 'et;



Enregistrez en csv dans ce format:

username:firstname:lastname:email:cohort1:city:country:lang:password
g1petrov:::g1petrov@myportal.ru:1  (2020)::RU:ru:drkcwf,f,

L'encodage du fichier doit ĂȘtre UTF-8, convertir facilement en notepad ++.

Administration ouverte - Utilisateurs - Télécharger les utilisateurs. Séparateur ":" Lignes d'aperçu "1000". Nous regardons la présence d'erreurs et si tout va bien - téléchargez.

Maintenant, nous avons tous les étudiants. Il reste à créer des professeurs et vous pouvez créer des leçons.

Administration ouverte - Cours - GĂ©rez les cours et les catĂ©gories. CrĂ©ez une catĂ©gorie. Par exemple, "École numĂ©ro 1". Nous attribuons des

catégories aux rÎles:



dans les gestionnaires, nous ajoutons des enseignants et des directeurs, et dans les créateurs du cours pour tous les enseignants.
Nous créons un cours (par exemple, 11 A Informatique). Pendant le cours, l'enseignant ou le chef d'établissement clique sur "Participants" - "Enregistrer les utilisateurs au cours".



Vous pouvez sélectionner un groupe (par exemple, «11 A (2020)») pour enregistrer tous les utilisateurs de la classe.
Pour ajouter des éléments à la leçon, activez le mode édition et ajoutez un élément.



Par exemple, la conférence BigBlueButton. Pour démarrer la conférence, cliquez sur "Se connecter à la session". Le didacticiel vidéo a commencé.



Plus d'un mois, l'expérience dans les didacticiels vidéo a été accumulée.

  1. Il est préférable d'utiliser des microphones de bureau USB bon marché tels que le Fifine K669 ou le DEXP U700 pour l'apprentissage en ligne. Moins il y a de boutons sur le microphone, mieux c'est.
  2. Les enseignants du secondaire ont presque cessĂ© d'utiliser les webcams au milieu du mois, car l'essentiel Ă©tait la prĂ©sentation et la voix. La vidĂ©o distrait les Ă©lĂšves et empĂȘche l'enseignant de se rĂ©veiller Ă  8h10 et de commencer immĂ©diatement la leçon.
  3. Dans les 30 minutes d'une leçon en ligne, les enseignants en disent beaucoup plus que la plupart des Ă©lĂšves ont le temps d'apprendre par eux-mĂȘmes en mĂȘme temps.

D'autres Ă©coles ont demandĂ© "Je veux la mĂȘme chose que Zoom sur le lien", donc un serveur sĂ©parĂ© a Ă©tĂ© crĂ©Ă© avec BigBlueButton et Greenlight comme panneau de contrĂŽle.

Il est dĂ©fini de la mĂȘme maniĂšre que le BBB, uniquement avec le commutateur -g Ă  la fin:

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

Il existe une protection contre les interruptions de cours (phénomÚne appelé zoom bombardement): lors de la création d'une conférence, vous pouvez activer le mode «Approbation du modérateur avant la connexion». Chaque fois qu'un élÚve entre, une confirmation de l'enseignant sera requise, l'enseignant ne laissera entrer ses élÚves que par un nom de famille familier.



Pour les consultations individuelles, un serveur Jitsi a été déployé, ce qui vous permet de créer rapidement une salle et de partager un lien, mais ils ne l'utilisent pas tellement préférant créer des conférences BigBlueButton pour chaque étudiant sur le portail principal.

J'espÚre que notre expérience est utile à quelqu'un et nous avons rendu le monde un peu meilleur.

All Articles