亚马逊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 田锴在整个调研过程中的指导和协助。

参考文档

本篇作者

劳佳琦

AWS中国团队的解决方案架构师,负责基于AWS的云计算方案架构咨询和设计,同时致力于AWS云服务在国内教育行业的应用和推广。在加入AWS之前,他曾服务与英孚教育,微软等跨国公司。劳佳琦平时热爱足球和音乐,同时也乐于和他人分享自己的各种经历。

钱凯

AWS解决方案架构师,负责基于 AWS 的云计算方案的咨询与架构设计.在加入AWS之前曾在HP、Citrix服务多年,熟悉传统虚拟化、虚拟桌面、微软Windows等产品。