7.2.2.3.3. Moodle

moodle es una plataforma educativa de software libre muy extendida. Este tipo de software recibe el nombre de LMS y, en el mundo del software existen otras alternativas moderadamente extendidas como:

Para la instalación de moodle consideraremos que disponemos del nombre moodle.example.net y de que ya hemos levantado un servidor nginx instalado con soporte comprobado para php y mysql.

7.2.2.3.3.1. Preliminares

Para moodle, además del PHP instalado, necesitamos:

# apt-get install php-{gd,curl,zip,xml{,rpc},soap,intl,mbstring}

Nota

Es posible que para algunas conversiones sea necesario el paquete ghostscript:

# apt-get install ghostscript

Crearemos dos directorios: uno para albergar la aplicación y otro para contener los datos[1]:

# mkdir -p /srv/www/moodle
# mkdir -m700 /srv/www/data
# chown www-data /srv/www/{data,moodle}

Finalmente, debemos configurar adecuadamente mariadb:

# cat > /etc/mysql/conf.d/moodle.cnf
[mysqld]
innodb_file_per_table = 1
innodb_large_prefix = 1
innodb_file_format = Barracuda
# invoke-rc.d mysql restart

y, como en otras aplicaciones, crear la base de datos y el usuario para moodle:

# mysql
mysql> CREATE DATABASE moodle;
mysql> GRANT ALL ON moodle.* TO 'moodle'@'localhost' IDENTIFIED BY 'contraseñadificil';

Por último, debemos hacernos con la última versión estable de moodle disponible en su página web y descomprimir el contenido dentro de /srv/www/moodle:

# runuser -u www-data -- tar -C /srv/www/moodle -axvf /tmp/moodle-3.6.2.tgz --strip-components=1

7.2.2.3.3.2. Configuración de nginx

Es conveniente que la aplicación corra en un sitio seguro, ya que contiene contraseñas y datos sensibles (notas, por ejemplo). Supuesto todo esto, una configuración apropiada puede ser esta:

server {
   listen  80;
   listen  443 ssl;

   server_name  moodle.example.net;

   root  /srv/www/moodle;
   try_files $uri $uri/ @path_info;
   index index.php;

   include snippets/snakeoil.conf;

   # Redirección al sitio seguro
   if ($https != "on") {
      return 301 https://$host$request_uri;
   }

   location ~ \.php$ {
      include snippets/fastcgi-php.conf;
      fastcgi_pass php;
   }

   include snippets/robotsoff.conf;

   location @path_info {
      rewrite ^/(.*\.php)(/.*)$ /$1?file=$2 last;
      rewrite ^ /index.php?q=$request_uri last;
   }

   # Hacemos inaccesible el directorio de datos.
   location ^~ /data/ {
      return 404;
   }

   location ~* file=.+\.(as[fx]|wax|wm[vx]|avi|bmp|class|divx|docx?|eot|exe|gif|gz|gzip|ico|jpe?g|jpe|mdb|midi?|mov|qt|mp3|m4[av]|mp4|mpe?g|mpe|mpp|od[bcfgpst]|og[gv]|otf|pdf|png|pot|pp[st]|pptx|ram?|svgz?|swf|tar|t?gz|tiff?|ttf|wav|webm|wm[av]|woff2?|wri|xlsx?|xl[atw]|zip)$ {
      expires max;
      access_log off;
      log_not_found off;
   }
}

Nota

La configuración usa el snippet robotsoff.conf que se usó también para wordpress.

7.2.2.3.3.3. Instalación

Basta con escribir la dirección del sitio en un navegador y seguir los pasos.

Advertencia

Algún paso de la instalación puede ser exageradamente lento hasta el punto de que el servidor temporice durante la ejecución de algún script y la instalación de malogre. Si ese es el caso, puede probar a aumentar el tiempo de temporización añadiendo al bloque que se encarga de la ejecución de PHP:

location ~ \.php$ {
   include snippets/fastcgi-php.conf;
   fastcgi_pass php;
   fastcgi_read_timeout 600s;
}

Durante la utilización de moodle es posible que no volvamos a tener este problema, así que podremos eliminar la línea tras la instalación.

Completada la instalación web, debemos:

  1. Cambiar los permisos a /srv/www/moodle:

    # chown -R root:root /srv/www/moodle
    # chgrp www-data /srv/www/moodle/config.php
    
  2. Mover el directorio de datos dentro de /srv/www/moodle y cambiar la configuración para hacer efectivo el cambio:

    # mv /srv/www/{,moodle/}data
    # sed -ri 's:/srv/www/data:/srv/www/moodle/data:' /srv/www/moodle/config.php
    

7.2.2.3.3.4. Postinstalación

Debería al menos cuidarse de hacer cuatro cosas:

  • Añadir al cron del usuario www-data la ejecución cada minuto del script que incluye moodle para ello:

    # crontab -e -u www-data
    

    y en el editor escribir la línea:

    */1 * * * * /usr/bin/php /srv/www/moodle/admin/cli/cron.php > /dev/null
    
  • moodle usa para el envío de mensajes de correo a sus usuaros el módulo interno de PHP. Esto, sin embargo, hará poco fiables tales mensajes para los servidores de correo destinatarios que pueden rechazarlos directamente o mandarlos al buzón de spam. Lo mejor para evitarlo es ir a Administración del Sitio > Servidor > Correo electrónico > Configuración de correo saliente y:

    • o bien, utilizar el servidor de correo del propio servidor, si es que existe y lo hemos configurado para que gestione correctamente el correo del dominio

    • o bien usar una cuenta de correo de un servidor SMTP de terceros.

    E el segundo caoo, es conveniente asegurarse de que el envío funciona utlizando como ayuda una extensión que lo pruebe.

  • Es habitual que tanto profesores como alumnos suban ficheros al servidor. El límite en el tamaño de estos ficheros viene determinado por:

    • La limitación que se defina para la tarea en cuestión o para un curso en particular. En el primer caso, de forma predeterminada, se entiende que la limitación es la máxima que se impone para el curso; y en el segundo caso, que la limitación es la máxima para moodle en su conjunto.

    • La limitación que hayamos definido dentro de la configuración general del propio moodle (Administración del sitio>Seguridad>Políticas del sitio). Su valor predeterminado es que se utilice el límite definido por la configuración de PHP, de modo que no suele hacer falta tocarlo.

    • La limitación que haya definida en la configuración de PHP que se encuentra en /etc/php/7.0/fpm/php.ini y de modo predeterminado es 2MB. Suele ser demasiado pequeña, así que conviene cambiarla a un valor mayor, por ejemplo:

      post_max_size = 20M
      upload_max_filesize = 20M
      
    • La limitación impuesta en la configuración general de nginx a través de la directiva client_max_body_size. Para cambiarla podemos añadir dentro del bloque server del sitio la directiva:

      client_max_body_size 20m;
      

    Nota

    Para colgar ficheros excepcionalmente grandes, no es necesario aumentar indiscriminadamente el límite. Podemos valernos del concepto de Repositorio y definir un repositorio que sea un directorio del sistema de ficheros del propio servidor. Puede añadir un repositorio de este tipo, habilitándolo en Administración del sitio>Extensiones>Repositorios>Gestionar repositorios y agregándolo después en Administración del sitio>Extensiones>Repositorios>Sistema de archivos.

  • Para mantener controlado el espacio que ocupa cada curso es bastante útil la extensión Course size. Tras instalarla, el desglose de cuánto ocupa cada disco será accesible a través de Administración del sitio>Informes>Tamaño de curso, aunque sólo para el administrador del sitio.

  • Las últimas versiones de moodle traen como tema predeterminado para el dispositivo «Default» (en esta categoría entra un navegador ejecutado desde PC), un tema llamado Boost. Anteriormente traía por defecto el tema Clean. Si está más acostumbrado a la interfaz de éste, aún puede usarlo a través de Administración del sitio>Apariencia>Temas>Selector de temas.

  • Puede ser interesante habilitar el autoregistro, lo cual exige dos acciones:

    • En Administración del sitio>Extensiones>Identificación, tener habilitada la «Identificación basada en Email» y en los Ajustes comunes de esa propia página tener fijadas las dos claves que proporciona Google para su servicio de captchas.

    • En Administración del sitio>Extensiones>Identificación>Identificación basada en Email debe habilitarse el elemento reCAPTCHA.

  • Puede llegar a ser interesante habilitar la autenticación a través de servicios como el de Google. Para ello debe hacerse lo siguiente:

    • Habilitar la autenticacación OAuth2 en Administación del sitio>Extensiones>Identificación.

    • Crear unas credenciales adecuadas en Google (véase, por ejemplo, este enlace).

    • Crear un servicio de autenticación con Google a través de Administación del sitio>Extensiones>Identificación>Servicios OAuth2.

    Nota

    Lo habitual es que se habilite esta autenticación si nuestra organización dispone de dominio propio y ha contratado con Google un plan como G-Suite for Education. En ese caso, lo lógico es que:

    • Sólo se permita la autenticación para las cuentas de nuestro propio dominio, lo cual puede lograrse incluyendo el nombre del dominio en el campo Login domains.

    • Se quiera que si se indica un nombre de usuario sin especificar el dominio, el usuario sea el de nuestro dominio y no el de gmail.com. Para ello, en el campo Additional parameters included in a login request. puede incluirse el valor hd=midominio.com.

Advertencia

Para instalar extensiones es bastante probable que tenga que dar temporalmente permisos de escritura a www-data sobre algún subdirectorio.

7.2.2.3.3.5. Actualización

Antes de proceder a ella, es conveniente realizar una copia de seguridad de la base de datos:

# mysqldump moodle | xz -9c > /tmp/moodle.sql.xz

y, además, poner el sitio en mantenimiento para impedir el acceso:

# php /srv/ww/moodle/admin/cli/maintenance.php --enable

Cumplidos estos preliminares, podemos bajar al servidor la última versión estable y proceder del siguiente modo:

  1. Mover los ficheros de la aplicacion a otra ubicación distinta:

    # mv /srv/www/moodle{,.old}/
    

    Advertencia

    No se le ocurra volcar la nueva versión sobre la antigua.

  2. Volcar la versión descargada dentro de /srv/www/moodle:

    # runuser -u www-data -- tar -C /srv/www/moodle -axvf /tmp/moodle-3.7.tgz --strip-components=1
    
  3. Mover el directorio de datos dentro de la nueva aplicación:

    # mv /srv/www/moodle{,.old}/data
    
  4. Copiar la antigua configuración al nuevo sitio:

    # cp -p /srv/www/moodle{,.old}/config.php
    
  5. Deshabilitar el modo mantenimiento:

    # php /srv/ww/moodle/admin/cli/maintenance.php --disable
    
  6. Entrar en la aplicación y actualizar la base de datos y los plugins:

  7. Corregir los permisos:

    # chown -R root:root /srv/www/moodle
    # chown -R www-data /srv/www/moodle/data
    # chgrp www-data /srv/www/moodle/config.php
    
  8. Comprobar el correcto funcionamiento de la aplicación.

  9. Borrar /srv/www/moodle.old:

    # rm -rf /srv/www/moodle.old
    

Notas al pie