在Moodle和BigBlueButton上扩展学校学习门户

到2020年3月底,堪察加半岛的一所小学校面临着与我国所有学校相同的问题:如果不能上学,该如何教孩子们?

仅仅为了独立学习而扔掉材料是不可能的,必须有反馈,您需要确保学生正确地理解了材料。

一项对联邦门户网站的研究清楚表明,对于主题而言,可用的课程太原始了,而允许您上载资料的课程不太可能承受增加的负载。因此,制定了培训门户的要求:

  1. 服务器上的解决方案(自托管)。拒绝公共服务,这很可能无法应付工作量(后来得到证实)。
  2. 手动注册。学生应该从班主任那里获得登录名/密码,而不是去资源和独立注册。
  3. 无需安装第三方软件即可在所有设备上的浏览器中工作。由于父母和孩子都坐在家里,没有足够的计算机供所有人使用,因此培训门户网站应在学生当前可用的任何设备(计算机,平板电脑,智能手机)上运行。安装其他软件可能是个问题,因此所有内容都应在没有其他插件(Flash等)的浏览器中正常工作。
  4. 课程材料的结构,每个完成作业的反馈信息的存在。学生完成的工作应与任务放在同一地点。老师不应该对作业进行排序。老师应该能够在他的工作中记录学生的错误并在那里留下评论。
  5. 监控学生活动。老师需要知道特定学生什么时候进来以及他在做什么。
  6. 视频教程中的端到端授权。学生不应有机会在视频课程中进行自我介绍,教师应拥有所有用于主持视频课程的工具(打开/关闭每个参与者的麦克风和摄像头,禁止私人聊天,打开/关闭普通聊天)。

经过快速搜索和测试,我们选择了一堆Moodle + BigBlueButton来同时满足所有这些要求。

安装和配置需要1天假,老师培训和组织工作需要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密码生成器),并生成登录名和电子邮件地址。为了避免在csv和脚本中使用密码时造成痛苦,我们从密码中删除了包含“和”的密码;



以以下格式保存在csv中:

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

文件编码应为UTF-8,可方便地转换为记事本++。

打开管理-用户-下载用户。分隔符“:”预览行“ 1000”。我们查看是否存在错误,如果一切正常,请下载。

现在我们所有的学生。剩下的工作就是创建教师,您可以创建课程。

开放式管理-课程-管理课程和类别。创建一个类别。例如,“学校编号1”。 我们

为角色



分配类别:在“经理”中,我们添加教师和主任,在课程创建者中,所有教师都被添加。
我们创建一门课程(例如11 A Informatics)。在课程中,老师或班主任单击“参与者”-“为课程注册用户”。



您可以选择一个组(例如,“ 11 A(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

有防止课程中断的保护措施(一种称为“爆炸式轰炸”的现象):创建会议时,可以启用“连接前批准主持人”模式。每次学生进入时,都需要老师的确认,老师只会让一个熟悉的姓氏进入学生。



对于个人咨询,已部署了Jitsi服务器,该服务器可让您快速创建房间并共享链接,但是他们使用它的程度不是很高,而是希望在主门户网站上为每个学生创建BigBlueButton会议。

我希望我们的经验对某人有用,并且我们使世界变得更好了。

All Articles