Expandir el portal de aprendizaje escolar en Moodle y BigBlueButton

A finales de marzo de 2020, una pequeña escuela de Kamchatka enfrentaba el mismo problema que todas las escuelas de nuestro país: ¿cómo enseñar a los niños si no pueden ir a la escuela?

Es imposible simplemente descartar material para un estudio independiente, debe haber comentarios, debe asegurarse de que el alumno haya entendido correctamente el material.

Un estudio de portales federales dejó en claro que las lecciones disponibles son demasiado primitivas para los temas, y es poco probable que las que le permiten cargar su material sobrevivan al aumento de la carga. Por lo tanto, se formularon los requisitos para el portal de capacitación:

  1. Solución en sus servidores (autohospedado). Negativa de los servicios públicos, que probablemente no harán frente a la carga (que luego se confirmó).
  2. Registro manual. El estudiante debe recibir un nombre de usuario / contraseña del maestro de la clase, y no ir a los recursos y registrarse independientemente.
  3. Trabaje en un navegador en todos los dispositivos sin la necesidad de instalar software de terceros. Dado que tanto los padres como los niños están sentados en casa, y no hay suficientes computadoras para todos, el portal de capacitación debe iniciarse en cualquier dispositivo (computadoras, tabletas, teléfonos inteligentes) que estén actualmente disponibles para el estudiante. La instalación de software adicional puede ser un problema, por lo que todo debería funcionar en un navegador sin complementos adicionales (Flash, etc.).
  4. Estructuración de los materiales de la lección, la presencia de comentarios sobre cada tarea completada. El trabajo realizado por el alumno debe estar en el mismo lugar que la tarea. El maestro no debe ordenar la tarea. El maestro debe poder notar los errores de los estudiantes en su trabajo y dejar comentarios allí.
  5. Seguimiento de la actividad del alumno. El maestro necesita saber cuándo entró un estudiante en particular y qué estaba haciendo.
  6. Autorización de extremo a extremo en video tutoriales. Los alumnos no deben tener la oportunidad de presentarse en las lecciones en video, y el maestro debe tener todas las herramientas para moderar la lección en video (encender / apagar los micrófonos y las cámaras de cada participante, prohibir chats privados, encender / apagar el chat general).

Después de una búsqueda y prueba rápidas, elegimos un montón de Moodle + BigBlueButton para satisfacer todos estos requisitos al mismo tiempo.

La instalación y la configuración tomaron 1 día libre, capacitación de docentes y problemas de organización: una semana de vacaciones.

Para empezar, compramos un dominio (usaré el myportal.ru ficticio en todas partes), lo delegamos a los servidores DNS y comenzamos la instalación.

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

El tema Moove se elige como el más simple desde el punto de vista del usuario. En la página principal del usuario hay una ventana grande con una solicitud para ingresar un nombre de usuario y contraseña, y después del inicio de sesión, una lista de lecciones. Es imposible perderse.







Por supuesto, en lugar de las asignaturas, me gustaría tener una lista de lecciones para hoy (un formato más familiar para la escuela), pero como los maestros comenzaron a trabajar con el portal el segundo día después de la instalación, decidimos no tocar nada más ni cambiar nada en la navegación.

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

Instalar un servidor de correo.
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


Como hay muchos estudiantes, creamos cuadros usando un script. Al pegar los valores de las columnas, las filas de creación de usuarios se descargan de la tabla de Excel y se copian en el script.

touch account.sh
chmod +x account.sh

El guión tiene la forma:

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

El script se ejecuta como zimbra.

su zimbra
./account.sh

Configurar 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


Personalización 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.

( — — — ) , , ( ).

Creación de usuarios de Moodle.

Nuevamente, tomamos la placa de identificación, el nombre, la clase, generamos contraseñas para todos (por ejemplo, usando ViPNet Password Generator) y generamos inicios de sesión y direcciones de correo electrónico. Para no ser terriblemente doloroso al usar contraseñas en csv y scripts, eliminamos de las contraseñas las que contienen 'y;



Guardar en csv en este formato:

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

La codificación del archivo debe ser UTF-8, convertir convenientemente a notepad ++.

Administración abierta - Usuarios - Descargar usuarios. Separador ":" Líneas de vista previa "1000". Observamos la presencia de errores y, si todo está bien, descargamos.

Ahora tenemos todos los estudiantes. Queda por crear maestros y puedes crear lecciones.

Administración abierta - Cursos - Administre cursos y categorías. Crea una categoría. Por ejemplo, "Escuela número 1". Asignamos

categorías a los roles:



en Gerentes, agregamos maestros y directores, y en los creadores del curso para todos los maestros.
Creamos un curso (por ejemplo, 11 A Informática). Mientras se encuentra en el curso, el profesor o el profesor principal hace clic en "Participantes" - "Registrar usuarios en el curso".



Puede seleccionar un grupo (por ejemplo, "11 A (2020)") para registrar a todos los usuarios de la clase.
Para agregar elementos a la lección, habilite el modo de edición y agregue un elemento.



Por ejemplo, la conferencia BigBlueButton. Para comenzar la conferencia, haga clic en "Conectarse a la sesión". El video tutorial ha comenzado.



Más de un mes, se ha acumulado experiencia en video tutoriales.

  1. Es mejor usar micrófonos de escritorio USB económicos como el Fifine K669 o DEXP U700 para el aprendizaje en línea. Cuantos menos botones tenga el micrófono, mejor.
  2. Los maestros de secundaria casi dejaron de usar cámaras web a mediados de mes, ya que lo principal era la presentación y la voz. El video distrae a los estudiantes y evita que el maestro se despierte a las 8:10 y comience inmediatamente la lección.
  3. En los 30 minutos de una lección en línea, los maestros cuentan mucho más de lo que la mayoría de los estudiantes tienen tiempo para aprender solos al mismo tiempo.

De otras escuelas hubo solicitudes "Quiero lo mismo que Zoom al enlace", por lo que se creó un servidor separado con BigBlueButton y Greenlight como panel de control.

Se configura de la misma manera que el BBB, solo con el modificador -g al final:

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

Existe protección contra la interrupción de las lecciones (un fenómeno llamado bombardeo con zoom): al crear una conferencia, puede habilitar el modo "Aprobación del moderador antes de la conexión". Cada vez que un estudiante ingresa, se requerirá la confirmación de un maestro, el maestro solo permitirá que sus estudiantes ingresen con un apellido familiar.



Para consultas individuales, se implementó un servidor Jitsi, que le permite crear rápidamente una sala y compartir un enlace, pero no lo usan tanto y prefieren crear conferencias BigBlueButton para cada estudiante en el portal principal.

Espero que nuestra experiencia sea útil para alguien e hicimos el mundo un poco mejor.

All Articles