Erweiterung des Schullernportals auf Moodle und BigBlueButton

Ende März 2020 hatte eine kleine Kamtschatka-Schule das gleiche Problem wie alle Schulen in unserem Land: Wie kann man Kinder unterrichten, wenn sie nicht zur Schule gehen können?

Es ist unmöglich, Material für ein unabhängiges Studium einfach wegzuwerfen. Es muss Feedback geben. Sie müssen sicherstellen, dass der Schüler das Material richtig verstanden hat.

Eine Studie über Bundesportale hat deutlich gemacht, dass die verfügbaren Lektionen für Themen zu primitiv sind und dass diejenigen, mit denen Sie Ihr Material hochladen können, die erhöhte Belastung wahrscheinlich nicht überstehen. Daher wurden die Anforderungen an das Schulungsportal formuliert:

  1. Lösung auf ihren Servern (selbst gehostet). Ablehnung von öffentlichen Diensten, die höchstwahrscheinlich nicht mit der Belastung fertig werden (was später bestätigt wurde).
  2. Manuelle Registrierung. Der Schüler sollte vom Klassenlehrer ein Login / Passwort erhalten und nicht zu Ressourcen gehen und sich unabhängig registrieren.
  3. Arbeiten Sie auf allen Geräten in einem Browser, ohne dass Software von Drittanbietern installiert werden muss. Da sowohl Eltern als auch Kinder zu Hause sitzen und nicht genügend Computer für alle vorhanden sind, sollte das Schulungsportal auf allen Geräten (Computern, Tablets, Smartphones) ausgeführt werden, die dem Schüler derzeit zur Verfügung stehen. Das Installieren zusätzlicher Software kann ein Problem sein, daher sollte alles in einem Browser ohne zusätzliche Plugins (Flash usw.) funktionieren.
  4. Strukturierung der Unterrichtsmaterialien, Vorhandensein von Feedback zu jeder abgeschlossenen Aufgabe. Die vom SchĂĽler geleistete Arbeit sollte am selben Ort wie die Aufgabe liegen. Der Lehrer sollte die Hausaufgaben nicht sortieren. Der Lehrer sollte in der Lage sein, Fehler der SchĂĽler direkt bei seiner Arbeit zu notieren und dort Kommentare zu hinterlassen.
  5. Überwachung der Schüleraktivität. Der Lehrer muss wissen, wann ein bestimmter Schüler hereinkam und was er tat.
  6. End-to-End-Autorisierung in Video-Tutorials. Den Schülern sollte nicht die Möglichkeit gegeben werden, sich im Videokurs vorzustellen, und der Lehrer sollte über alle Tools zum Moderieren des Videokurses verfügen (Ein- und Ausschalten der Mikrofone und Kameras jedes Teilnehmers, Verbieten von privaten Chats, Ein- und Ausschalten des allgemeinen Chats).

Nach einer kurzen Suche und Prüfung haben wir eine Reihe von Moodle + BigBlueButton ausgewählt, um alle diese Anforderungen gleichzeitig zu erfüllen.

Installation und Konfiguration dauerten 1 Tag, Lehrerausbildung und organisatorische Probleme - eine Woche Urlaub.

Zunächst haben wir eine Domain gekauft (ich werde die fiktive myportal.ru überall verwenden), sie an DNS-Server delegiert und die Installation gestartet.

Installieren Sie 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.

Das Moove-Thema wird aus Sicht des Benutzers als das einfachste ausgewählt. Auf der Hauptseite des Benutzers befindet sich ein großes Fenster, in dem Sie aufgefordert werden, einen Benutzernamen und ein Kennwort einzugeben, und nach dem Anmelden eine Liste der Lektionen. Es ist unmöglich, sich zu verlaufen.







Natürlich möchte ich anstelle der Fächer eine Liste der Lektionen für heute haben (ein vertrauteres Format für die Schule), aber da die Lehrer am zweiten Tag nach der Installation mit dem Portal zu arbeiten begannen, haben wir beschlossen, nichts anderes zu berühren und die Navigation nicht zu ändern.

Installieren Sie 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.

Mail-Server installieren.
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


Da es viele SchĂĽler gibt, erstellen wir Boxen mit einem Skript. Durch das Verkleben von Spaltenwerten werden die Benutzererstellungszeilen aus der Excel-Tabelle entladen und in das Skript kopiert.

touch account.sh
chmod +x account.sh

Das Skript hat die Form:

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

Das Skript wird als Zimbra ausgefĂĽhrt.

su zimbra
./account.sh

Konfigurieren Sie 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-Anpassung
: — — . , , .

— . , .

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-Benutzer erstellen.

Wieder nehmen wir das Typenschild, den Vornamen und die Klasse, generieren Passwörter für alle (z. B. mit ViPNet Password Generator) und generieren Logins und E-Mail-Adressen. Um bei der Verwendung von Passwörtern in CSV und Skripten nicht unerträglich schmerzhaft zu sein, entfernen wir diejenigen aus den Passwörtern, die 'und;



Speichern Sie in CSV in diesem Format:

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

Die Dateicodierung sollte UTF-8 sein und bequem in Notepad ++ konvertiert werden.

Open Administration - Benutzer - Benutzer herunterladen. Trennzeichen ":" Vorschau der Zeilen "1000". Wir prĂĽfen das Vorhandensein von Fehlern und ob alles in Ordnung ist - Download.

Jetzt haben wir alle Schüler. Es bleibt, Lehrer zu erstellen, und Sie können Unterricht erstellen.

Offene Verwaltung - Kurse - Verwalten von Kursen und Kategorien. Erstellen Sie eine Kategorie. Zum Beispiel "Schulnummer 1". Wir weisen

den Rollen Kategorien zu:



In Managern fĂĽgen wir Lehrer und Direktoren hinzu und in den Erstellern des Kurses fĂĽr alle Lehrer.
Wir erstellen einen Kurs (zum Beispiel 11 A Informatics). Während des Kurses klickt der Lehrer oder Schulleiter auf "Teilnehmer" - "Benutzer für den Kurs registrieren".



Sie können eine Gruppe auswählen (z. B. „11 A (2020)“), um alle Benutzer aus der Klasse aufzuzeichnen.
Um der Lektion Elemente hinzuzufĂĽgen, aktivieren Sie den Bearbeitungsmodus und fĂĽgen Sie ein Element hinzu.



Zum Beispiel die BigBlueButton-Konferenz. Klicken Sie zum Starten der Konferenz auf "Verbindung zur Sitzung herstellen". Das Video-Tutorial hat begonnen.



Ăśber einen Monat lang wurden Erfahrungen in Video-Tutorials gesammelt.

  1. Verwenden Sie fĂĽr das Online-Lernen am besten kostengĂĽnstige USB-Desktop-Mikrofone wie das Fifine K669 oder das DEXP U700. Je weniger Tasten am Mikrofon, desto besser.
  2. Die Lehrer der High School benutzten Mitte des Monats fast keine Webcams mehr, da die Hauptsache Präsentation und Stimme waren. Das Video lenkt die Schüler ab und verhindert, dass der Lehrer um 8:10 Uhr aufwacht und sofort mit dem Unterricht beginnt.
  3. In den 30 Minuten einer Online-Lektion erzählen die Lehrer viel mehr, als die meisten Schüler gleichzeitig Zeit haben, selbstständig zu lernen.

Von anderen Schulen gab es Anfragen "Ich möchte dasselbe wie auf den Link zoomen", daher wurde ein separater Server mit BigBlueButton und Greenlight als Kontrollfeld eingerichtet.

Es wird auf die gleiche Weise wie die BBB eingestellt, nur mit dem Schalter -g am Ende:

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

Es besteht ein Schutz vor Unterbrechungen des Unterrichts (ein Phänomen, das als Zoom-Bombardierung bezeichnet wird): Beim Erstellen einer Konferenz können Sie den Modus „Genehmigung des Moderators vor der Verbindung“ aktivieren. Jedes Mal, wenn ein Schüler eintritt, ist eine Bestätigung des Lehrers erforderlich. Der Lehrer lässt seine Schüler nur mit einem vertrauten Nachnamen ein.



Für einzelne Konsultationen wurde ein Jitsi-Server bereitgestellt, mit dem Sie schnell einen Raum erstellen und einen Link freigeben können. Sie verwenden ihn jedoch nicht so sehr, sondern erstellen lieber BigBlueButton-Konferenzen für jeden Schüler im Hauptportal.

Ich hoffe, unsere Erfahrung ist fĂĽr jemanden nĂĽtzlich und wir haben die Welt ein bisschen besser gemacht.

All Articles