亚马逊AWS官方博客
在 AWS 上快速搭建在线教学平台
背景介绍
- 近期全国中小学推迟开学,很多学校和企业都希望可以快速搭建一套成熟、稳定的在线教学平台。经过调研,设计了基于Moodle和Bigbluebutton这两个海外比较成熟的开源软件在AWS中国区域部署的解决方案,可以帮助客户快速搭建并实现稳定可靠的在线教学。
Moodle
- Moodle是一个学习平台,旨在为教育工作者、管理人员和学习者提供一个强大、安全、完整的系统来创建个性化的学习环境。Moodle是由Moodle总部领导和协调的Moodle项目所创,由全球80多家Moodle合作伙伴服务公司提供资金支持。
- Moodle为全球数以万计的学习环境提供了支持,受到大大小小的机构和组织的信任,包括壳牌、伦敦经济学院、纽约州立大学、微软等。Moodle在全球拥有超过9000万的用户,包括学术界和企业界的用户,这使它成为世界上使用最广泛的学习平台。经过超过10年的发展,Moodle在社会建构主义教学法的指导下,提供了一套强大的以学习者为中心的工具和协作学习环境,为教学和学习提供了强大的支持。
- Moodle的多语言能力确保了在线学习没有语言限制。Moodle社区已经开始将Moodle翻译成超过120种语言(并且还在增加),这样用户就可以轻松地将他们的Moodle站点本地化,同时还提供各种语言的大量资源、支持和社区讨论。
BigBlueButton
- BigBlueButton是一个为在线学习设计的开源的网络会议系统,支持实时共享音频、视频、幻灯片(带有白板控件)、聊天和屏幕。教师可以使用投票、表情符号、多用户白板和分会议室来远程和学生进行互动。演示者也可以记录和回放内容,供以后与他人共享。
- BigBlueButton设计了以下的一些教育用例:
-
- o 在线辅导(一对一)
- o 翻转课堂(在上课前记录内容)
- o 分组协同(多对多)
- o 在线课程(一对多)
服务架构
- 在这个方案中,我们会用到:
o Application Load Balancer 用于接收用户请求;
o EC2 承载 Moodle 和 BigBlueButton 应用和相应组件;
o EFS 用于存放 Moodle 应用使用过程中的持久化数据;
o RDS for MySQL 用于建立 Moodle 数据库;
o ElastiCache 用于缓存 Moodle 的会话和应用使用过程中的临时数据;
o CloudWatch 用于监控整体架构的稳定。
具体搭建步骤
Moodle 安装和配置
- Moodle 服务器我们使用 Amazon Linux 2 标准镜像,在 Moodle EC2 上的准备工作如下:
$ sudo yum update -y
$ sudo yum install -y git telnet
$ sudo rm -f /etc/localtime && \
sudo ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# verify locale
$ date
- 在 Moodle 服务器上安装并配置 Apache:
$ sudo yum install -y httpd
$ sudo usermod -a -G apache ec2-user
$ sudo chown -R ec2-user:apache /var/www
$ sudo chmod 2775 /var/www && find /var/www -type d -exec sudo chmod 2775 {} \;
$ find /var/www -type f -exec sudo chmod 0664 {} \;
# modify Apache config file
$ sudo vim /etc/httpd/conf/httpd.conf
<IfModule dir_module>
DirectoryIndex index.html index.php
</IfModule>
$ sudo systemctl start httpd
$ sudo systemctl enable httpd
$ exit
# login again for group verification
$ groups
- 在 Moodle 服务器上安装并配置 PHP:
$ sudo amazon-linux-extras enable php7.2
$ sudo yum install -y \
php \
php-fpm \
php-gd \
php-json \
php-mbstring \
php-mysqlnd \
php-xml \
php-xmlrpc \
php-opcache \
php-pecl-zip \
php-intl \
php-soap \
php-pecl-redis \
php-cli
# modify php settings
$ sudo vim /etc/php.ini
post_max_size = 128M
upload_max_size = 64M
memory_limit = 256M
# create test PHP file
$ echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
$ sudo systemctl start php-fpm
$ sudo systemctl enable php-fpm
$ sudo systemctl restart httpd
- 在 Moodle 服务器上安装 EFS 工具:
$ git clone https://github.com/aws/efs-utils
$ sudo yum -y install rpm-build
$ cd efs-utils && make rpm
$ sudo yum -y install build/amazon-efs-utils*rpm
$ mount.efs --version
# version of mount.efs show as below
/usr/sbin/mount.efs Version: 1.21
# lower than version 1.19 will unable to mount the China region EFS
$ sudo mkdir -p /mnt/efs
$ sudo mount -t efs fs-<efs_id>:/ /mnt/efs
# add efs path to fstab
$ sudo vim /etc/fstab
fs-<fs_id>:/ /mnt/efs efs defaults,_netdev 0 0
- 在 Moodle 服务器上安装并配置 Moodle:
# create data path for Moodle $ sudo mkdir -p /mnt/efs/moodledata $ sudo chown -R ec2-user:apache /mnt/efs/moodledata $ sudo chmod 2777 /mnt/efs/moodledata && find /mnt/efs/moodledata -type d -exec sudo chmod 2777 {} \;
# clone from git or download from moodle.org for moodle setup
### wget https://download.moodle.org/download.php/direct/stable38/moodle-latest-38.zip
$ git clone -b MOODLE_38_STABLE git://git.moodle.org/moodle.git
$ cp -r moodle /var/www/html/
$ cd /var/www/html/moodle && cp config-dist.php config.php
# access to rds mysql for database setup
### example using mysql
$ 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' IDENTIFIED BY 'yourpassword';
# modify Moodle config file
$ vim config.php
$CFG->dbtype = 'mysqli'; // 'pgsql', 'mariadb', 'mysqli', 'sqlsrv' or 'oci'
$CFG->dblibrary = 'native'; // 'native' only at the moment
$CFG->dbhost = '<RDS_ENDPOINT>'; // eg 'localhost' or 'db.isp.com' or IP
$CFG->dbname = 'moodle'; // database name, eg moodle
$CFG->dbuser = '<DB_USER>'; // your database username
$CFG->dbpass = '<DB_PASSWORD>'; // your database password
$CFG->wwwroot = 'http://<DNS_ENDPOINT>/moodle';
$CFG->dataroot = '/mnt/efs/moodledata';
# setup DB connection
$ php /var/www/html/moodle/admin/cli/install_database.php
# add to crontab
$ sudo vim /etc/crontab
* * * * * /usr/bin/php /var/www/html/moodle/admin/cli/cron.php >/dev/null
- 访问配置的 Moodle 连接 http://<DNS_ENDPOINT>/moodle 进行验证,效果如下:
BigBlueButton 安装和配置
- BigBlueButton 服务器需要开放如下安全组:
o TCP 80:0.0.0.0/0
o TCP 443:0.0.0.0/0
o UDP 16384-32768:0.0.0.0/0
- BigBlueButton 需要一台应用服务器(Ubuntu 16.04)和一台信令(TURN)服务器(Ubuntu 18.04)。在安装配置之前,需要分别为两台服务器各自准备一个公网域名与其公网IP进行映射,在国内部署请务必确保域名已经通过ICP备案(后续命令操作中的 endpoint 即为对应的域名)。准备工作如下:
$ sudo -i
$ apt-get update
$ apt-get install git
- BigBlueButton 信令(TURN)服务器的安装及配置:
$ sudo -i
$ git clone https://github.com/bigbluebutton/bbb-install.git
$ cd bbb-install
# run below command for setup turn server
### <turn server endpoint> for turn server url
### <secret id> for secret access from bbb server
### <email address> for which Let's Encrypt generates ssl certificate
$ ./bbb-install.sh \
-c <turn server endpoint>:<secret id> \
-e <email address>
# for example:
### $ ./bbb-install.sh -c turn.ryanlao.net:12345678 -e ryanlao@example.com
- 完成信令服务器的安装后,我们继续在另一台服务器上安装 BigBlueButton 应用:
$ sudo -i
$ git clone https://github.com/bigbluebutton/bbb-install.git
$ cd bbb-install
# this step will take about 25 mins
# setup with turn server
### <bbb server endpoint> for bbb server url
### <turn server endpoint> for turn server url
### <secret id> for secret access from bbb server
### <email address> for which Let's Encrypt generates ssl certificate
$ ./bbb-install.sh \
-s <bbb server endpoint> \
-v xenial-220 \
-e <email address> \
-c <turn server endpoint>:<secret id> \
-a
# for example:
### $ ./bbb-install.sh -s bbb.ryanlao.net -v xenial-220 -c turn.ryanlao.net:12345678 -e ryanlao@example.com -a
- 按照上述命令安装完成后,BigBlueButton 会创建一个演示环境,可以访问如下链接用于验证是否安装成功:
https://<bbb server endpoint>/demo/demo1.jsp
- 在这之后,我们也可以在 BigBlueButton 应用服务器上安装 BigBlueButton Greenlight 工具,用于创建多个线上教室,并可以通过访问码对在线教室的访问进行验证,此为可选步骤:
$ sudo -i
# purge demo site first
$ apt-get purge bbb-demo
# rerun bbb-install command with greenlight parameter
$ ./bbb-install.sh \
-s <bbb server endpoint> \
-v xenial-220 \
-e <email address> \
-c <turn server endpoint>:<secret id> \
-g
# create an admin account
$ docker exec greenlight-v2 bundle exec rake user:create["<admin name>","<admin email>","<admin password>","admin"]
# access greenlight site for managing meeting room
### e.g. https://bbb.ryanlao.net/b
- BigBlueButton 常用命令:
$ sudo -i
$ bbb-conf --check #查看bbb的配置信息
$ bbb-conf --status #查看bbb的各个服务状态
$ bbb-conf --start/stop/restart #启动/停止/重启bbb相关服务
$ bbb-conf --secret #查看bbb服务器的secret密钥
安装 BigBlueButtonBN
1. BigBlueButtonBN 是用于 Moodle 和 BigBlueButton 集成的插件,安装完成后,老师就可以在 Moodle 上创建基于 BigBlueButton 的在线教室,学生只需在页面上点击 “Join Session” 即可进入在线课堂
2. 下载 BigBlueButtonBN:https://moodle.org/plugins/pluginversions.php?plugin=mod_bigbluebuttonbn
3. 将压缩文件拷贝到 Moodle 服务器上并解压缩:
$ scp -i <keypair> mod_bigbluebuttonbn.zip /
ec2-user@<ip address>:/home/ec2-user/
$ unzip mod_bigbluebuttonbn.zip
4. 将插件目录拷贝至 mod 文件夹:
$ cp -r bigbluebuttonbn/ /var/www/html/moodle/mod/
5. 使用管理员登录并访问 Moodle 网站
6. Moodle 会自动检测插件并提示升级,点击“升级”按钮即可安装插件,完成后点击“继续”按钮即可完成
7. BigBlueButtonBN 在 Moodle 网站管理的插件页面上就可以被看到并使用了
8. 选择添加 BigBlueButton 服务器
a. 输入 BigBlueButton 服务器地址 (e.g. http://bbb.ryanlao.net/bigbluebutton)
b. 输入 BigBlueButton 共享密钥: (可以使用预配置,或者连接到 BigBlueButton 服务器上重新生成,如下)
#shared key needs to be set as fixed length
sudo bbb-conf --setsalt <aaaaaaaabbbbbbbbccccccccdddddddd>
效果展示
1. 这是 Moodle 的课程列表页面,如图:
2. 点击课程后,会看到进入课程的“Join Session”按钮;除此之外,BigBlueButton 的录制功能也可以与 Moodle 集成,完成录制后,会在 Moodle 页面上看到相应的课程回放,如图:
3. 点击“Join Session”后,就可以进入在线教室,如图:
4. 通过 CloudWatch 创建监控面板,展示整个平台的监控指标来直观反映平台的稳定性:
小结
通过这个方案,学校和教育行业客户可以在自己的 AWS 账号中快速搭建属于自己的稳定的在线教学平台。尽管受到新冠病毒疫情的影响不能在学校开课,这个方案同样也可以帮助学校和教育行业客户开展教学活动。也要特别感谢我们的教育行业 SA 田锴在整个调研过程中的指导和协助。
参考文档
- Moodle 官网:https://moodle.org/
- Moodle 快速安装文档:https://docs.moodle.org/38/en/Installation_quick_guide
- Moodle 插件管理:https://docs.moodle.org/38/en/Installing_plugins
- BigBlueButton GitHub 链接:https://github.com/bigbluebutton/bigbluebutton
- BigBlueButtonBN 插件介绍:https://moodle.org/plugins/mod_bigbluebuttonbn
- 创建 CloudWatch 监控面板: https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/CloudWatch_Dashboards.html