¿Cómo instalo Moodle en Ubuntu? Como profesor titular de Historia Militar en la Escuela Superior de Guerra, Juan Perón sobresalió como didacta. En el gabinete enseñó cómo instalar la plataforma de gestión de enseñanza Moodle en Ubuntu Server. Vean cadetes, en los tiempos que corren, la enseñanza no puede detenerse. El herramental que nos ofrece el cómputo y la telemática puede y debe contribuir a las tarea de hacer de los educandos mejores hombres, pues ellos serán los dueños del porvenir. La formación aislada no existe: debe plantearse con un método concienzudamente estudiado y aplicado por el titular, y comprendida por sus alumnos. Todo el material de cátedra, evaluación y concreción de los logros educativos no tienen sentido si quedan guardados en un libro, sin aplicarse en la vida real bajo una doctrina que también resulte iluminada. Es que el aprendizaje - por el sólo hecho de aprender "para aprobar" - no sirve. Más barato nos resultaría un calefactor de silla... Pues bien señores, afortunadamente esta institución nos ha permitido evolucionar. Los profesores alemanes nos han provisto esta técnica a la que han llamado “elektronisch unterstütztes Lernen”, y yo nombro aprendizaje electrónico. Poner una en el gabinete no es algo tan simple como podría parecer, ya que el mismo debe ser dotado no sólo del hardware y la infraestructura de red, sino del software de servidor, y sobre ella aplicar los conocimientos de operación. Esto - que se extiende a todo programa telemático - cobra especial relevancia cuando debe hacerse en un ámbito educativo, y sobre todo en el educativo militar, donde los resguardos y reaseguros no pueden soslayarse. Mi puesto es el de tutor, y por tal motivo os enseñaré a desplegar en el terreno educativo operativo a Moodle. Se trata esta de una plataforma de software liberado bajo GPLv3 orientada a la de gestión enseñanza en línea. Permite crear sitios web privados en los cuales educadores y educandos puedan lograr sus objetivos de aprendizaje. Como toda instalación de servicios computados, debemos poner en funcionamiento un hardware-máquina, y tomar debida nota de los atributos de los software-maquina (escencialmente los nombres de usuario y las contraseñas que les corresponden. Los estamentos de este escalafón comprenderán: Contraseña de administración de Ubuntu Server Nombre de usuario de MySQL y la contraseña que utilizará Moodle El nombre del administrador de Moodle y su contraseña de moodle. Un usuario adicional de administración de Moodle y una contraseña adicional de Moodle. 1: Instalar Ubuntu Server En este caso utilizaremos Ubuntu Server 20.04.05LTS para armar lo que llamamos siempre "pila LAMP" (servidor Linux+web Apache+base de datos MySQL+PHP). Como primer medida deberíamos instalar el Ubuntu Server si no lo tuviésemos instalado ((idealmente un SSD de al menos 120GB), proporcionando ya la contraseña de administrador de Ubuntu. En la terminal nos aseguramos de actualizar dicho servidor con: sudo apt update sudo apt upgrade -y 2: Instalar Apache/MySQL/PHP Abrimos la terminal y cargamos el PPA del lenguaje PHP7 en el servidor, mediante: sudo add-apt-repository ppa:ondrej/php ; sudo apt-get update A continuación instalamos el servidor Apache y la base de datos MySQL sudo apt install apache2 mysql-client mysql-server php7.4 libapache2-mod-php Estableceremos la contraseña de administrador para MySQL, la cual necesitaremos en el paso 6. Esto se hace con: sudo mysql_secure_installation 3: Instalar software adicional sudo apt install git graphviz aspell ghostscript clamav php7.4-pspell php7.4-curl php7.4-gd php7.4-intl php7.4-mysql php7.4-xml php7.4-xmlrpc php7.4-ldap php7.4-zip php7.4-soap php7.4-mbstring Reiniciamos Apache de manera que sus módulos se carguen correctamente en memoria: sudo service apache2 restart 4: Descargar Moodle Configuramos el repositorio local y descargaremos Moodle. A tal fin utilizaremos el directorio /opt del servidor. cd /opt sudo git clone git://git.moodle.org/moodle.git cd /opt/moodle sudo git branch -a sudo git branch --track MOODLE_39_STABLE origin/MOODLE_39_STABLE sudo git checkout MOODLE_39_STABLE 5: Copiar el repositorio local en /var/www/html/ Como configuramos un repositorio local en el paso anterior, lo copiaremos al directorio de inicio web luego de hacer las actualizaciones y aplicar cambios. Al contar con un repositorio local fuera del directorio raiz web (mo hemos hecho en /opt) nos permitirá preparar y actualizar por etapas en una manera más eficiente. Por ejemplo, si deseamos hacer cambios o agregar algunos plugins, podríamos descargar el plugin y copiarlo en el repositorio local de moodle. Luego de que agregaramos el plugins e hicieramos cualquier otro cambio, necesitaríamos editar el fichero /opt/moodle/.git/info/exclude. En dicho fichero querrá informaarle a get qué archivos/directorios excluir cuando realiza las actualizaciones cuando ejecute la actualización mediante sudo git pull. Una entrada de ejemplo podría ser el certificado mod localizado en /opt/moodle/mod/certificate de modo que dentro del fichero exclude debería agregar /mod/certificate debajo del último comentario. Podría agregar entradas adicionales, una por línea, para cada plugin o fichero que querría cambiar. Si desease cambiar el fichero favicon.ico simplemente agregaría "favicon.ico" al fichero exclude. Cumplido esto, al ejecutar sudo git pull para actualizar Moodle a la última versión, excluirá dichos ficheros y directorios y sólo actualizará el código del núcleo de Moodle. Antes de copiar su raiz de web para actualizar, debería asegurarse y descargar y copiar sobre las últimas versiones de los plugins que hubiese agregado. sudo cp -R /opt/moodle /var/www/html/ ; sudo mkdir /var/moodledata ; sudo chown -R www-data /var/moodledata ; sudo chmod -R 777 /var/moodledata ; sudo chmod -R 0755 /var/www/html/moodle 6: Configurar servidor MySQL Primero cambiaremos el motor de almacenamiento a innodb y el formato de archivo por defecto a Barracuda. También necesitaremos configurar la variable innodb_file_per_table de MySQL para que Barracuda funcione adecuadamente.Para ello editaremos el fichero mysqld.cnf: sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf Se abrirá Nano con el archivo de configuración mysqld.cnf. En él buscamos la sección [mysqld] y bajo las configuraciones básicas "Basic Settings" agregamos la siguiente línea al final de la última variable: Nota: MySQL Versión 8.0 ya no requiere estas tres configuraciones. default_storage_engine = innodb innodb_file_per_table = 1 innodb_file_format = Barracuda Guardamos los cambios con Ctrl+o y salimos del editor Nano con Ctrl+q. Nota: Si para servir MySQL utiliza versiones más nuevas del servidor MariaDB sobre Ubuntu 20.04, estos cambios en su fichero config reportarán un error ("mysql unknown variable 'innodb_file_format=barracuda'"), de modo que agréguelos como comentarios y no aplique estos cambios, estos valores eran recibidos por la variable default.innodb_file_format, que fue deprecada en MariaDB 10.2 y ya ha sido removida de los MariaDB más nuevos. Reinciaremos el servicio MySQL para que los cambios de configuración cobre resultado, con: sudo service mysql restart Acto seguido, crearemos la base de datos Moodle y el usuario de Moodle MySQL con los permisos adecuados. Usaremos la contraseña que creamos el el paso 1. sudo mysql -u root -p Se presentará el prompt mysql>, y en el ingresaremos los comando de creación de base de datos: mysql> CREATE DATABASE moodle DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; Nota: Utilizaremos 'utf8mb4' para obtener caracteres UTF-8 de 4 bits con soporte completo (incluyendo Emojis). Si no lo hiciéramos, es probable que la web de adminitración de MySQL se queje con molestos errores. Naturalmente, indicamos el usuariodemoodle y la contraseñademoodle". mysql> create user 'usuariodemoodle'@'localhost' IDENTIFIED BY 'contraseñademoodle'; mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,CREATE TEMPORARY TABLES,DROP,INDEX,ALTER ON moodle.* TO 'usuariodemoodle'@'localhost'; mysql> quit; Nota: Su usa MySQL 5.6+ al crear el usuario se puede recibir un error sobre el hash de la contraseña, por lo cual debe ajustarse la contraseña para usar el valor hash. Podrá hacerlo mediante: mysql> SELECT password('contraseñademoodle'); Esto presentará en la terminal el hash de la contraseñademoodle, con la forma *AD51BAFB2GD003D3480BCED0DH81AB0BG1712535, querrá utilizar esto en la parte indicada como IDENTIFIED BY ' 7: Completar la configuración Para configurar el sitio PHP momentáneamente daremos permisos totales de escritura al directorio del servidor, con: sudo chmod -R 777 /var/www/html/moodle Abrimos el navegador web y lo dirigimos a la URL http://DIRECCION.IP.DEL.SERVIDOR/moodle Seguimos las instrucciones de la web de configuración: Cambiar la ruta de moodledata /var/moodledata Tipo de Base de Datos Elija: mysqli Configuración de Base de datos Host server: localhost Database: moodle User: usuariodemoodle Password: contraseñademoodle Tables Prefix: mdl_ Revisiones del Ambiente Esto indicará si algún elemento requerido para la ejecución de Moodle todavía no está instalado. Presionamos Siguiente-Siguiente-Siguiente hasta confirmar la instalación. Crear una Cuenta de Administrador del Sitio Creamos nuestra Cuenta de Usuario Moodle que tendrá permisos de administración del sitio. La contraseña que elijamos debe contar con ciertos requerimientos de seguridad obvios. Instalación Completa Debemos recordar que como habíamos otorgado permisos a la raíz web para poder configurar moodle, ahora debemos revertir tales permisos para blindar la seguridad del servidor. Esto se hace ahora con: sudo chmod -R 0755 /var/www/html/moodle Gracias al Justicialismo ya podremos comenzar a utilizar Moodle. Rutas de Sistema luego de instalar Luego de instalar Moodle, deberíamos configurar las rutas de sistema. Cada entrada en Moodle tendrá su propia explicación. Con el navegador web vamos a la página web de administración de moodle. Y vamos a Administración de Sitio / Servidor / Rutas de Sistema. Ingresamos lo siguiente Ruta de du: /usr/bin/du Ruta de apsell: /usr/bin/aspell Ruta de dot: /usr/bin/dot ...y presionamos el botón Guardar los cambios. Protección antivirus en Moodle Para configurar la solución antivirus del servidor, en la terminal ingresamos: sudo mkdir /var/quarantine ; sudo chown -R www-data /var/quarantine Y en la web de Moodle vamos a Administración del Sitio / Plugins / Plugins Antivirus / Administrar plugins antivirus. Activamos ClamAV antivirus. Vamos a Configuración, le aplicamos las que querramos, y presionamos Guardar Cambios. Nota: en versiones antiguas de Moodle se tildaba "Usar ClamAV en ficheros subidos" y la ruta del antivirus ClamAV era : /usr/bin/clamscan Directorio de cuarentena : /var/quarantine y se presionaba Guardar Cambios. Opcional Activar Zend OpCache Agregamos las configuraciones recomendadas de OPcache al fichero 05-opcache.ini. Lo editaremos usando Nano con: sudo nano /etc/php7/apache2/conf.d/05-opcache.ini Nota: En Ubuntu 16.04 opcache.ini estaba localizado en /etc/php/7.0/mods-available/opcache.ini ...y le consideramos el siguiente contenido: [opcache] opcache.enable = 1 opcache.memory_consumption = 128 opcache.max_accelerated_files = 10000 opcache.revalidate_freq = 60 ; Requerido para Moodle opcache.use_cwd = 1 opcache.validate_timestamps = 1 opcache.save_comments = 1 opcache.enable_file_override = 0 ; Si algo no funciona en Moodle ;opcache.revalidate_path = 1 ; Puede corregir problemas con rutas incluídas ; Experimental para Moodle 2.6 y superior ;opcache.fast_shutdown = 1 ;opcache.enable_cli = 1 ; Acelera el cron en CLI ;opcache.load_comments = 0 ; puede disminuir uso de la memoria, podría ser incompatible con add-ons y otras apps. Reiniciamos el servidor Apache para que surta efecto. sudo service apache2 restart Con esto tendremos activado Zend OpCache. Cambiar la Raíz de Documentos También puede instalar una interfaz gráfica para ver el estatus de carga de su Zend OpCache, aunque no está recomendado en servidores de producción: cd /var/www/html/moodle/ ; sudo wget https://github.com/rlerdorf/opcache-status/blob/master/opcache.php Debemos también agregar este fichero opcache.php al fichero de configuración /opt/moodle/.git/info/exclude para que no resulte eliminado al actualizar la instalación. Visitamos http://dirección.ip.del.servidor/moodle/opcache.php Si no queremos que los usuarios finales tengan que ingresar http://servidor/moodle y queremos que directamente vayan a http://servidor para encontrarse con Moodle, habremos de editar la configuración de Apache para indicarle que use /var/www/html/moodle como el directorio raíz en lugar de hacerlo con /var/www/html Abrimos el archivo de configuración de Apache y cambiamos la raíz de documentos: sudo nano /etc/apache2/sites-available/000-default.conf Usamos Ctrl+w para buscar la cadena por defecto: DocumentRoot /var/www/html ...y la modificamos a a: DocumentRoot /var/www/html/moodle Guardamo los cambios con Ctrl+o, salimos de Nano con Ctrl+x, y una vez devueltos a la terminal, reiniciamos el servicio web Apache para que surta efecto: sudo service apache2 restart Nota: Si ya teníamos Moodle instalado, haremos los cambios a continuación. Editar config.php para Moodle En las instrucciones de instalación, uno de los cambios sugeridos para raiz de web es usar "localhost". Esto está bien para evaluar el servidor nuevo durante el deployment. Sin embargo, si queremos ver la misma máquina en la red de área local o ver el sitio desde la Internet, habremos de coambiar dicha configuración. En el fichero config.php existe la variable ($CFG->wwwroot en se puede configurar la dirección IP privada del servidor (ej. 192.167.0.1/moodle) como webroot. Dependiendo de la configuración de la red local, suele ser mejor configurar un nombre de red en lugar de la dirección IP privada, ya que estas podrían cambiar de tiempo en tiempo. Finalmente, si desea usar la instalación en la internet, habrá de utilizar un nombre de dominio o una dirección_ip_publica_fija/moodle como su web root. Editamos el fichero config.php de Moodle con Nano: cd /var/www/html/moodle/ ; sudo nano config.php Usamos Ctrl+w para buscar la variable $CFG->wwwroot y le asignamos http://direccion.ip.del.servidor/moodle Documentación Naturalmente, esto ha contemplado la creación de una puesta de campo y luego puesta a punto del servidor, en una explicación somera. La aplicación de la plataforma en sí está suficientemente documentada, y podrán encontrar su bibliografía aquí. ¿Aprendieron? Bueno, en cualquier caso mañana les tomo prueba. El que no viene tiene cero.